diff --git a/assets/tab_viz_ext_class_worksheet.png b/assets/tab_viz_ext_class_worksheet.png new file mode 100644 index 00000000..042d9389 Binary files /dev/null and b/assets/tab_viz_ext_class_worksheet.png differ diff --git a/docs/assets/js/search.js b/docs/assets/js/search.js index 774d515a..527c71a1 100644 --- a/docs/assets/js/search.js +++ b/docs/assets/js/search.js @@ -1,3 +1,3 @@ var typedoc = typedoc || {}; typedoc.search = typedoc.search || {}; - typedoc.search.data = {"kinds":{"2":"Module","4":"Enumeration","16":"Enumeration member","32":"Variable","256":"Interface","1024":"Property","2048":"Method","65536":"Type literal","2097152":"Object literal","4194304":"Type alias"},"rows":[{"id":0,"kind":2,"name":"Tableau","url":"modules/tableau.html","classes":"tsd-kind-module"},{"id":1,"kind":4,"name":"AnalyticsObjectType","url":"enums/tableau.analyticsobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":2,"kind":16,"name":"Cluster","url":"enums/tableau.analyticsobjecttype.html#cluster","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":3,"kind":16,"name":"Forecast","url":"enums/tableau.analyticsobjecttype.html#forecast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":4,"kind":16,"name":"TrendLine","url":"enums/tableau.analyticsobjecttype.html#trendline","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":5,"kind":4,"name":"AnnotationType","url":"enums/tableau.annotationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":6,"kind":16,"name":"Mark","url":"enums/tableau.annotationtype.html#mark","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":7,"kind":16,"name":"Point","url":"enums/tableau.annotationtype.html#point","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":8,"kind":16,"name":"Area","url":"enums/tableau.annotationtype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":9,"kind":4,"name":"ColumnType","url":"enums/tableau.columntype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":10,"kind":16,"name":"Discrete","url":"enums/tableau.columntype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":11,"kind":16,"name":"Continuous","url":"enums/tableau.columntype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":12,"kind":4,"name":"ClassNameKey","url":"enums/tableau.classnamekey.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":13,"kind":16,"name":"WorksheetTitle","url":"enums/tableau.classnamekey.html#worksheettitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":14,"kind":16,"name":"Worksheet","url":"enums/tableau.classnamekey.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":15,"kind":16,"name":"Tooltip","url":"enums/tableau.classnamekey.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":16,"kind":16,"name":"StoryTitle","url":"enums/tableau.classnamekey.html#storytitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":17,"kind":16,"name":"DashboardTitle","url":"enums/tableau.classnamekey.html#dashboardtitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":18,"kind":4,"name":"DashboardObjectType","url":"enums/tableau.dashboardobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":19,"kind":16,"name":"Blank","url":"enums/tableau.dashboardobjecttype.html#blank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":20,"kind":16,"name":"Worksheet","url":"enums/tableau.dashboardobjecttype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":21,"kind":16,"name":"QuickFilter","url":"enums/tableau.dashboardobjecttype.html#quickfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":22,"kind":16,"name":"ParameterControl","url":"enums/tableau.dashboardobjecttype.html#parametercontrol","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":23,"kind":16,"name":"PageFilter","url":"enums/tableau.dashboardobjecttype.html#pagefilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":24,"kind":16,"name":"Legend","url":"enums/tableau.dashboardobjecttype.html#legend","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":25,"kind":16,"name":"Title","url":"enums/tableau.dashboardobjecttype.html#title","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":26,"kind":16,"name":"Text","url":"enums/tableau.dashboardobjecttype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":27,"kind":16,"name":"Image","url":"enums/tableau.dashboardobjecttype.html#image","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":28,"kind":16,"name":"WebPage","url":"enums/tableau.dashboardobjecttype.html#webpage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":29,"kind":16,"name":"Extension","url":"enums/tableau.dashboardobjecttype.html#extension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":30,"kind":4,"name":"DashboardObjectVisibilityType","url":"enums/tableau.dashboardobjectvisibilitytype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":31,"kind":16,"name":"Show","url":"enums/tableau.dashboardobjectvisibilitytype.html#show","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":32,"kind":16,"name":"Hide","url":"enums/tableau.dashboardobjectvisibilitytype.html#hide","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":33,"kind":4,"name":"DataType","url":"enums/tableau.datatype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":34,"kind":16,"name":"String","url":"enums/tableau.datatype.html#string","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":35,"kind":16,"name":"Int","url":"enums/tableau.datatype.html#int","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":36,"kind":16,"name":"Float","url":"enums/tableau.datatype.html#float","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":37,"kind":16,"name":"Bool","url":"enums/tableau.datatype.html#bool","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":38,"kind":16,"name":"Date","url":"enums/tableau.datatype.html#date","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":39,"kind":16,"name":"DateTime","url":"enums/tableau.datatype.html#datetime","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":40,"kind":16,"name":"Spatial","url":"enums/tableau.datatype.html#spatial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":41,"kind":4,"name":"DashboardLayoutChange","url":"enums/tableau.dashboardlayoutchange.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":42,"kind":16,"name":"Added","url":"enums/tableau.dashboardlayoutchange.html#added","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":43,"kind":16,"name":"Removed","url":"enums/tableau.dashboardlayoutchange.html#removed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":44,"kind":16,"name":"IsFloatingChanged","url":"enums/tableau.dashboardlayoutchange.html#isfloatingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":45,"kind":16,"name":"IsVisibleChanged","url":"enums/tableau.dashboardlayoutchange.html#isvisiblechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":46,"kind":16,"name":"PositionChanged","url":"enums/tableau.dashboardlayoutchange.html#positionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":47,"kind":16,"name":"SizeChanged","url":"enums/tableau.dashboardlayoutchange.html#sizechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":48,"kind":16,"name":"NameChanged","url":"enums/tableau.dashboardlayoutchange.html#namechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":49,"kind":4,"name":"DateRangeType","url":"enums/tableau.daterangetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":50,"kind":16,"name":"Last","url":"enums/tableau.daterangetype.html#last","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":51,"kind":16,"name":"LastN","url":"enums/tableau.daterangetype.html#lastn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":52,"kind":16,"name":"Next","url":"enums/tableau.daterangetype.html#next","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":53,"kind":16,"name":"NextN","url":"enums/tableau.daterangetype.html#nextn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":54,"kind":16,"name":"Current","url":"enums/tableau.daterangetype.html#current","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":55,"kind":16,"name":"ToDate","url":"enums/tableau.daterangetype.html#todate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":56,"kind":4,"name":"DialogStyle","url":"enums/tableau.dialogstyle.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":57,"kind":16,"name":"Window","url":"enums/tableau.dialogstyle.html#window","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":58,"kind":16,"name":"Modal","url":"enums/tableau.dialogstyle.html#modal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":59,"kind":16,"name":"Modeless","url":"enums/tableau.dialogstyle.html#modeless","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":60,"kind":4,"name":"EncodingType","url":"enums/tableau.encodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":61,"kind":16,"name":"Column","url":"enums/tableau.encodingtype.html#column","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":62,"kind":16,"name":"Row","url":"enums/tableau.encodingtype.html#row","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":63,"kind":16,"name":"Page","url":"enums/tableau.encodingtype.html#page","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":64,"kind":16,"name":"Filter","url":"enums/tableau.encodingtype.html#filter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":65,"kind":16,"name":"MarksType","url":"enums/tableau.encodingtype.html#markstype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":66,"kind":16,"name":"MeasureValues","url":"enums/tableau.encodingtype.html#measurevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":67,"kind":16,"name":"Color","url":"enums/tableau.encodingtype.html#color","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":68,"kind":16,"name":"Size","url":"enums/tableau.encodingtype.html#size","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":69,"kind":16,"name":"Label","url":"enums/tableau.encodingtype.html#label","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":70,"kind":16,"name":"Detail","url":"enums/tableau.encodingtype.html#detail","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":71,"kind":16,"name":"Tooltip","url":"enums/tableau.encodingtype.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":72,"kind":16,"name":"Shape","url":"enums/tableau.encodingtype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":73,"kind":16,"name":"Path","url":"enums/tableau.encodingtype.html#path","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":74,"kind":16,"name":"Angle","url":"enums/tableau.encodingtype.html#angle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":75,"kind":4,"name":"FieldAggregationType","url":"enums/tableau.fieldaggregationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":76,"kind":16,"name":"Sum","url":"enums/tableau.fieldaggregationtype.html#sum","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":77,"kind":16,"name":"Avg","url":"enums/tableau.fieldaggregationtype.html#avg","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":78,"kind":16,"name":"Min","url":"enums/tableau.fieldaggregationtype.html#min","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":79,"kind":16,"name":"Max","url":"enums/tableau.fieldaggregationtype.html#max","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":80,"kind":16,"name":"Stdev","url":"enums/tableau.fieldaggregationtype.html#stdev","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":81,"kind":16,"name":"Stdevp","url":"enums/tableau.fieldaggregationtype.html#stdevp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":82,"kind":16,"name":"Var","url":"enums/tableau.fieldaggregationtype.html#var","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":83,"kind":16,"name":"Varp","url":"enums/tableau.fieldaggregationtype.html#varp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":84,"kind":16,"name":"Count","url":"enums/tableau.fieldaggregationtype.html#count","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":85,"kind":16,"name":"Countd","url":"enums/tableau.fieldaggregationtype.html#countd","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":86,"kind":16,"name":"Median","url":"enums/tableau.fieldaggregationtype.html#median","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":87,"kind":16,"name":"Attr","url":"enums/tableau.fieldaggregationtype.html#attr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":88,"kind":16,"name":"None","url":"enums/tableau.fieldaggregationtype.html#none","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":89,"kind":16,"name":"Year","url":"enums/tableau.fieldaggregationtype.html#year","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":90,"kind":16,"name":"Qtr","url":"enums/tableau.fieldaggregationtype.html#qtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":91,"kind":16,"name":"Month","url":"enums/tableau.fieldaggregationtype.html#month","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":92,"kind":16,"name":"Day","url":"enums/tableau.fieldaggregationtype.html#day","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":93,"kind":16,"name":"Hour","url":"enums/tableau.fieldaggregationtype.html#hour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":94,"kind":16,"name":"Minute","url":"enums/tableau.fieldaggregationtype.html#minute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":95,"kind":16,"name":"Second","url":"enums/tableau.fieldaggregationtype.html#second","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":96,"kind":16,"name":"Week","url":"enums/tableau.fieldaggregationtype.html#week","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":97,"kind":16,"name":"Weekday","url":"enums/tableau.fieldaggregationtype.html#weekday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":98,"kind":16,"name":"MonthYear","url":"enums/tableau.fieldaggregationtype.html#monthyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":99,"kind":16,"name":"Mdy","url":"enums/tableau.fieldaggregationtype.html#mdy","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":100,"kind":16,"name":"End","url":"enums/tableau.fieldaggregationtype.html#end","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":101,"kind":16,"name":"TruncYear","url":"enums/tableau.fieldaggregationtype.html#truncyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":102,"kind":16,"name":"TruncQtr","url":"enums/tableau.fieldaggregationtype.html#truncqtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":103,"kind":16,"name":"TruncMonth","url":"enums/tableau.fieldaggregationtype.html#truncmonth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":104,"kind":16,"name":"TruncWeek","url":"enums/tableau.fieldaggregationtype.html#truncweek","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":105,"kind":16,"name":"TruncDay","url":"enums/tableau.fieldaggregationtype.html#truncday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":106,"kind":16,"name":"TruncHour","url":"enums/tableau.fieldaggregationtype.html#trunchour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":107,"kind":16,"name":"TruncMinute","url":"enums/tableau.fieldaggregationtype.html#truncminute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":108,"kind":16,"name":"TruncSecond","url":"enums/tableau.fieldaggregationtype.html#truncsecond","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":109,"kind":16,"name":"Quart1","url":"enums/tableau.fieldaggregationtype.html#quart1","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":110,"kind":16,"name":"Quart3","url":"enums/tableau.fieldaggregationtype.html#quart3","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":111,"kind":16,"name":"Skewness","url":"enums/tableau.fieldaggregationtype.html#skewness","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":112,"kind":16,"name":"Kurtosis","url":"enums/tableau.fieldaggregationtype.html#kurtosis","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":113,"kind":16,"name":"InOut","url":"enums/tableau.fieldaggregationtype.html#inout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":114,"kind":16,"name":"User","url":"enums/tableau.fieldaggregationtype.html#user","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":115,"kind":4,"name":"FieldRoleType","url":"enums/tableau.fieldroletype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":116,"kind":16,"name":"Dimension","url":"enums/tableau.fieldroletype.html#dimension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":117,"kind":16,"name":"Measure","url":"enums/tableau.fieldroletype.html#measure","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":118,"kind":16,"name":"Unknown","url":"enums/tableau.fieldroletype.html#unknown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":119,"kind":4,"name":"FilterType","url":"enums/tableau.filtertype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":120,"kind":16,"name":"Categorical","url":"enums/tableau.filtertype.html#categorical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":121,"kind":16,"name":"Range","url":"enums/tableau.filtertype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":122,"kind":16,"name":"Hierarchical","url":"enums/tableau.filtertype.html#hierarchical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":123,"kind":16,"name":"RelativeDate","url":"enums/tableau.filtertype.html#relativedate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":124,"kind":4,"name":"FilterUpdateType","url":"enums/tableau.filterupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":125,"kind":16,"name":"Add","url":"enums/tableau.filterupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":126,"kind":16,"name":"All","url":"enums/tableau.filterupdatetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":127,"kind":16,"name":"Replace","url":"enums/tableau.filterupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":128,"kind":16,"name":"Remove","url":"enums/tableau.filterupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":129,"kind":4,"name":"FilterDomainType","url":"enums/tableau.filterdomaintype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":130,"kind":16,"name":"Relevant","url":"enums/tableau.filterdomaintype.html#relevant","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":131,"kind":16,"name":"Database","url":"enums/tableau.filterdomaintype.html#database","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":132,"kind":4,"name":"FilterNullOption","url":"enums/tableau.filternulloption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":133,"kind":16,"name":"NullValues","url":"enums/tableau.filternulloption.html#nullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":134,"kind":16,"name":"NonNullValues","url":"enums/tableau.filternulloption.html#nonnullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":135,"kind":16,"name":"AllValues","url":"enums/tableau.filternulloption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":136,"kind":4,"name":"IncludeDataValuesOption","url":"enums/tableau.includedatavaluesoption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":137,"kind":16,"name":"AllValues","url":"enums/tableau.includedatavaluesoption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":138,"kind":16,"name":"OnlyNativeValues","url":"enums/tableau.includedatavaluesoption.html#onlynativevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":139,"kind":16,"name":"OnlyFormattedValues","url":"enums/tableau.includedatavaluesoption.html#onlyformattedvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":140,"kind":4,"name":"MarkType","url":"enums/tableau.marktype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":141,"kind":16,"name":"Bar","url":"enums/tableau.marktype.html#bar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":142,"kind":16,"name":"Line","url":"enums/tableau.marktype.html#line","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":143,"kind":16,"name":"Area","url":"enums/tableau.marktype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":144,"kind":16,"name":"Square","url":"enums/tableau.marktype.html#square","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":145,"kind":16,"name":"Circle","url":"enums/tableau.marktype.html#circle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":146,"kind":16,"name":"Shape","url":"enums/tableau.marktype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":147,"kind":16,"name":"Text","url":"enums/tableau.marktype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":148,"kind":16,"name":"Map","url":"enums/tableau.marktype.html#map","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":149,"kind":16,"name":"Pie","url":"enums/tableau.marktype.html#pie","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":150,"kind":16,"name":"GanttBar","url":"enums/tableau.marktype.html#ganttbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":151,"kind":16,"name":"Polygon","url":"enums/tableau.marktype.html#polygon","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":152,"kind":4,"name":"ParameterValueType","url":"enums/tableau.parametervaluetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":153,"kind":16,"name":"All","url":"enums/tableau.parametervaluetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":154,"kind":16,"name":"List","url":"enums/tableau.parametervaluetype.html#list","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":155,"kind":16,"name":"Range","url":"enums/tableau.parametervaluetype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":156,"kind":4,"name":"PeriodType","url":"enums/tableau.periodtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":157,"kind":16,"name":"Years","url":"enums/tableau.periodtype.html#years","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":158,"kind":16,"name":"Quarters","url":"enums/tableau.periodtype.html#quarters","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":159,"kind":16,"name":"Months","url":"enums/tableau.periodtype.html#months","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":160,"kind":16,"name":"Weeks","url":"enums/tableau.periodtype.html#weeks","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":161,"kind":16,"name":"Days","url":"enums/tableau.periodtype.html#days","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":162,"kind":16,"name":"Hours","url":"enums/tableau.periodtype.html#hours","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":163,"kind":16,"name":"Minutes","url":"enums/tableau.periodtype.html#minutes","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":164,"kind":16,"name":"Seconds","url":"enums/tableau.periodtype.html#seconds","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":165,"kind":4,"name":"QuickTableCalcType","url":"enums/tableau.quicktablecalctype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":166,"kind":16,"name":"RunningTotal","url":"enums/tableau.quicktablecalctype.html#runningtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":167,"kind":16,"name":"Difference","url":"enums/tableau.quicktablecalctype.html#difference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":168,"kind":16,"name":"PercentDifference","url":"enums/tableau.quicktablecalctype.html#percentdifference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":169,"kind":16,"name":"PercentOfTotal","url":"enums/tableau.quicktablecalctype.html#percentoftotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":170,"kind":16,"name":"Rank","url":"enums/tableau.quicktablecalctype.html#rank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":171,"kind":16,"name":"Percentile","url":"enums/tableau.quicktablecalctype.html#percentile","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":172,"kind":16,"name":"MovingAverage","url":"enums/tableau.quicktablecalctype.html#movingaverage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":173,"kind":16,"name":"YTDTotal","url":"enums/tableau.quicktablecalctype.html#ytdtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":174,"kind":16,"name":"CompoundGrowthRate","url":"enums/tableau.quicktablecalctype.html#compoundgrowthrate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":175,"kind":16,"name":"YearOverYearGrowth","url":"enums/tableau.quicktablecalctype.html#yearoveryeargrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":176,"kind":16,"name":"YTDGrowth","url":"enums/tableau.quicktablecalctype.html#ytdgrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":177,"kind":16,"name":"Undefined","url":"enums/tableau.quicktablecalctype.html#undefined","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":178,"kind":4,"name":"SelectionUpdateType","url":"enums/tableau.selectionupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":179,"kind":16,"name":"Replace","url":"enums/tableau.selectionupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":180,"kind":16,"name":"Add","url":"enums/tableau.selectionupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":181,"kind":16,"name":"Remove","url":"enums/tableau.selectionupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":182,"kind":4,"name":"SheetType","url":"enums/tableau.sheettype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":183,"kind":16,"name":"Dashboard","url":"enums/tableau.sheettype.html#dashboard","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":184,"kind":16,"name":"Story","url":"enums/tableau.sheettype.html#story","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":185,"kind":16,"name":"Worksheet","url":"enums/tableau.sheettype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":186,"kind":4,"name":"SortDirection","url":"enums/tableau.sortdirection.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":187,"kind":16,"name":"Increasing","url":"enums/tableau.sortdirection.html#increasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":188,"kind":16,"name":"Decreasing","url":"enums/tableau.sortdirection.html#decreasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":189,"kind":4,"name":"TrendLineModelType","url":"enums/tableau.trendlinemodeltype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":190,"kind":16,"name":"Linear","url":"enums/tableau.trendlinemodeltype.html#linear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":191,"kind":16,"name":"Logarithmic","url":"enums/tableau.trendlinemodeltype.html#logarithmic","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":192,"kind":16,"name":"Exponential","url":"enums/tableau.trendlinemodeltype.html#exponential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":193,"kind":16,"name":"Polynomial","url":"enums/tableau.trendlinemodeltype.html#polynomial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":194,"kind":4,"name":"ReplaySpeedType","url":"enums/tableau.replayspeedtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":195,"kind":16,"name":"Slow","url":"enums/tableau.replayspeedtype.html#slow","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":196,"kind":16,"name":"Normal","url":"enums/tableau.replayspeedtype.html#normal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":197,"kind":16,"name":"Fast","url":"enums/tableau.replayspeedtype.html#fast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":198,"kind":4,"name":"HierarchicalLevelSelectionState","url":"enums/tableau.hierarchicallevelselectionstate.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":199,"kind":16,"name":"AllSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#allselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":200,"kind":16,"name":"NoneSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#noneselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":201,"kind":16,"name":"SomeSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#someselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":202,"kind":16,"name":"UnknownSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#unknownselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":203,"kind":4194304,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"Tableau"},{"id":204,"kind":2097152,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype-1","classes":"tsd-kind-object-literal tsd-parent-kind-module","parent":"Tableau"},{"id":205,"kind":256,"name":"MarksCollection","url":"interfaces/markscollection.html","classes":"tsd-kind-interface"},{"id":206,"kind":1024,"name":"data","url":"interfaces/markscollection.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarksCollection"},{"id":207,"kind":256,"name":"MarkInfo","url":"interfaces/markinfo.html","classes":"tsd-kind-interface"},{"id":208,"kind":1024,"name":"type","url":"interfaces/markinfo.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":209,"kind":1024,"name":"color","url":"interfaces/markinfo.html#color","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":210,"kind":1024,"name":"tupleId","url":"interfaces/markinfo.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":211,"kind":256,"name":"SelectionCriteria","url":"interfaces/selectioncriteria.html","classes":"tsd-kind-interface"},{"id":212,"kind":1024,"name":"fieldName","url":"interfaces/selectioncriteria.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":213,"kind":1024,"name":"value","url":"interfaces/selectioncriteria.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":214,"kind":256,"name":"RangeValue","url":"interfaces/rangevalue.html","classes":"tsd-kind-interface"},{"id":215,"kind":1024,"name":"min","url":"interfaces/rangevalue.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":216,"kind":1024,"name":"max","url":"interfaces/rangevalue.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":217,"kind":1024,"name":"nullOption","url":"interfaces/rangevalue.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":218,"kind":4194304,"name":"CategoricalValue","url":"globals.html#categoricalvalue","classes":"tsd-kind-type-alias"},{"id":219,"kind":256,"name":"Column","url":"interfaces/column.html","classes":"tsd-kind-interface"},{"id":220,"kind":1024,"name":"fieldName","url":"interfaces/column.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":221,"kind":1024,"name":"fieldId","url":"interfaces/column.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":222,"kind":1024,"name":"dataType","url":"interfaces/column.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":223,"kind":1024,"name":"isReferenced","url":"interfaces/column.html#isreferenced","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":224,"kind":1024,"name":"index","url":"interfaces/column.html#index","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":225,"kind":256,"name":"DataTable","url":"interfaces/datatable.html","classes":"tsd-kind-interface"},{"id":226,"kind":1024,"name":"name","url":"interfaces/datatable.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":227,"kind":1024,"name":"data","url":"interfaces/datatable.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":228,"kind":1024,"name":"marksInfo","url":"interfaces/datatable.html#marksinfo","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":229,"kind":1024,"name":"columns","url":"interfaces/datatable.html#columns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":230,"kind":1024,"name":"totalRowCount","url":"interfaces/datatable.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":231,"kind":1024,"name":"isTotalRowCountLimited","url":"interfaces/datatable.html#istotalrowcountlimited","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":232,"kind":1024,"name":"isSummaryData","url":"interfaces/datatable.html#issummarydata","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":233,"kind":256,"name":"DataValue","url":"interfaces/datavalue.html","classes":"tsd-kind-interface"},{"id":234,"kind":1024,"name":"value","url":"interfaces/datavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":235,"kind":1024,"name":"nativeValue","url":"interfaces/datavalue.html#nativevalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":236,"kind":1024,"name":"formattedValue","url":"interfaces/datavalue.html#formattedvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":237,"kind":256,"name":"GetSummaryDataOptions","url":"interfaces/getsummarydataoptions.html","classes":"tsd-kind-interface"},{"id":238,"kind":1024,"name":"ignoreAliases","url":"interfaces/getsummarydataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":239,"kind":1024,"name":"ignoreSelection","url":"interfaces/getsummarydataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":240,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getsummarydataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":241,"kind":1024,"name":"maxRows","url":"interfaces/getsummarydataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":242,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getsummarydataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":243,"kind":256,"name":"GetUnderlyingDataOptions","url":"interfaces/getunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":244,"kind":1024,"name":"includeAllColumns","url":"interfaces/getunderlyingdataoptions.html#includeallcolumns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetUnderlyingDataOptions"},{"id":245,"kind":1024,"name":"ignoreAliases","url":"interfaces/getunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":246,"kind":1024,"name":"ignoreSelection","url":"interfaces/getunderlyingdataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":247,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":248,"kind":1024,"name":"maxRows","url":"interfaces/getunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":249,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":250,"kind":256,"name":"DataTableReader","url":"interfaces/datatablereader.html","classes":"tsd-kind-interface"},{"id":251,"kind":1024,"name":"totalRowCount","url":"interfaces/datatablereader.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTableReader"},{"id":252,"kind":1024,"name":"pageCount","url":"interfaces/datatablereader.html#pagecount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTableReader"},{"id":253,"kind":2048,"name":"getPageAsync","url":"interfaces/datatablereader.html#getpageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":254,"kind":2048,"name":"getAllPagesAsync","url":"interfaces/datatablereader.html#getallpagesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":255,"kind":2048,"name":"releaseAsync","url":"interfaces/datatablereader.html#releaseasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":256,"kind":256,"name":"DataSource","url":"interfaces/datasource.html","classes":"tsd-kind-interface"},{"id":257,"kind":1024,"name":"name","url":"interfaces/datasource.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":258,"kind":1024,"name":"id","url":"interfaces/datasource.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":259,"kind":1024,"name":"fields","url":"interfaces/datasource.html#fields","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":260,"kind":1024,"name":"extractUpdateTime","url":"interfaces/datasource.html#extractupdatetime","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":261,"kind":1024,"name":"isExtract","url":"interfaces/datasource.html#isextract","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":262,"kind":1024,"name":"isPublished","url":"interfaces/datasource.html#ispublished","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":263,"kind":2048,"name":"refreshAsync","url":"interfaces/datasource.html#refreshasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":264,"kind":2048,"name":"getActiveTablesAsync","url":"interfaces/datasource.html#getactivetablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":265,"kind":2048,"name":"getConnectionSummariesAsync","url":"interfaces/datasource.html#getconnectionsummariesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":266,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/datasource.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":267,"kind":2048,"name":"getLogicalTablesAsync","url":"interfaces/datasource.html#getlogicaltablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":268,"kind":2048,"name":"getLogicalTableDataAsync","url":"interfaces/datasource.html#getlogicaltabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":269,"kind":2048,"name":"getLogicalTableDataReaderAsync","url":"interfaces/datasource.html#getlogicaltabledatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":270,"kind":256,"name":"Field","url":"interfaces/field.html","classes":"tsd-kind-interface"},{"id":271,"kind":1024,"name":"name","url":"interfaces/field.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":272,"kind":1024,"name":"id","url":"interfaces/field.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":273,"kind":1024,"name":"description","url":"interfaces/field.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":274,"kind":1024,"name":"dataSource","url":"interfaces/field.html#datasource","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":275,"kind":1024,"name":"role","url":"interfaces/field.html#role","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":276,"kind":1024,"name":"isHidden","url":"interfaces/field.html#ishidden","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":277,"kind":1024,"name":"isGenerated","url":"interfaces/field.html#isgenerated","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":278,"kind":1024,"name":"isCalculatedField","url":"interfaces/field.html#iscalculatedfield","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":279,"kind":1024,"name":"aggregation","url":"interfaces/field.html#aggregation","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":280,"kind":1024,"name":"columnType","url":"interfaces/field.html#columntype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":281,"kind":1024,"name":"isCombinedField","url":"interfaces/field.html#iscombinedfield","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":282,"kind":256,"name":"ConnectionSummary","url":"interfaces/connectionsummary.html","classes":"tsd-kind-interface"},{"id":283,"kind":1024,"name":"name","url":"interfaces/connectionsummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":284,"kind":1024,"name":"id","url":"interfaces/connectionsummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":285,"kind":1024,"name":"type","url":"interfaces/connectionsummary.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":286,"kind":1024,"name":"serverURI","url":"interfaces/connectionsummary.html#serveruri","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":287,"kind":256,"name":"TableSummary","url":"interfaces/tablesummary.html","classes":"tsd-kind-interface"},{"id":288,"kind":1024,"name":"name","url":"interfaces/tablesummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":289,"kind":1024,"name":"id","url":"interfaces/tablesummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":290,"kind":1024,"name":"connectionId","url":"interfaces/tablesummary.html#connectionid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":291,"kind":1024,"name":"customSQL","url":"interfaces/tablesummary.html#customsql","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":292,"kind":256,"name":"DataSourceUnderlyingDataOptions","url":"interfaces/datasourceunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":293,"kind":1024,"name":"ignoreAliases","url":"interfaces/datasourceunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":294,"kind":1024,"name":"columnsToInclude","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoinclude","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":295,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":296,"kind":1024,"name":"maxRows","url":"interfaces/datasourceunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":297,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/datasourceunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":298,"kind":256,"name":"LogicalTable","url":"interfaces/logicaltable.html","classes":"tsd-kind-interface"},{"id":299,"kind":1024,"name":"id","url":"interfaces/logicaltable.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":300,"kind":1024,"name":"caption","url":"interfaces/logicaltable.html#caption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":301,"kind":256,"name":"Filter","url":"interfaces/filter.html","classes":"tsd-kind-interface"},{"id":302,"kind":1024,"name":"worksheetName","url":"interfaces/filter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":303,"kind":1024,"name":"filterType","url":"interfaces/filter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":304,"kind":1024,"name":"fieldName","url":"interfaces/filter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":305,"kind":1024,"name":"fieldId","url":"interfaces/filter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":306,"kind":2048,"name":"getFieldAsync","url":"interfaces/filter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":307,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/filter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":308,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/filter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":309,"kind":256,"name":"CategoricalFilter","url":"interfaces/categoricalfilter.html","classes":"tsd-kind-interface"},{"id":310,"kind":1024,"name":"isAllSelected","url":"interfaces/categoricalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":311,"kind":1024,"name":"appliedValues","url":"interfaces/categoricalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":312,"kind":1024,"name":"isExcludeMode","url":"interfaces/categoricalfilter.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":313,"kind":2048,"name":"getDomainAsync","url":"interfaces/categoricalfilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":314,"kind":1024,"name":"worksheetName","url":"interfaces/categoricalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":315,"kind":1024,"name":"filterType","url":"interfaces/categoricalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":316,"kind":1024,"name":"fieldName","url":"interfaces/categoricalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":317,"kind":1024,"name":"fieldId","url":"interfaces/categoricalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":318,"kind":2048,"name":"getFieldAsync","url":"interfaces/categoricalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":319,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":320,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":321,"kind":256,"name":"HierarchicalFilter","url":"interfaces/hierarchicalfilter.html","classes":"tsd-kind-interface"},{"id":322,"kind":1024,"name":"dimensionName","url":"interfaces/hierarchicalfilter.html#dimensionname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":323,"kind":1024,"name":"hierarchyCaption","url":"interfaces/hierarchicalfilter.html#hierarchycaption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":324,"kind":1024,"name":"numberOfLevels","url":"interfaces/hierarchicalfilter.html#numberoflevels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":325,"kind":1024,"name":"levelDetails","url":"interfaces/hierarchicalfilter.html#leveldetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":326,"kind":1024,"name":"isAllSelected","url":"interfaces/hierarchicalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":327,"kind":1024,"name":"appliedValues","url":"interfaces/hierarchicalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":328,"kind":1024,"name":"worksheetName","url":"interfaces/hierarchicalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":329,"kind":1024,"name":"filterType","url":"interfaces/hierarchicalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":330,"kind":1024,"name":"fieldName","url":"interfaces/hierarchicalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":331,"kind":1024,"name":"fieldId","url":"interfaces/hierarchicalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":332,"kind":2048,"name":"getFieldAsync","url":"interfaces/hierarchicalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":333,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":334,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":335,"kind":256,"name":"RangeFilter","url":"interfaces/rangefilter.html","classes":"tsd-kind-interface"},{"id":336,"kind":1024,"name":"minValue","url":"interfaces/rangefilter.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":337,"kind":1024,"name":"maxValue","url":"interfaces/rangefilter.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":338,"kind":1024,"name":"includeNullValues","url":"interfaces/rangefilter.html#includenullvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":339,"kind":2048,"name":"getDomainAsync","url":"interfaces/rangefilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"RangeFilter"},{"id":340,"kind":1024,"name":"worksheetName","url":"interfaces/rangefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":341,"kind":1024,"name":"filterType","url":"interfaces/rangefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":342,"kind":1024,"name":"fieldName","url":"interfaces/rangefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":343,"kind":1024,"name":"fieldId","url":"interfaces/rangefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":344,"kind":2048,"name":"getFieldAsync","url":"interfaces/rangefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":345,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":346,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":347,"kind":256,"name":"RelativeDateFilter","url":"interfaces/relativedatefilter.html","classes":"tsd-kind-interface"},{"id":348,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilter.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":349,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilter.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":350,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilter.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":351,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilter.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":352,"kind":1024,"name":"worksheetName","url":"interfaces/relativedatefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":353,"kind":1024,"name":"filterType","url":"interfaces/relativedatefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":354,"kind":1024,"name":"fieldName","url":"interfaces/relativedatefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":355,"kind":1024,"name":"fieldId","url":"interfaces/relativedatefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":356,"kind":2048,"name":"getFieldAsync","url":"interfaces/relativedatefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":357,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":358,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":359,"kind":256,"name":"FilterOptions","url":"interfaces/filteroptions.html","classes":"tsd-kind-interface"},{"id":360,"kind":1024,"name":"isExcludeMode","url":"interfaces/filteroptions.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterOptions"},{"id":361,"kind":256,"name":"RangeFilterOptions","url":"interfaces/rangefilteroptions.html","classes":"tsd-kind-interface"},{"id":362,"kind":1024,"name":"min","url":"interfaces/rangefilteroptions.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":363,"kind":1024,"name":"max","url":"interfaces/rangefilteroptions.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":364,"kind":1024,"name":"nullOption","url":"interfaces/rangefilteroptions.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":365,"kind":256,"name":"RelativeDateFilterOptions","url":"interfaces/relativedatefilteroptions.html","classes":"tsd-kind-interface"},{"id":366,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilteroptions.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":367,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilteroptions.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":368,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilteroptions.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":369,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilteroptions.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":370,"kind":256,"name":"RangeDomain","url":"interfaces/rangedomain.html","classes":"tsd-kind-interface"},{"id":371,"kind":1024,"name":"type","url":"interfaces/rangedomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":372,"kind":1024,"name":"min","url":"interfaces/rangedomain.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":373,"kind":1024,"name":"max","url":"interfaces/rangedomain.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":374,"kind":256,"name":"CategoricalDomain","url":"interfaces/categoricaldomain.html","classes":"tsd-kind-interface"},{"id":375,"kind":1024,"name":"type","url":"interfaces/categoricaldomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":376,"kind":1024,"name":"values","url":"interfaces/categoricaldomain.html#values","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":377,"kind":256,"name":"HierarchicalFilterDataValue","url":"interfaces/hierarchicalfilterdatavalue.html","classes":"tsd-kind-interface"},{"id":378,"kind":1024,"name":"value","url":"interfaces/hierarchicalfilterdatavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":379,"kind":1024,"name":"hierarchicalPath","url":"interfaces/hierarchicalfilterdatavalue.html#hierarchicalpath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":380,"kind":1024,"name":"level","url":"interfaces/hierarchicalfilterdatavalue.html#level","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":381,"kind":256,"name":"HierarchicalLevelDetail","url":"interfaces/hierarchicalleveldetail.html","classes":"tsd-kind-interface"},{"id":382,"kind":1024,"name":"name","url":"interfaces/hierarchicalleveldetail.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":383,"kind":1024,"name":"levelSelectionState","url":"interfaces/hierarchicalleveldetail.html#levelselectionstate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":384,"kind":256,"name":"WorkbookFormatting","url":"interfaces/workbookformatting.html","classes":"tsd-kind-interface"},{"id":385,"kind":1024,"name":"formattingSheets","url":"interfaces/workbookformatting.html#formattingsheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormatting"},{"id":386,"kind":256,"name":"FormattingSheet","url":"interfaces/formattingsheet.html","classes":"tsd-kind-interface"},{"id":387,"kind":1024,"name":"classNameKey","url":"interfaces/formattingsheet.html#classnamekey","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":388,"kind":1024,"name":"cssProperties","url":"interfaces/formattingsheet.html#cssproperties","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":389,"kind":256,"name":"Workbook","url":"interfaces/workbook.html","classes":"tsd-kind-interface"},{"id":390,"kind":2048,"name":"getAllDataSourcesAsync","url":"interfaces/workbook.html#getalldatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Workbook"},{"id":391,"kind":256,"name":"Annotation","url":"interfaces/annotation.html","classes":"tsd-kind-interface"},{"id":392,"kind":1024,"name":"annotationHTML","url":"interfaces/annotation.html#annotationhtml","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":393,"kind":1024,"name":"annotationId","url":"interfaces/annotation.html#annotationid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":394,"kind":1024,"name":"annotationText","url":"interfaces/annotation.html#annotationtext","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":395,"kind":1024,"name":"annotationType","url":"interfaces/annotation.html#annotationtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":396,"kind":1024,"name":"tupleId","url":"interfaces/annotation.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":397,"kind":256,"name":"Size","url":"interfaces/size.html","classes":"tsd-kind-interface"},{"id":398,"kind":1024,"name":"height","url":"interfaces/size.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":399,"kind":1024,"name":"width","url":"interfaces/size.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":400,"kind":256,"name":"Parameter","url":"interfaces/parameter.html","classes":"tsd-kind-interface"},{"id":401,"kind":1024,"name":"name","url":"interfaces/parameter.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":402,"kind":1024,"name":"currentValue","url":"interfaces/parameter.html#currentvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":403,"kind":1024,"name":"dataType","url":"interfaces/parameter.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":404,"kind":1024,"name":"allowableValues","url":"interfaces/parameter.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":405,"kind":1024,"name":"id","url":"interfaces/parameter.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":406,"kind":2048,"name":"changeValueAsync","url":"interfaces/parameter.html#changevalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Parameter"},{"id":407,"kind":2048,"name":"addEventListener","url":"interfaces/parameter.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":408,"kind":2048,"name":"removeEventListener","url":"interfaces/parameter.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":409,"kind":256,"name":"ParameterDomainRestriction","url":"interfaces/parameterdomainrestriction.html","classes":"tsd-kind-interface"},{"id":410,"kind":1024,"name":"type","url":"interfaces/parameterdomainrestriction.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":411,"kind":1024,"name":"allowableValues","url":"interfaces/parameterdomainrestriction.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":412,"kind":1024,"name":"minValue","url":"interfaces/parameterdomainrestriction.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":413,"kind":1024,"name":"maxValue","url":"interfaces/parameterdomainrestriction.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":414,"kind":1024,"name":"stepSize","url":"interfaces/parameterdomainrestriction.html#stepsize","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":415,"kind":1024,"name":"dateStepPeriod","url":"interfaces/parameterdomainrestriction.html#datestepperiod","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":416,"kind":256,"name":"Sheet","url":"interfaces/sheet.html","classes":"tsd-kind-interface"},{"id":417,"kind":1024,"name":"name","url":"interfaces/sheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":418,"kind":1024,"name":"sheetType","url":"interfaces/sheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":419,"kind":2048,"name":"findParameterAsync","url":"interfaces/sheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":420,"kind":1024,"name":"size","url":"interfaces/sheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":421,"kind":2048,"name":"getParametersAsync","url":"interfaces/sheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":422,"kind":2048,"name":"addEventListener","url":"interfaces/sheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":423,"kind":2048,"name":"removeEventListener","url":"interfaces/sheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":424,"kind":256,"name":"Worksheet","url":"interfaces/worksheet.html","classes":"tsd-kind-interface"},{"id":425,"kind":1024,"name":"parentDashboard","url":"interfaces/worksheet.html#parentdashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Worksheet"},{"id":426,"kind":2048,"name":"applyFilterAsync","url":"interfaces/worksheet.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":427,"kind":2048,"name":"applyRangeFilterAsync","url":"interfaces/worksheet.html#applyrangefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":428,"kind":2048,"name":"clearFilterAsync","url":"interfaces/worksheet.html#clearfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":429,"kind":2048,"name":"applyHierarchicalFilterAsync","url":"interfaces/worksheet.html#applyhierarchicalfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":430,"kind":2048,"name":"applyRelativeDateFilterAsync","url":"interfaces/worksheet.html#applyrelativedatefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":431,"kind":2048,"name":"getDataSourcesAsync","url":"interfaces/worksheet.html#getdatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":432,"kind":2048,"name":"getFiltersAsync","url":"interfaces/worksheet.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":433,"kind":2048,"name":"getHighlightedMarksAsync","url":"interfaces/worksheet.html#gethighlightedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":434,"kind":2048,"name":"getSelectedMarksAsync","url":"interfaces/worksheet.html#getselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":435,"kind":2048,"name":"getSummaryDataAsync","url":"interfaces/worksheet.html#getsummarydataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":436,"kind":2048,"name":"getSummaryDataReaderAsync","url":"interfaces/worksheet.html#getsummarydatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":437,"kind":2048,"name":"getSummaryColumnsInfoAsync","url":"interfaces/worksheet.html#getsummarycolumnsinfoasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":438,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/worksheet.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":439,"kind":2048,"name":"getUnderlyingTablesAsync","url":"interfaces/worksheet.html#getunderlyingtablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":440,"kind":2048,"name":"getUnderlyingTableDataAsync","url":"interfaces/worksheet.html#getunderlyingtabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":441,"kind":2048,"name":"getUnderlyingTableDataReaderAsync","url":"interfaces/worksheet.html#getunderlyingtabledatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":442,"kind":2048,"name":"selectMarksByValueAsync","url":"interfaces/worksheet.html#selectmarksbyvalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":443,"kind":2048,"name":"clearSelectedMarksAsync","url":"interfaces/worksheet.html#clearselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":444,"kind":2048,"name":"annotateMarkAsync","url":"interfaces/worksheet.html#annotatemarkasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":445,"kind":2048,"name":"getAnnotationsAsync","url":"interfaces/worksheet.html#getannotationsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":446,"kind":2048,"name":"removeAnnotationAsync","url":"interfaces/worksheet.html#removeannotationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":447,"kind":1024,"name":"name","url":"interfaces/worksheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":448,"kind":1024,"name":"sheetType","url":"interfaces/worksheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":449,"kind":2048,"name":"findParameterAsync","url":"interfaces/worksheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":450,"kind":1024,"name":"size","url":"interfaces/worksheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":451,"kind":2048,"name":"getParametersAsync","url":"interfaces/worksheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":452,"kind":2048,"name":"addEventListener","url":"interfaces/worksheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":453,"kind":2048,"name":"removeEventListener","url":"interfaces/worksheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":454,"kind":256,"name":"Dashboard","url":"interfaces/dashboard.html","classes":"tsd-kind-interface"},{"id":455,"kind":1024,"name":"objects","url":"interfaces/dashboard.html#objects","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":456,"kind":1024,"name":"worksheets","url":"interfaces/dashboard.html#worksheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":457,"kind":2048,"name":"setZoneVisibilityAsync","url":"interfaces/dashboard.html#setzonevisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":458,"kind":2048,"name":"setDashboardObjectVisibilityAsync","url":"interfaces/dashboard.html#setdashboardobjectvisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":459,"kind":2048,"name":"getDashboardObjectById","url":"interfaces/dashboard.html#getdashboardobjectbyid","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":460,"kind":2048,"name":"moveAndResizeDashboardObjectsAsync","url":"interfaces/dashboard.html#moveandresizedashboardobjectsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":461,"kind":2048,"name":"replayAnimationAsync","url":"interfaces/dashboard.html#replayanimationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":462,"kind":2048,"name":"getFiltersAsync","url":"interfaces/dashboard.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":463,"kind":2048,"name":"applyFilterAsync","url":"interfaces/dashboard.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":464,"kind":1024,"name":"name","url":"interfaces/dashboard.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":465,"kind":1024,"name":"sheetType","url":"interfaces/dashboard.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":466,"kind":2048,"name":"findParameterAsync","url":"interfaces/dashboard.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":467,"kind":1024,"name":"size","url":"interfaces/dashboard.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":468,"kind":2048,"name":"getParametersAsync","url":"interfaces/dashboard.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":469,"kind":2048,"name":"addEventListener","url":"interfaces/dashboard.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":470,"kind":2048,"name":"removeEventListener","url":"interfaces/dashboard.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":471,"kind":256,"name":"DashboardObjectPositionAndSizeUpdate","url":"interfaces/dashboardobjectpositionandsizeupdate.html","classes":"tsd-kind-interface"},{"id":472,"kind":1024,"name":"dashboardObjectID","url":"interfaces/dashboardobjectpositionandsizeupdate.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":473,"kind":1024,"name":"x","url":"interfaces/dashboardobjectpositionandsizeupdate.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":474,"kind":1024,"name":"y","url":"interfaces/dashboardobjectpositionandsizeupdate.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":475,"kind":1024,"name":"width","url":"interfaces/dashboardobjectpositionandsizeupdate.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":476,"kind":1024,"name":"height","url":"interfaces/dashboardobjectpositionandsizeupdate.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":477,"kind":256,"name":"DashboardObject","url":"interfaces/dashboardobject.html","classes":"tsd-kind-interface"},{"id":478,"kind":1024,"name":"dashboard","url":"interfaces/dashboardobject.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":479,"kind":1024,"name":"type","url":"interfaces/dashboardobject.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":480,"kind":1024,"name":"position","url":"interfaces/dashboardobject.html#position","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":481,"kind":1024,"name":"size","url":"interfaces/dashboardobject.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":482,"kind":1024,"name":"worksheet","url":"interfaces/dashboardobject.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":483,"kind":1024,"name":"name","url":"interfaces/dashboardobject.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":484,"kind":1024,"name":"isFloating","url":"interfaces/dashboardobject.html#isfloating","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":485,"kind":1024,"name":"isVisible","url":"interfaces/dashboardobject.html#isvisible","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":486,"kind":1024,"name":"id","url":"interfaces/dashboardobject.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":487,"kind":256,"name":"Point","url":"interfaces/point.html","classes":"tsd-kind-interface"},{"id":488,"kind":1024,"name":"x","url":"interfaces/point.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":489,"kind":1024,"name":"y","url":"interfaces/point.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":490,"kind":256,"name":"HierarchicalLevels","url":"interfaces/hierarchicallevels.html","classes":"tsd-kind-interface"},{"id":491,"kind":1024,"name":"levels","url":"interfaces/hierarchicallevels.html#levels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevels"},{"id":492,"kind":4194304,"name":"ZoneVisibilityMap","url":"globals.html#zonevisibilitymap","classes":"tsd-kind-type-alias"},{"id":493,"kind":4194304,"name":"DashboardObjectVisibilityMap","url":"globals.html#dashboardobjectvisibilitymap","classes":"tsd-kind-type-alias"},{"id":494,"kind":4194304,"name":"DashboardObjectPositionAndSizeUpdateArray","url":"globals.html#dashboardobjectpositionandsizeupdatearray","classes":"tsd-kind-type-alias"},{"id":495,"kind":256,"name":"DashboardContent","url":"interfaces/dashboardcontent.html","classes":"tsd-kind-interface"},{"id":496,"kind":1024,"name":"dashboard","url":"interfaces/dashboardcontent.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardContent"},{"id":497,"kind":256,"name":"Environment","url":"interfaces/environment.html","classes":"tsd-kind-interface"},{"id":498,"kind":1024,"name":"apiVersion","url":"interfaces/environment.html#apiversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":499,"kind":1024,"name":"context","url":"interfaces/environment.html#context","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":500,"kind":1024,"name":"language","url":"interfaces/environment.html#language","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":501,"kind":1024,"name":"country","url":"interfaces/environment.html#country","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":502,"kind":1024,"name":"workbookFormatting","url":"interfaces/environment.html#workbookformatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":503,"kind":1024,"name":"locale","url":"interfaces/environment.html#locale","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":504,"kind":1024,"name":"mode","url":"interfaces/environment.html#mode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":505,"kind":1024,"name":"operatingSystem","url":"interfaces/environment.html#operatingsystem","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":506,"kind":1024,"name":"tableauVersion","url":"interfaces/environment.html#tableauversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":507,"kind":256,"name":"Settings","url":"interfaces/settings.html","classes":"tsd-kind-interface"},{"id":508,"kind":2048,"name":"erase","url":"interfaces/settings.html#erase","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":509,"kind":2048,"name":"get","url":"interfaces/settings.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":510,"kind":2048,"name":"getAll","url":"interfaces/settings.html#getall","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":511,"kind":1024,"name":"isModified","url":"interfaces/settings.html#ismodified","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Settings"},{"id":512,"kind":2048,"name":"saveAsync","url":"interfaces/settings.html#saveasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":513,"kind":2048,"name":"set","url":"interfaces/settings.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":514,"kind":2048,"name":"addEventListener","url":"interfaces/settings.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":515,"kind":2048,"name":"removeEventListener","url":"interfaces/settings.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":516,"kind":256,"name":"UI","url":"interfaces/ui.html","classes":"tsd-kind-interface"},{"id":517,"kind":2048,"name":"displayDialogAsync","url":"interfaces/ui.html#displaydialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":518,"kind":2048,"name":"closeDialog","url":"interfaces/ui.html#closedialog","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":519,"kind":256,"name":"DialogOptions","url":"interfaces/dialogoptions.html","classes":"tsd-kind-interface"},{"id":520,"kind":1024,"name":"width","url":"interfaces/dialogoptions.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":521,"kind":1024,"name":"height","url":"interfaces/dialogoptions.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":522,"kind":1024,"name":"dialogStyle","url":"interfaces/dialogoptions.html#dialogstyle","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":523,"kind":256,"name":"Extensions","url":"interfaces/extensions.html","classes":"tsd-kind-interface"},{"id":524,"kind":2048,"name":"initializeAsync","url":"interfaces/extensions.html#initializeasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":525,"kind":2048,"name":"initializeDialogAsync","url":"interfaces/extensions.html#initializedialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":526,"kind":1024,"name":"dashboardContent","url":"interfaces/extensions.html#dashboardcontent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":527,"kind":1024,"name":"environment","url":"interfaces/extensions.html#environment","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":528,"kind":1024,"name":"settings","url":"interfaces/extensions.html#settings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":529,"kind":1024,"name":"ui","url":"interfaces/extensions.html#ui","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":530,"kind":1024,"name":"workbook","url":"interfaces/extensions.html#workbook","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":531,"kind":1024,"name":"dashboardObjectId","url":"interfaces/extensions.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":532,"kind":2048,"name":"createVizImageAsync","url":"interfaces/extensions.html#createvizimageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":533,"kind":2048,"name":"setClickThroughAsync","url":"interfaces/extensions.html#setclickthroughasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":534,"kind":4,"name":"ErrorCodes","url":"enums/tableau.errorcodes.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":535,"kind":16,"name":"APINotInitialized","url":"enums/tableau.errorcodes.html#apinotinitialized","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":536,"kind":16,"name":"VisibilityError","url":"enums/tableau.errorcodes.html#visibilityerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":537,"kind":16,"name":"DialogAlreadyOpen","url":"enums/tableau.errorcodes.html#dialogalreadyopen","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":538,"kind":16,"name":"DialogClosedByUser","url":"enums/tableau.errorcodes.html#dialogclosedbyuser","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":539,"kind":16,"name":"InternalError","url":"enums/tableau.errorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":540,"kind":16,"name":"InvalidDomainDialog","url":"enums/tableau.errorcodes.html#invaliddomaindialog","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":541,"kind":16,"name":"InvalidParameter","url":"enums/tableau.errorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":542,"kind":16,"name":"MissingFilter","url":"enums/tableau.errorcodes.html#missingfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":543,"kind":16,"name":"MissingParameter","url":"enums/tableau.errorcodes.html#missingparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":544,"kind":16,"name":"ServerError","url":"enums/tableau.errorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":545,"kind":16,"name":"SettingSaveInProgress","url":"enums/tableau.errorcodes.html#settingsaveinprogress","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":546,"kind":16,"name":"UnsupportedEventName","url":"enums/tableau.errorcodes.html#unsupportedeventname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":547,"kind":16,"name":"UnsupportedMethodForDataSourceType","url":"enums/tableau.errorcodes.html#unsupportedmethodfordatasourcetype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":548,"kind":4,"name":"ExtensionContext","url":"enums/tableau.extensioncontext.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":549,"kind":16,"name":"Desktop","url":"enums/tableau.extensioncontext.html#desktop","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":550,"kind":16,"name":"Server","url":"enums/tableau.extensioncontext.html#server","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":551,"kind":4,"name":"ExtensionMode","url":"enums/tableau.extensionmode.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":552,"kind":16,"name":"Authoring","url":"enums/tableau.extensionmode.html#authoring","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":553,"kind":16,"name":"Viewing","url":"enums/tableau.extensionmode.html#viewing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":554,"kind":4,"name":"TableauEventType","url":"enums/tableau.tableaueventtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":555,"kind":16,"name":"FilterChanged","url":"enums/tableau.tableaueventtype.html#filterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":556,"kind":16,"name":"MarkSelectionChanged","url":"enums/tableau.tableaueventtype.html#markselectionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":557,"kind":16,"name":"ParameterChanged","url":"enums/tableau.tableaueventtype.html#parameterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":558,"kind":16,"name":"SettingsChanged","url":"enums/tableau.tableaueventtype.html#settingschanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":559,"kind":16,"name":"DashboardLayoutChanged","url":"enums/tableau.tableaueventtype.html#dashboardlayoutchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":560,"kind":16,"name":"WorkbookFormattingChanged","url":"enums/tableau.tableaueventtype.html#workbookformattingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":561,"kind":4,"name":"VizImageEncodingType","url":"enums/tableau.vizimageencodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":562,"kind":16,"name":"Discrete","url":"enums/tableau.vizimageencodingtype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":563,"kind":16,"name":"Continuous","url":"enums/tableau.vizimageencodingtype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":564,"kind":4,"name":"VizImageSortDirectionType","url":"enums/tableau.vizimagesortdirectiontype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":565,"kind":16,"name":"Ascending","url":"enums/tableau.vizimagesortdirectiontype.html#ascending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":566,"kind":16,"name":"Descending","url":"enums/tableau.vizimagesortdirectiontype.html#descending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":567,"kind":4,"name":"VizImagePaletteType","url":"enums/tableau.vizimagepalettetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":568,"kind":16,"name":"CustomDiverging","url":"enums/tableau.vizimagepalettetype.html#customdiverging","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":569,"kind":16,"name":"CustomSequential","url":"enums/tableau.vizimagepalettetype.html#customsequential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":570,"kind":4,"name":"VizImageSizeSettingType","url":"enums/tableau.vizimagesizesettingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":571,"kind":16,"name":"Fixed","url":"enums/tableau.vizimagesizesettingtype.html#fixed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":572,"kind":16,"name":"Manual","url":"enums/tableau.vizimagesizesettingtype.html#manual","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":573,"kind":4,"name":"VizImageSizeSettingAlignmentType","url":"enums/tableau.vizimagesizesettingalignmenttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":574,"kind":16,"name":"Right","url":"enums/tableau.vizimagesizesettingalignmenttype.html#right","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":575,"kind":16,"name":"Left","url":"enums/tableau.vizimagesizesettingalignmenttype.html#left","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":576,"kind":16,"name":"Center","url":"enums/tableau.vizimagesizesettingalignmenttype.html#center","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":577,"kind":32,"name":"extensions","url":"modules/tableau.html#extensions","classes":"tsd-kind-variable tsd-parent-kind-module","parent":"Tableau"},{"id":578,"kind":256,"name":"TableauWorksheetEvent","url":"interfaces/tableauworksheetevent.html","classes":"tsd-kind-interface"},{"id":579,"kind":1024,"name":"worksheet","url":"interfaces/tableauworksheetevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauWorksheetEvent"},{"id":580,"kind":1024,"name":"sheet","url":"interfaces/tableauworksheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":581,"kind":1024,"name":"type","url":"interfaces/tableauworksheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":582,"kind":256,"name":"MarksSelectedEvent","url":"interfaces/marksselectedevent.html","classes":"tsd-kind-interface"},{"id":583,"kind":2048,"name":"getMarksAsync","url":"interfaces/marksselectedevent.html#getmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"MarksSelectedEvent"},{"id":584,"kind":1024,"name":"worksheet","url":"interfaces/marksselectedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":585,"kind":1024,"name":"sheet","url":"interfaces/marksselectedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":586,"kind":1024,"name":"type","url":"interfaces/marksselectedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":587,"kind":256,"name":"TableauSheetEvent","url":"interfaces/tableausheetevent.html","classes":"tsd-kind-interface"},{"id":588,"kind":1024,"name":"sheet","url":"interfaces/tableausheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauSheetEvent"},{"id":589,"kind":1024,"name":"type","url":"interfaces/tableausheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauSheetEvent"},{"id":590,"kind":256,"name":"FilterChangedEvent","url":"interfaces/filterchangedevent.html","classes":"tsd-kind-interface"},{"id":591,"kind":1024,"name":"fieldName","url":"interfaces/filterchangedevent.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":592,"kind":2048,"name":"getFilterAsync","url":"interfaces/filterchangedevent.html#getfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":593,"kind":1024,"name":"worksheet","url":"interfaces/filterchangedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":594,"kind":1024,"name":"sheet","url":"interfaces/filterchangedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":595,"kind":1024,"name":"type","url":"interfaces/filterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":596,"kind":256,"name":"WorkbookFormattingChangedEvent","url":"interfaces/workbookformattingchangedevent.html","classes":"tsd-kind-interface"},{"id":597,"kind":1024,"name":"formatting","url":"interfaces/workbookformattingchangedevent.html#formatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormattingChangedEvent"},{"id":598,"kind":1024,"name":"type","url":"interfaces/workbookformattingchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WorkbookFormattingChangedEvent"},{"id":599,"kind":256,"name":"TableauEvent","url":"interfaces/tableauevent.html","classes":"tsd-kind-interface"},{"id":600,"kind":1024,"name":"type","url":"interfaces/tableauevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauEvent"},{"id":601,"kind":256,"name":"ParameterChangedEvent","url":"interfaces/parameterchangedevent.html","classes":"tsd-kind-interface"},{"id":602,"kind":2048,"name":"getParameterAsync","url":"interfaces/parameterchangedevent.html#getparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ParameterChangedEvent"},{"id":603,"kind":1024,"name":"type","url":"interfaces/parameterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ParameterChangedEvent"},{"id":604,"kind":256,"name":"SettingsChangedEvent","url":"interfaces/settingschangedevent.html","classes":"tsd-kind-interface"},{"id":605,"kind":1024,"name":"newSettings","url":"interfaces/settingschangedevent.html#newsettings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingsChangedEvent"},{"id":606,"kind":65536,"name":"__type","url":"interfaces/settingschangedevent.html#newsettings.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"SettingsChangedEvent.newSettings"},{"id":607,"kind":1024,"name":"type","url":"interfaces/settingschangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SettingsChangedEvent"},{"id":608,"kind":256,"name":"DashboardLayoutChangedEvent","url":"interfaces/dashboardlayoutchangedevent.html","classes":"tsd-kind-interface"},{"id":609,"kind":1024,"name":"dashboardLayoutChangeDetails","url":"interfaces/dashboardlayoutchangedevent.html#dashboardlayoutchangedetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardLayoutChangedEvent"},{"id":610,"kind":1024,"name":"type","url":"interfaces/dashboardlayoutchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"DashboardLayoutChangedEvent"},{"id":611,"kind":256,"name":"EventListenerManager","url":"interfaces/eventlistenermanager.html","classes":"tsd-kind-interface"},{"id":612,"kind":2048,"name":"addEventListener","url":"interfaces/eventlistenermanager.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":613,"kind":2048,"name":"removeEventListener","url":"interfaces/eventlistenermanager.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":614,"kind":4194304,"name":"DashboardLayoutChangeDetails","url":"globals.html#dashboardlayoutchangedetails","classes":"tsd-kind-type-alias"},{"id":615,"kind":4194304,"name":"TableauEventHandlerFn","url":"globals.html#tableaueventhandlerfn","classes":"tsd-kind-type-alias"},{"id":616,"kind":65536,"name":"__type","url":"globals.html#tableaueventhandlerfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventHandlerFn"},{"id":617,"kind":4194304,"name":"TableauEventUnregisterFn","url":"globals.html#tableaueventunregisterfn","classes":"tsd-kind-type-alias"},{"id":618,"kind":65536,"name":"__type","url":"globals.html#tableaueventunregisterfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventUnregisterFn"},{"id":619,"kind":256,"name":"TableauError","url":"interfaces/tableauerror.html","classes":"tsd-kind-interface"},{"id":620,"kind":1024,"name":"errorCode","url":"interfaces/tableauerror.html#errorcode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":621,"kind":1024,"name":"name","url":"interfaces/tableauerror.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":622,"kind":1024,"name":"message","url":"interfaces/tableauerror.html#message","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":623,"kind":1024,"name":"stack","url":"interfaces/tableauerror.html#stack","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":624,"kind":1024,"name":"Error","url":"interfaces/tableauerror.html#error","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":625,"kind":4,"name":"SharedErrorCodes","url":"enums/sharederrorcodes.html","classes":"tsd-kind-enum"},{"id":626,"kind":16,"name":"InvalidAggregationFieldName","url":"enums/sharederrorcodes.html#invalidaggregationfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":627,"kind":16,"name":"InvalidFilterFieldName","url":"enums/sharederrorcodes.html#invalidfilterfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":628,"kind":16,"name":"InvalidFilterFieldValue","url":"enums/sharederrorcodes.html#invalidfilterfieldvalue","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":629,"kind":16,"name":"InvalidSelectionDate","url":"enums/sharederrorcodes.html#invalidselectiondate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":630,"kind":16,"name":"InvalidSelectionFieldName","url":"enums/sharederrorcodes.html#invalidselectionfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":631,"kind":16,"name":"InvalidSelectionValue","url":"enums/sharederrorcodes.html#invalidselectionvalue","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":632,"kind":16,"name":"InternalError","url":"enums/sharederrorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":633,"kind":16,"name":"InvalidParameter","url":"enums/sharederrorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":634,"kind":16,"name":"NotActiveSheet","url":"enums/sharederrorcodes.html#notactivesheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":635,"kind":16,"name":"ImplementationError","url":"enums/sharederrorcodes.html#implementationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":636,"kind":16,"name":"ApiExecutionError","url":"enums/sharederrorcodes.html#apiexecutionerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":637,"kind":16,"name":"ServerError","url":"enums/sharederrorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":638,"kind":16,"name":"Timeout","url":"enums/sharederrorcodes.html#timeout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"}]}; \ No newline at end of file + typedoc.search.data = {"kinds":{"2":"Module","4":"Enumeration","16":"Enumeration member","32":"Variable","256":"Interface","1024":"Property","2048":"Method","65536":"Type literal","2097152":"Object literal","4194304":"Type alias"},"rows":[{"id":0,"kind":2,"name":"Tableau","url":"modules/tableau.html","classes":"tsd-kind-module"},{"id":1,"kind":4,"name":"AnalyticsObjectType","url":"enums/tableau.analyticsobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":2,"kind":16,"name":"Cluster","url":"enums/tableau.analyticsobjecttype.html#cluster","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":3,"kind":16,"name":"Forecast","url":"enums/tableau.analyticsobjecttype.html#forecast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":4,"kind":16,"name":"TrendLine","url":"enums/tableau.analyticsobjecttype.html#trendline","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":5,"kind":4,"name":"AnnotationType","url":"enums/tableau.annotationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":6,"kind":16,"name":"Mark","url":"enums/tableau.annotationtype.html#mark","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":7,"kind":16,"name":"Point","url":"enums/tableau.annotationtype.html#point","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":8,"kind":16,"name":"Area","url":"enums/tableau.annotationtype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":9,"kind":4,"name":"ColumnType","url":"enums/tableau.columntype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":10,"kind":16,"name":"Discrete","url":"enums/tableau.columntype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":11,"kind":16,"name":"Continuous","url":"enums/tableau.columntype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":12,"kind":4,"name":"ClassNameKey","url":"enums/tableau.classnamekey.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":13,"kind":16,"name":"WorksheetTitle","url":"enums/tableau.classnamekey.html#worksheettitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":14,"kind":16,"name":"Worksheet","url":"enums/tableau.classnamekey.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":15,"kind":16,"name":"Tooltip","url":"enums/tableau.classnamekey.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":16,"kind":16,"name":"StoryTitle","url":"enums/tableau.classnamekey.html#storytitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":17,"kind":16,"name":"DashboardTitle","url":"enums/tableau.classnamekey.html#dashboardtitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":18,"kind":4,"name":"DashboardObjectType","url":"enums/tableau.dashboardobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":19,"kind":16,"name":"Blank","url":"enums/tableau.dashboardobjecttype.html#blank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":20,"kind":16,"name":"Worksheet","url":"enums/tableau.dashboardobjecttype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":21,"kind":16,"name":"QuickFilter","url":"enums/tableau.dashboardobjecttype.html#quickfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":22,"kind":16,"name":"ParameterControl","url":"enums/tableau.dashboardobjecttype.html#parametercontrol","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":23,"kind":16,"name":"PageFilter","url":"enums/tableau.dashboardobjecttype.html#pagefilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":24,"kind":16,"name":"Legend","url":"enums/tableau.dashboardobjecttype.html#legend","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":25,"kind":16,"name":"Title","url":"enums/tableau.dashboardobjecttype.html#title","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":26,"kind":16,"name":"Text","url":"enums/tableau.dashboardobjecttype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":27,"kind":16,"name":"Image","url":"enums/tableau.dashboardobjecttype.html#image","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":28,"kind":16,"name":"WebPage","url":"enums/tableau.dashboardobjecttype.html#webpage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":29,"kind":16,"name":"Extension","url":"enums/tableau.dashboardobjecttype.html#extension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":30,"kind":4,"name":"DashboardObjectVisibilityType","url":"enums/tableau.dashboardobjectvisibilitytype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":31,"kind":16,"name":"Show","url":"enums/tableau.dashboardobjectvisibilitytype.html#show","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":32,"kind":16,"name":"Hide","url":"enums/tableau.dashboardobjectvisibilitytype.html#hide","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":33,"kind":4,"name":"DataType","url":"enums/tableau.datatype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":34,"kind":16,"name":"String","url":"enums/tableau.datatype.html#string","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":35,"kind":16,"name":"Int","url":"enums/tableau.datatype.html#int","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":36,"kind":16,"name":"Float","url":"enums/tableau.datatype.html#float","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":37,"kind":16,"name":"Bool","url":"enums/tableau.datatype.html#bool","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":38,"kind":16,"name":"Date","url":"enums/tableau.datatype.html#date","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":39,"kind":16,"name":"DateTime","url":"enums/tableau.datatype.html#datetime","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":40,"kind":16,"name":"Spatial","url":"enums/tableau.datatype.html#spatial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":41,"kind":16,"name":"Unknown","url":"enums/tableau.datatype.html#unknown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":42,"kind":4,"name":"DashboardLayoutChange","url":"enums/tableau.dashboardlayoutchange.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":43,"kind":16,"name":"Added","url":"enums/tableau.dashboardlayoutchange.html#added","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":44,"kind":16,"name":"Removed","url":"enums/tableau.dashboardlayoutchange.html#removed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":45,"kind":16,"name":"IsFloatingChanged","url":"enums/tableau.dashboardlayoutchange.html#isfloatingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":46,"kind":16,"name":"IsVisibleChanged","url":"enums/tableau.dashboardlayoutchange.html#isvisiblechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":47,"kind":16,"name":"PositionChanged","url":"enums/tableau.dashboardlayoutchange.html#positionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":48,"kind":16,"name":"SizeChanged","url":"enums/tableau.dashboardlayoutchange.html#sizechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":49,"kind":16,"name":"NameChanged","url":"enums/tableau.dashboardlayoutchange.html#namechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":50,"kind":16,"name":"Selected","url":"enums/tableau.dashboardlayoutchange.html#selected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":51,"kind":16,"name":"Deselected","url":"enums/tableau.dashboardlayoutchange.html#deselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":52,"kind":16,"name":"DashboardChanged","url":"enums/tableau.dashboardlayoutchange.html#dashboardchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":53,"kind":4,"name":"DateRangeType","url":"enums/tableau.daterangetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":54,"kind":16,"name":"Last","url":"enums/tableau.daterangetype.html#last","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":55,"kind":16,"name":"LastN","url":"enums/tableau.daterangetype.html#lastn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":56,"kind":16,"name":"Next","url":"enums/tableau.daterangetype.html#next","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":57,"kind":16,"name":"NextN","url":"enums/tableau.daterangetype.html#nextn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":58,"kind":16,"name":"Current","url":"enums/tableau.daterangetype.html#current","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":59,"kind":16,"name":"ToDate","url":"enums/tableau.daterangetype.html#todate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":60,"kind":4,"name":"DialogStyle","url":"enums/tableau.dialogstyle.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":61,"kind":16,"name":"Window","url":"enums/tableau.dialogstyle.html#window","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":62,"kind":16,"name":"Modal","url":"enums/tableau.dialogstyle.html#modal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":63,"kind":16,"name":"Modeless","url":"enums/tableau.dialogstyle.html#modeless","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":64,"kind":4,"name":"EncodingType","url":"enums/tableau.encodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":65,"kind":16,"name":"Column","url":"enums/tableau.encodingtype.html#column","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":66,"kind":16,"name":"Row","url":"enums/tableau.encodingtype.html#row","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":67,"kind":16,"name":"Page","url":"enums/tableau.encodingtype.html#page","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":68,"kind":16,"name":"Filter","url":"enums/tableau.encodingtype.html#filter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":69,"kind":16,"name":"MarksType","url":"enums/tableau.encodingtype.html#markstype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":70,"kind":16,"name":"MeasureValues","url":"enums/tableau.encodingtype.html#measurevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":71,"kind":16,"name":"Color","url":"enums/tableau.encodingtype.html#color","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":72,"kind":16,"name":"Size","url":"enums/tableau.encodingtype.html#size","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":73,"kind":16,"name":"Label","url":"enums/tableau.encodingtype.html#label","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":74,"kind":16,"name":"Detail","url":"enums/tableau.encodingtype.html#detail","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":75,"kind":16,"name":"Tooltip","url":"enums/tableau.encodingtype.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":76,"kind":16,"name":"Shape","url":"enums/tableau.encodingtype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":77,"kind":16,"name":"Path","url":"enums/tableau.encodingtype.html#path","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":78,"kind":16,"name":"Angle","url":"enums/tableau.encodingtype.html#angle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":79,"kind":16,"name":"Geometry","url":"enums/tableau.encodingtype.html#geometry","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":80,"kind":16,"name":"Custom","url":"enums/tableau.encodingtype.html#custom","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":81,"kind":4,"name":"FieldAggregationType","url":"enums/tableau.fieldaggregationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":82,"kind":16,"name":"Sum","url":"enums/tableau.fieldaggregationtype.html#sum","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":83,"kind":16,"name":"Avg","url":"enums/tableau.fieldaggregationtype.html#avg","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":84,"kind":16,"name":"Min","url":"enums/tableau.fieldaggregationtype.html#min","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":85,"kind":16,"name":"Max","url":"enums/tableau.fieldaggregationtype.html#max","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":86,"kind":16,"name":"Stdev","url":"enums/tableau.fieldaggregationtype.html#stdev","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":87,"kind":16,"name":"Stdevp","url":"enums/tableau.fieldaggregationtype.html#stdevp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":88,"kind":16,"name":"Var","url":"enums/tableau.fieldaggregationtype.html#var","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":89,"kind":16,"name":"Varp","url":"enums/tableau.fieldaggregationtype.html#varp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":90,"kind":16,"name":"Collect","url":"enums/tableau.fieldaggregationtype.html#collect","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":91,"kind":16,"name":"Count","url":"enums/tableau.fieldaggregationtype.html#count","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":92,"kind":16,"name":"Countd","url":"enums/tableau.fieldaggregationtype.html#countd","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":93,"kind":16,"name":"Median","url":"enums/tableau.fieldaggregationtype.html#median","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":94,"kind":16,"name":"Attr","url":"enums/tableau.fieldaggregationtype.html#attr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":95,"kind":16,"name":"None","url":"enums/tableau.fieldaggregationtype.html#none","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":96,"kind":16,"name":"Year","url":"enums/tableau.fieldaggregationtype.html#year","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":97,"kind":16,"name":"Qtr","url":"enums/tableau.fieldaggregationtype.html#qtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":98,"kind":16,"name":"Month","url":"enums/tableau.fieldaggregationtype.html#month","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":99,"kind":16,"name":"Day","url":"enums/tableau.fieldaggregationtype.html#day","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":100,"kind":16,"name":"Hour","url":"enums/tableau.fieldaggregationtype.html#hour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":101,"kind":16,"name":"Minute","url":"enums/tableau.fieldaggregationtype.html#minute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":102,"kind":16,"name":"Second","url":"enums/tableau.fieldaggregationtype.html#second","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":103,"kind":16,"name":"Week","url":"enums/tableau.fieldaggregationtype.html#week","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":104,"kind":16,"name":"Weekday","url":"enums/tableau.fieldaggregationtype.html#weekday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":105,"kind":16,"name":"MonthYear","url":"enums/tableau.fieldaggregationtype.html#monthyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":106,"kind":16,"name":"Mdy","url":"enums/tableau.fieldaggregationtype.html#mdy","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":107,"kind":16,"name":"End","url":"enums/tableau.fieldaggregationtype.html#end","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":108,"kind":16,"name":"TruncYear","url":"enums/tableau.fieldaggregationtype.html#truncyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":109,"kind":16,"name":"TruncQtr","url":"enums/tableau.fieldaggregationtype.html#truncqtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":110,"kind":16,"name":"TruncMonth","url":"enums/tableau.fieldaggregationtype.html#truncmonth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":111,"kind":16,"name":"TruncWeek","url":"enums/tableau.fieldaggregationtype.html#truncweek","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":112,"kind":16,"name":"TruncDay","url":"enums/tableau.fieldaggregationtype.html#truncday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":113,"kind":16,"name":"TruncHour","url":"enums/tableau.fieldaggregationtype.html#trunchour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":114,"kind":16,"name":"TruncMinute","url":"enums/tableau.fieldaggregationtype.html#truncminute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":115,"kind":16,"name":"TruncSecond","url":"enums/tableau.fieldaggregationtype.html#truncsecond","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":116,"kind":16,"name":"Quart1","url":"enums/tableau.fieldaggregationtype.html#quart1","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":117,"kind":16,"name":"Quart3","url":"enums/tableau.fieldaggregationtype.html#quart3","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":118,"kind":16,"name":"Skewness","url":"enums/tableau.fieldaggregationtype.html#skewness","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":119,"kind":16,"name":"Kurtosis","url":"enums/tableau.fieldaggregationtype.html#kurtosis","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":120,"kind":16,"name":"InOut","url":"enums/tableau.fieldaggregationtype.html#inout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":121,"kind":16,"name":"User","url":"enums/tableau.fieldaggregationtype.html#user","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":122,"kind":4,"name":"FieldRoleType","url":"enums/tableau.fieldroletype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":123,"kind":16,"name":"Dimension","url":"enums/tableau.fieldroletype.html#dimension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":124,"kind":16,"name":"Measure","url":"enums/tableau.fieldroletype.html#measure","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":125,"kind":16,"name":"Unknown","url":"enums/tableau.fieldroletype.html#unknown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":126,"kind":4,"name":"FilterType","url":"enums/tableau.filtertype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":127,"kind":16,"name":"Categorical","url":"enums/tableau.filtertype.html#categorical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":128,"kind":16,"name":"Range","url":"enums/tableau.filtertype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":129,"kind":16,"name":"Hierarchical","url":"enums/tableau.filtertype.html#hierarchical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":130,"kind":16,"name":"RelativeDate","url":"enums/tableau.filtertype.html#relativedate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":131,"kind":4,"name":"FilterUpdateType","url":"enums/tableau.filterupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":132,"kind":16,"name":"Add","url":"enums/tableau.filterupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":133,"kind":16,"name":"All","url":"enums/tableau.filterupdatetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":134,"kind":16,"name":"Replace","url":"enums/tableau.filterupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":135,"kind":16,"name":"Remove","url":"enums/tableau.filterupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":136,"kind":4,"name":"FilterDomainType","url":"enums/tableau.filterdomaintype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":137,"kind":16,"name":"Relevant","url":"enums/tableau.filterdomaintype.html#relevant","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":138,"kind":16,"name":"Database","url":"enums/tableau.filterdomaintype.html#database","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":139,"kind":4,"name":"FilterNullOption","url":"enums/tableau.filternulloption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":140,"kind":16,"name":"NullValues","url":"enums/tableau.filternulloption.html#nullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":141,"kind":16,"name":"NonNullValues","url":"enums/tableau.filternulloption.html#nonnullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":142,"kind":16,"name":"AllValues","url":"enums/tableau.filternulloption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":143,"kind":4,"name":"IncludeDataValuesOption","url":"enums/tableau.includedatavaluesoption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":144,"kind":16,"name":"AllValues","url":"enums/tableau.includedatavaluesoption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":145,"kind":16,"name":"OnlyNativeValues","url":"enums/tableau.includedatavaluesoption.html#onlynativevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":146,"kind":16,"name":"OnlyFormattedValues","url":"enums/tableau.includedatavaluesoption.html#onlyformattedvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":147,"kind":4,"name":"MarkType","url":"enums/tableau.marktype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":148,"kind":16,"name":"Bar","url":"enums/tableau.marktype.html#bar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":149,"kind":16,"name":"Line","url":"enums/tableau.marktype.html#line","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":150,"kind":16,"name":"Area","url":"enums/tableau.marktype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":151,"kind":16,"name":"Square","url":"enums/tableau.marktype.html#square","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":152,"kind":16,"name":"Circle","url":"enums/tableau.marktype.html#circle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":153,"kind":16,"name":"Shape","url":"enums/tableau.marktype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":154,"kind":16,"name":"Text","url":"enums/tableau.marktype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":155,"kind":16,"name":"Map","url":"enums/tableau.marktype.html#map","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":156,"kind":16,"name":"Pie","url":"enums/tableau.marktype.html#pie","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":157,"kind":16,"name":"GanttBar","url":"enums/tableau.marktype.html#ganttbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":158,"kind":16,"name":"Polygon","url":"enums/tableau.marktype.html#polygon","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":159,"kind":16,"name":"Heatmap","url":"enums/tableau.marktype.html#heatmap","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":160,"kind":16,"name":"VizExtension","url":"enums/tableau.marktype.html#vizextension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":161,"kind":4,"name":"ParameterValueType","url":"enums/tableau.parametervaluetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":162,"kind":16,"name":"All","url":"enums/tableau.parametervaluetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":163,"kind":16,"name":"List","url":"enums/tableau.parametervaluetype.html#list","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":164,"kind":16,"name":"Range","url":"enums/tableau.parametervaluetype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":165,"kind":4,"name":"PeriodType","url":"enums/tableau.periodtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":166,"kind":16,"name":"Years","url":"enums/tableau.periodtype.html#years","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":167,"kind":16,"name":"Quarters","url":"enums/tableau.periodtype.html#quarters","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":168,"kind":16,"name":"Months","url":"enums/tableau.periodtype.html#months","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":169,"kind":16,"name":"Weeks","url":"enums/tableau.periodtype.html#weeks","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":170,"kind":16,"name":"Days","url":"enums/tableau.periodtype.html#days","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":171,"kind":16,"name":"Hours","url":"enums/tableau.periodtype.html#hours","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":172,"kind":16,"name":"Minutes","url":"enums/tableau.periodtype.html#minutes","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":173,"kind":16,"name":"Seconds","url":"enums/tableau.periodtype.html#seconds","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":174,"kind":4,"name":"QuickTableCalcType","url":"enums/tableau.quicktablecalctype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":175,"kind":16,"name":"RunningTotal","url":"enums/tableau.quicktablecalctype.html#runningtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":176,"kind":16,"name":"Difference","url":"enums/tableau.quicktablecalctype.html#difference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":177,"kind":16,"name":"PercentDifference","url":"enums/tableau.quicktablecalctype.html#percentdifference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":178,"kind":16,"name":"PercentOfTotal","url":"enums/tableau.quicktablecalctype.html#percentoftotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":179,"kind":16,"name":"Rank","url":"enums/tableau.quicktablecalctype.html#rank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":180,"kind":16,"name":"Percentile","url":"enums/tableau.quicktablecalctype.html#percentile","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":181,"kind":16,"name":"MovingAverage","url":"enums/tableau.quicktablecalctype.html#movingaverage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":182,"kind":16,"name":"YTDTotal","url":"enums/tableau.quicktablecalctype.html#ytdtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":183,"kind":16,"name":"CompoundGrowthRate","url":"enums/tableau.quicktablecalctype.html#compoundgrowthrate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":184,"kind":16,"name":"YearOverYearGrowth","url":"enums/tableau.quicktablecalctype.html#yearoveryeargrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":185,"kind":16,"name":"YTDGrowth","url":"enums/tableau.quicktablecalctype.html#ytdgrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":186,"kind":16,"name":"Undefined","url":"enums/tableau.quicktablecalctype.html#undefined","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":187,"kind":4,"name":"SelectionUpdateType","url":"enums/tableau.selectionupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":188,"kind":16,"name":"Replace","url":"enums/tableau.selectionupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":189,"kind":16,"name":"Add","url":"enums/tableau.selectionupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":190,"kind":16,"name":"Remove","url":"enums/tableau.selectionupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":191,"kind":4,"name":"SelectOptions","url":"enums/tableau.selectoptions.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":192,"kind":16,"name":"Simple","url":"enums/tableau.selectoptions.html#simple","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectOptions"},{"id":193,"kind":16,"name":"Toggle","url":"enums/tableau.selectoptions.html#toggle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectOptions"},{"id":194,"kind":4,"name":"SheetType","url":"enums/tableau.sheettype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":195,"kind":16,"name":"Dashboard","url":"enums/tableau.sheettype.html#dashboard","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":196,"kind":16,"name":"Story","url":"enums/tableau.sheettype.html#story","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":197,"kind":16,"name":"Worksheet","url":"enums/tableau.sheettype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":198,"kind":4,"name":"SortDirection","url":"enums/tableau.sortdirection.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":199,"kind":16,"name":"Increasing","url":"enums/tableau.sortdirection.html#increasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":200,"kind":16,"name":"Decreasing","url":"enums/tableau.sortdirection.html#decreasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":201,"kind":4,"name":"TrendLineModelType","url":"enums/tableau.trendlinemodeltype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":202,"kind":16,"name":"Linear","url":"enums/tableau.trendlinemodeltype.html#linear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":203,"kind":16,"name":"Logarithmic","url":"enums/tableau.trendlinemodeltype.html#logarithmic","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":204,"kind":16,"name":"Exponential","url":"enums/tableau.trendlinemodeltype.html#exponential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":205,"kind":16,"name":"Polynomial","url":"enums/tableau.trendlinemodeltype.html#polynomial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":206,"kind":4,"name":"ReplaySpeedType","url":"enums/tableau.replayspeedtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":207,"kind":16,"name":"Slow","url":"enums/tableau.replayspeedtype.html#slow","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":208,"kind":16,"name":"Normal","url":"enums/tableau.replayspeedtype.html#normal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":209,"kind":16,"name":"Fast","url":"enums/tableau.replayspeedtype.html#fast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":210,"kind":4,"name":"HierarchicalLevelSelectionState","url":"enums/tableau.hierarchicallevelselectionstate.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":211,"kind":16,"name":"AllSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#allselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":212,"kind":16,"name":"NoneSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#noneselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":213,"kind":16,"name":"SomeSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#someselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":214,"kind":16,"name":"UnknownSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#unknownselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":215,"kind":4194304,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"Tableau"},{"id":216,"kind":2097152,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype-1","classes":"tsd-kind-object-literal tsd-parent-kind-module","parent":"Tableau"},{"id":217,"kind":256,"name":"Annotation","url":"interfaces/annotation.html","classes":"tsd-kind-interface"},{"id":218,"kind":1024,"name":"annotationHTML","url":"interfaces/annotation.html#annotationhtml","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":219,"kind":1024,"name":"annotationId","url":"interfaces/annotation.html#annotationid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":220,"kind":1024,"name":"annotationText","url":"interfaces/annotation.html#annotationtext","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":221,"kind":1024,"name":"annotationType","url":"interfaces/annotation.html#annotationtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":222,"kind":1024,"name":"tupleId","url":"interfaces/annotation.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":223,"kind":256,"name":"Size","url":"interfaces/size.html","classes":"tsd-kind-interface"},{"id":224,"kind":1024,"name":"height","url":"interfaces/size.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":225,"kind":1024,"name":"width","url":"interfaces/size.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":226,"kind":256,"name":"VisualSpecification","url":"interfaces/visualspecification.html","classes":"tsd-kind-interface"},{"id":227,"kind":1024,"name":"rowFields","url":"interfaces/visualspecification.html#rowfields","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"VisualSpecification"},{"id":228,"kind":1024,"name":"columnFields","url":"interfaces/visualspecification.html#columnfields","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"VisualSpecification"},{"id":229,"kind":1024,"name":"activeMarksSpecificationIndex","url":"interfaces/visualspecification.html#activemarksspecificationindex","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"VisualSpecification"},{"id":230,"kind":1024,"name":"marksSpecifications","url":"interfaces/visualspecification.html#marksspecifications","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"VisualSpecification"},{"id":231,"kind":256,"name":"MarksSpecification","url":"interfaces/marksspecification.html","classes":"tsd-kind-interface"},{"id":232,"kind":1024,"name":"primitiveType","url":"interfaces/marksspecification.html#primitivetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarksSpecification"},{"id":233,"kind":1024,"name":"encodings","url":"interfaces/marksspecification.html#encodings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarksSpecification"},{"id":234,"kind":256,"name":"Encoding","url":"interfaces/encoding.html","classes":"tsd-kind-interface"},{"id":235,"kind":1024,"name":"id","url":"interfaces/encoding.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Encoding"},{"id":236,"kind":1024,"name":"type","url":"interfaces/encoding.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Encoding"},{"id":237,"kind":1024,"name":"field","url":"interfaces/encoding.html#field","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Encoding"},{"id":238,"kind":256,"name":"FieldInstance","url":"interfaces/fieldinstance.html","classes":"tsd-kind-interface"},{"id":239,"kind":1024,"name":"fieldId","url":"interfaces/fieldinstance.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FieldInstance"},{"id":240,"kind":1024,"name":"columnType","url":"interfaces/fieldinstance.html#columntype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FieldInstance"},{"id":241,"kind":1024,"name":"name","url":"interfaces/fieldinstance.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":242,"kind":1024,"name":"description","url":"interfaces/fieldinstance.html#description","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":243,"kind":1024,"name":"dataType","url":"interfaces/fieldinstance.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":244,"kind":1024,"name":"role","url":"interfaces/fieldinstance.html#role","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":245,"kind":1024,"name":"isGenerated","url":"interfaces/fieldinstance.html#isgenerated","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":246,"kind":1024,"name":"isCalculatedField","url":"interfaces/fieldinstance.html#iscalculatedfield","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":247,"kind":1024,"name":"aggregation","url":"interfaces/fieldinstance.html#aggregation","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":248,"kind":1024,"name":"isCombinedField","url":"interfaces/fieldinstance.html#iscombinedfield","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":249,"kind":1024,"name":"isPresentOnPublishedDatasource","url":"interfaces/fieldinstance.html#ispresentonpublisheddatasource","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FieldInstance"},{"id":250,"kind":256,"name":"Parameter","url":"interfaces/parameter.html","classes":"tsd-kind-interface"},{"id":251,"kind":1024,"name":"name","url":"interfaces/parameter.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":252,"kind":1024,"name":"currentValue","url":"interfaces/parameter.html#currentvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":253,"kind":1024,"name":"dataType","url":"interfaces/parameter.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":254,"kind":1024,"name":"allowableValues","url":"interfaces/parameter.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":255,"kind":1024,"name":"id","url":"interfaces/parameter.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":256,"kind":2048,"name":"changeValueAsync","url":"interfaces/parameter.html#changevalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Parameter"},{"id":257,"kind":2048,"name":"addEventListener","url":"interfaces/parameter.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":258,"kind":2048,"name":"removeEventListener","url":"interfaces/parameter.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":259,"kind":256,"name":"ParameterDomainRestriction","url":"interfaces/parameterdomainrestriction.html","classes":"tsd-kind-interface"},{"id":260,"kind":1024,"name":"type","url":"interfaces/parameterdomainrestriction.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":261,"kind":1024,"name":"allowableValues","url":"interfaces/parameterdomainrestriction.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":262,"kind":1024,"name":"minValue","url":"interfaces/parameterdomainrestriction.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":263,"kind":1024,"name":"maxValue","url":"interfaces/parameterdomainrestriction.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":264,"kind":1024,"name":"stepSize","url":"interfaces/parameterdomainrestriction.html#stepsize","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":265,"kind":1024,"name":"dateStepPeriod","url":"interfaces/parameterdomainrestriction.html#datestepperiod","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":266,"kind":256,"name":"Sheet","url":"interfaces/sheet.html","classes":"tsd-kind-interface"},{"id":267,"kind":1024,"name":"name","url":"interfaces/sheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":268,"kind":1024,"name":"sheetType","url":"interfaces/sheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":269,"kind":2048,"name":"findParameterAsync","url":"interfaces/sheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":270,"kind":1024,"name":"size","url":"interfaces/sheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":271,"kind":2048,"name":"getParametersAsync","url":"interfaces/sheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":272,"kind":2048,"name":"addEventListener","url":"interfaces/sheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":273,"kind":2048,"name":"removeEventListener","url":"interfaces/sheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":274,"kind":256,"name":"Worksheet","url":"interfaces/worksheet.html","classes":"tsd-kind-interface"},{"id":275,"kind":1024,"name":"parentDashboard","url":"interfaces/worksheet.html#parentdashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Worksheet"},{"id":276,"kind":2048,"name":"applyFilterAsync","url":"interfaces/worksheet.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":277,"kind":2048,"name":"applyRangeFilterAsync","url":"interfaces/worksheet.html#applyrangefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":278,"kind":2048,"name":"clearFilterAsync","url":"interfaces/worksheet.html#clearfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":279,"kind":2048,"name":"applyHierarchicalFilterAsync","url":"interfaces/worksheet.html#applyhierarchicalfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":280,"kind":2048,"name":"applyRelativeDateFilterAsync","url":"interfaces/worksheet.html#applyrelativedatefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":281,"kind":2048,"name":"getDataSourcesAsync","url":"interfaces/worksheet.html#getdatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":282,"kind":2048,"name":"getFiltersAsync","url":"interfaces/worksheet.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":283,"kind":2048,"name":"getHighlightedMarksAsync","url":"interfaces/worksheet.html#gethighlightedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":284,"kind":2048,"name":"getSelectedMarksAsync","url":"interfaces/worksheet.html#getselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":285,"kind":2048,"name":"getSummaryDataAsync","url":"interfaces/worksheet.html#getsummarydataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":286,"kind":2048,"name":"getSummaryDataReaderAsync","url":"interfaces/worksheet.html#getsummarydatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":287,"kind":2048,"name":"getSummaryColumnsInfoAsync","url":"interfaces/worksheet.html#getsummarycolumnsinfoasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":288,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/worksheet.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":289,"kind":2048,"name":"getUnderlyingTablesAsync","url":"interfaces/worksheet.html#getunderlyingtablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":290,"kind":2048,"name":"getUnderlyingTableDataAsync","url":"interfaces/worksheet.html#getunderlyingtabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":291,"kind":2048,"name":"getUnderlyingTableDataReaderAsync","url":"interfaces/worksheet.html#getunderlyingtabledatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":292,"kind":2048,"name":"selectMarksByValueAsync","url":"interfaces/worksheet.html#selectmarksbyvalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":293,"kind":2048,"name":"clearSelectedMarksAsync","url":"interfaces/worksheet.html#clearselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":294,"kind":2048,"name":"annotateMarkAsync","url":"interfaces/worksheet.html#annotatemarkasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":295,"kind":2048,"name":"getAnnotationsAsync","url":"interfaces/worksheet.html#getannotationsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":296,"kind":2048,"name":"removeAnnotationAsync","url":"interfaces/worksheet.html#removeannotationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":297,"kind":2048,"name":"getVisualSpecificationAsync","url":"interfaces/worksheet.html#getvisualspecificationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":298,"kind":2048,"name":"hoverTupleAsync","url":"interfaces/worksheet.html#hovertupleasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":299,"kind":2048,"name":"selectTuplesAsync","url":"interfaces/worksheet.html#selecttuplesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":300,"kind":1024,"name":"name","url":"interfaces/worksheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":301,"kind":1024,"name":"sheetType","url":"interfaces/worksheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":302,"kind":2048,"name":"findParameterAsync","url":"interfaces/worksheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":303,"kind":1024,"name":"size","url":"interfaces/worksheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":304,"kind":2048,"name":"getParametersAsync","url":"interfaces/worksheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":305,"kind":2048,"name":"addEventListener","url":"interfaces/worksheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":306,"kind":2048,"name":"removeEventListener","url":"interfaces/worksheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":307,"kind":256,"name":"Dashboard","url":"interfaces/dashboard.html","classes":"tsd-kind-interface"},{"id":308,"kind":1024,"name":"objects","url":"interfaces/dashboard.html#objects","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":309,"kind":1024,"name":"worksheets","url":"interfaces/dashboard.html#worksheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":310,"kind":1024,"name":"activeDashboardObjectId","url":"interfaces/dashboard.html#activedashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":311,"kind":1024,"name":"activeDashboardName","url":"interfaces/dashboard.html#activedashboardname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":312,"kind":2048,"name":"setZoneVisibilityAsync","url":"interfaces/dashboard.html#setzonevisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":313,"kind":2048,"name":"setDashboardObjectVisibilityAsync","url":"interfaces/dashboard.html#setdashboardobjectvisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":314,"kind":2048,"name":"getDashboardObjectById","url":"interfaces/dashboard.html#getdashboardobjectbyid","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":315,"kind":2048,"name":"moveAndResizeDashboardObjectsAsync","url":"interfaces/dashboard.html#moveandresizedashboardobjectsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":316,"kind":2048,"name":"replayAnimationAsync","url":"interfaces/dashboard.html#replayanimationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":317,"kind":2048,"name":"getFiltersAsync","url":"interfaces/dashboard.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":318,"kind":2048,"name":"applyFilterAsync","url":"interfaces/dashboard.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":319,"kind":1024,"name":"name","url":"interfaces/dashboard.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":320,"kind":1024,"name":"sheetType","url":"interfaces/dashboard.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":321,"kind":2048,"name":"findParameterAsync","url":"interfaces/dashboard.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":322,"kind":1024,"name":"size","url":"interfaces/dashboard.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":323,"kind":2048,"name":"getParametersAsync","url":"interfaces/dashboard.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":324,"kind":2048,"name":"addEventListener","url":"interfaces/dashboard.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":325,"kind":2048,"name":"removeEventListener","url":"interfaces/dashboard.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":326,"kind":256,"name":"DashboardObjectPositionAndSizeUpdate","url":"interfaces/dashboardobjectpositionandsizeupdate.html","classes":"tsd-kind-interface"},{"id":327,"kind":1024,"name":"dashboardObjectID","url":"interfaces/dashboardobjectpositionandsizeupdate.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":328,"kind":1024,"name":"x","url":"interfaces/dashboardobjectpositionandsizeupdate.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":329,"kind":1024,"name":"y","url":"interfaces/dashboardobjectpositionandsizeupdate.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":330,"kind":1024,"name":"width","url":"interfaces/dashboardobjectpositionandsizeupdate.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":331,"kind":1024,"name":"height","url":"interfaces/dashboardobjectpositionandsizeupdate.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":332,"kind":256,"name":"DashboardObject","url":"interfaces/dashboardobject.html","classes":"tsd-kind-interface"},{"id":333,"kind":1024,"name":"dashboard","url":"interfaces/dashboardobject.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":334,"kind":1024,"name":"type","url":"interfaces/dashboardobject.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":335,"kind":1024,"name":"position","url":"interfaces/dashboardobject.html#position","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":336,"kind":1024,"name":"size","url":"interfaces/dashboardobject.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":337,"kind":1024,"name":"worksheet","url":"interfaces/dashboardobject.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":338,"kind":1024,"name":"name","url":"interfaces/dashboardobject.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":339,"kind":1024,"name":"isFloating","url":"interfaces/dashboardobject.html#isfloating","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":340,"kind":1024,"name":"isVisible","url":"interfaces/dashboardobject.html#isvisible","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":341,"kind":1024,"name":"id","url":"interfaces/dashboardobject.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":342,"kind":256,"name":"Point","url":"interfaces/point.html","classes":"tsd-kind-interface"},{"id":343,"kind":1024,"name":"x","url":"interfaces/point.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":344,"kind":1024,"name":"y","url":"interfaces/point.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":345,"kind":256,"name":"HierarchicalLevels","url":"interfaces/hierarchicallevels.html","classes":"tsd-kind-interface"},{"id":346,"kind":1024,"name":"levels","url":"interfaces/hierarchicallevels.html#levels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevels"},{"id":347,"kind":4194304,"name":"ZoneVisibilityMap","url":"globals.html#zonevisibilitymap","classes":"tsd-kind-type-alias"},{"id":348,"kind":4194304,"name":"DashboardObjectVisibilityMap","url":"globals.html#dashboardobjectvisibilitymap","classes":"tsd-kind-type-alias"},{"id":349,"kind":4194304,"name":"DashboardObjectPositionAndSizeUpdateArray","url":"globals.html#dashboardobjectpositionandsizeupdatearray","classes":"tsd-kind-type-alias"},{"id":350,"kind":256,"name":"MarksCollection","url":"interfaces/markscollection.html","classes":"tsd-kind-interface"},{"id":351,"kind":1024,"name":"data","url":"interfaces/markscollection.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarksCollection"},{"id":352,"kind":256,"name":"MarkInfo","url":"interfaces/markinfo.html","classes":"tsd-kind-interface"},{"id":353,"kind":1024,"name":"type","url":"interfaces/markinfo.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":354,"kind":1024,"name":"color","url":"interfaces/markinfo.html#color","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":355,"kind":1024,"name":"tupleId","url":"interfaces/markinfo.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":356,"kind":256,"name":"SelectionCriteria","url":"interfaces/selectioncriteria.html","classes":"tsd-kind-interface"},{"id":357,"kind":1024,"name":"fieldName","url":"interfaces/selectioncriteria.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":358,"kind":1024,"name":"value","url":"interfaces/selectioncriteria.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":359,"kind":256,"name":"RangeValue","url":"interfaces/rangevalue.html","classes":"tsd-kind-interface"},{"id":360,"kind":1024,"name":"min","url":"interfaces/rangevalue.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":361,"kind":1024,"name":"max","url":"interfaces/rangevalue.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":362,"kind":1024,"name":"nullOption","url":"interfaces/rangevalue.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":363,"kind":256,"name":"TooltipContext","url":"interfaces/tooltipcontext.html","classes":"tsd-kind-interface"},{"id":364,"kind":1024,"name":"tooltipAnchorPoint","url":"interfaces/tooltipcontext.html#tooltipanchorpoint","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TooltipContext"},{"id":365,"kind":4194304,"name":"CategoricalValue","url":"globals.html#categoricalvalue","classes":"tsd-kind-type-alias"},{"id":366,"kind":256,"name":"Column","url":"interfaces/column.html","classes":"tsd-kind-interface"},{"id":367,"kind":1024,"name":"fieldName","url":"interfaces/column.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":368,"kind":1024,"name":"fieldId","url":"interfaces/column.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":369,"kind":1024,"name":"dataType","url":"interfaces/column.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":370,"kind":1024,"name":"isReferenced","url":"interfaces/column.html#isreferenced","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":371,"kind":1024,"name":"index","url":"interfaces/column.html#index","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":372,"kind":256,"name":"DataTable","url":"interfaces/datatable.html","classes":"tsd-kind-interface"},{"id":373,"kind":1024,"name":"name","url":"interfaces/datatable.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":374,"kind":1024,"name":"data","url":"interfaces/datatable.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":375,"kind":1024,"name":"marksInfo","url":"interfaces/datatable.html#marksinfo","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":376,"kind":1024,"name":"columns","url":"interfaces/datatable.html#columns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":377,"kind":1024,"name":"totalRowCount","url":"interfaces/datatable.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":378,"kind":1024,"name":"isTotalRowCountLimited","url":"interfaces/datatable.html#istotalrowcountlimited","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":379,"kind":1024,"name":"isSummaryData","url":"interfaces/datatable.html#issummarydata","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":380,"kind":256,"name":"DataValue","url":"interfaces/datavalue.html","classes":"tsd-kind-interface"},{"id":381,"kind":1024,"name":"value","url":"interfaces/datavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":382,"kind":1024,"name":"nativeValue","url":"interfaces/datavalue.html#nativevalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":383,"kind":1024,"name":"formattedValue","url":"interfaces/datavalue.html#formattedvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":384,"kind":256,"name":"GetSummaryDataOptions","url":"interfaces/getsummarydataoptions.html","classes":"tsd-kind-interface"},{"id":385,"kind":1024,"name":"ignoreAliases","url":"interfaces/getsummarydataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":386,"kind":1024,"name":"ignoreSelection","url":"interfaces/getsummarydataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":387,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getsummarydataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":388,"kind":1024,"name":"maxRows","url":"interfaces/getsummarydataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":389,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getsummarydataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":390,"kind":256,"name":"GetUnderlyingDataOptions","url":"interfaces/getunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":391,"kind":1024,"name":"includeAllColumns","url":"interfaces/getunderlyingdataoptions.html#includeallcolumns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetUnderlyingDataOptions"},{"id":392,"kind":1024,"name":"ignoreAliases","url":"interfaces/getunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":393,"kind":1024,"name":"ignoreSelection","url":"interfaces/getunderlyingdataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":394,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":395,"kind":1024,"name":"maxRows","url":"interfaces/getunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":396,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":397,"kind":256,"name":"DataTableReader","url":"interfaces/datatablereader.html","classes":"tsd-kind-interface"},{"id":398,"kind":1024,"name":"totalRowCount","url":"interfaces/datatablereader.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTableReader"},{"id":399,"kind":1024,"name":"pageCount","url":"interfaces/datatablereader.html#pagecount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTableReader"},{"id":400,"kind":2048,"name":"getPageAsync","url":"interfaces/datatablereader.html#getpageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":401,"kind":2048,"name":"getAllPagesAsync","url":"interfaces/datatablereader.html#getallpagesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":402,"kind":2048,"name":"releaseAsync","url":"interfaces/datatablereader.html#releaseasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":403,"kind":256,"name":"DataSource","url":"interfaces/datasource.html","classes":"tsd-kind-interface"},{"id":404,"kind":1024,"name":"name","url":"interfaces/datasource.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":405,"kind":1024,"name":"id","url":"interfaces/datasource.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":406,"kind":1024,"name":"fields","url":"interfaces/datasource.html#fields","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":407,"kind":1024,"name":"extractUpdateTime","url":"interfaces/datasource.html#extractupdatetime","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":408,"kind":1024,"name":"isExtract","url":"interfaces/datasource.html#isextract","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":409,"kind":1024,"name":"isPublished","url":"interfaces/datasource.html#ispublished","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":410,"kind":2048,"name":"refreshAsync","url":"interfaces/datasource.html#refreshasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":411,"kind":2048,"name":"getActiveTablesAsync","url":"interfaces/datasource.html#getactivetablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":412,"kind":2048,"name":"getConnectionSummariesAsync","url":"interfaces/datasource.html#getconnectionsummariesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":413,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/datasource.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":414,"kind":2048,"name":"getLogicalTablesAsync","url":"interfaces/datasource.html#getlogicaltablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":415,"kind":2048,"name":"getLogicalTableDataAsync","url":"interfaces/datasource.html#getlogicaltabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":416,"kind":256,"name":"Field","url":"interfaces/field.html","classes":"tsd-kind-interface"},{"id":417,"kind":1024,"name":"id","url":"interfaces/field.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":418,"kind":1024,"name":"dataSource","url":"interfaces/field.html#datasource","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":419,"kind":1024,"name":"isHidden","url":"interfaces/field.html#ishidden","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":420,"kind":1024,"name":"columnType","url":"interfaces/field.html#columntype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":421,"kind":1024,"name":"name","url":"interfaces/field.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":422,"kind":1024,"name":"description","url":"interfaces/field.html#description","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":423,"kind":1024,"name":"dataType","url":"interfaces/field.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":424,"kind":1024,"name":"role","url":"interfaces/field.html#role","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":425,"kind":1024,"name":"isGenerated","url":"interfaces/field.html#isgenerated","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":426,"kind":1024,"name":"isCalculatedField","url":"interfaces/field.html#iscalculatedfield","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":427,"kind":1024,"name":"aggregation","url":"interfaces/field.html#aggregation","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":428,"kind":1024,"name":"isCombinedField","url":"interfaces/field.html#iscombinedfield","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":429,"kind":1024,"name":"isPresentOnPublishedDatasource","url":"interfaces/field.html#ispresentonpublisheddatasource","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Field"},{"id":430,"kind":256,"name":"ConnectionSummary","url":"interfaces/connectionsummary.html","classes":"tsd-kind-interface"},{"id":431,"kind":1024,"name":"name","url":"interfaces/connectionsummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":432,"kind":1024,"name":"id","url":"interfaces/connectionsummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":433,"kind":1024,"name":"type","url":"interfaces/connectionsummary.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":434,"kind":1024,"name":"serverURI","url":"interfaces/connectionsummary.html#serveruri","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":435,"kind":256,"name":"TableSummary","url":"interfaces/tablesummary.html","classes":"tsd-kind-interface"},{"id":436,"kind":1024,"name":"name","url":"interfaces/tablesummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":437,"kind":1024,"name":"id","url":"interfaces/tablesummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":438,"kind":1024,"name":"connectionId","url":"interfaces/tablesummary.html#connectionid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":439,"kind":1024,"name":"customSQL","url":"interfaces/tablesummary.html#customsql","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":440,"kind":256,"name":"DataSourceUnderlyingDataOptions","url":"interfaces/datasourceunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":441,"kind":1024,"name":"ignoreAliases","url":"interfaces/datasourceunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":442,"kind":1024,"name":"columnsToInclude","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoinclude","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":443,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":444,"kind":1024,"name":"maxRows","url":"interfaces/datasourceunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":445,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/datasourceunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":446,"kind":256,"name":"LogicalTable","url":"interfaces/logicaltable.html","classes":"tsd-kind-interface"},{"id":447,"kind":1024,"name":"id","url":"interfaces/logicaltable.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":448,"kind":1024,"name":"caption","url":"interfaces/logicaltable.html#caption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":449,"kind":256,"name":"Filter","url":"interfaces/filter.html","classes":"tsd-kind-interface"},{"id":450,"kind":1024,"name":"worksheetName","url":"interfaces/filter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":451,"kind":1024,"name":"filterType","url":"interfaces/filter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":452,"kind":1024,"name":"fieldName","url":"interfaces/filter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":453,"kind":1024,"name":"fieldId","url":"interfaces/filter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":454,"kind":2048,"name":"getFieldAsync","url":"interfaces/filter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":455,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/filter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":456,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/filter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":457,"kind":256,"name":"CategoricalFilter","url":"interfaces/categoricalfilter.html","classes":"tsd-kind-interface"},{"id":458,"kind":1024,"name":"isAllSelected","url":"interfaces/categoricalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":459,"kind":1024,"name":"appliedValues","url":"interfaces/categoricalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":460,"kind":1024,"name":"isExcludeMode","url":"interfaces/categoricalfilter.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":461,"kind":2048,"name":"getDomainAsync","url":"interfaces/categoricalfilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":462,"kind":1024,"name":"worksheetName","url":"interfaces/categoricalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":463,"kind":1024,"name":"filterType","url":"interfaces/categoricalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":464,"kind":1024,"name":"fieldName","url":"interfaces/categoricalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":465,"kind":1024,"name":"fieldId","url":"interfaces/categoricalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":466,"kind":2048,"name":"getFieldAsync","url":"interfaces/categoricalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":467,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":468,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":469,"kind":256,"name":"HierarchicalFilter","url":"interfaces/hierarchicalfilter.html","classes":"tsd-kind-interface"},{"id":470,"kind":1024,"name":"dimensionName","url":"interfaces/hierarchicalfilter.html#dimensionname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":471,"kind":1024,"name":"hierarchyCaption","url":"interfaces/hierarchicalfilter.html#hierarchycaption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":472,"kind":1024,"name":"numberOfLevels","url":"interfaces/hierarchicalfilter.html#numberoflevels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":473,"kind":1024,"name":"levelDetails","url":"interfaces/hierarchicalfilter.html#leveldetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":474,"kind":1024,"name":"isAllSelected","url":"interfaces/hierarchicalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":475,"kind":1024,"name":"appliedValues","url":"interfaces/hierarchicalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":476,"kind":1024,"name":"worksheetName","url":"interfaces/hierarchicalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":477,"kind":1024,"name":"filterType","url":"interfaces/hierarchicalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":478,"kind":1024,"name":"fieldName","url":"interfaces/hierarchicalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":479,"kind":1024,"name":"fieldId","url":"interfaces/hierarchicalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":480,"kind":2048,"name":"getFieldAsync","url":"interfaces/hierarchicalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":481,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":482,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":483,"kind":256,"name":"RangeFilter","url":"interfaces/rangefilter.html","classes":"tsd-kind-interface"},{"id":484,"kind":1024,"name":"minValue","url":"interfaces/rangefilter.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":485,"kind":1024,"name":"maxValue","url":"interfaces/rangefilter.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":486,"kind":1024,"name":"includeNullValues","url":"interfaces/rangefilter.html#includenullvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":487,"kind":2048,"name":"getDomainAsync","url":"interfaces/rangefilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"RangeFilter"},{"id":488,"kind":1024,"name":"worksheetName","url":"interfaces/rangefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":489,"kind":1024,"name":"filterType","url":"interfaces/rangefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":490,"kind":1024,"name":"fieldName","url":"interfaces/rangefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":491,"kind":1024,"name":"fieldId","url":"interfaces/rangefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":492,"kind":2048,"name":"getFieldAsync","url":"interfaces/rangefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":493,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":494,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":495,"kind":256,"name":"RelativeDateFilter","url":"interfaces/relativedatefilter.html","classes":"tsd-kind-interface"},{"id":496,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilter.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":497,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilter.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":498,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilter.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":499,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilter.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":500,"kind":1024,"name":"worksheetName","url":"interfaces/relativedatefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":501,"kind":1024,"name":"filterType","url":"interfaces/relativedatefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":502,"kind":1024,"name":"fieldName","url":"interfaces/relativedatefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":503,"kind":1024,"name":"fieldId","url":"interfaces/relativedatefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":504,"kind":2048,"name":"getFieldAsync","url":"interfaces/relativedatefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":505,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":506,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":507,"kind":256,"name":"FilterOptions","url":"interfaces/filteroptions.html","classes":"tsd-kind-interface"},{"id":508,"kind":1024,"name":"isExcludeMode","url":"interfaces/filteroptions.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterOptions"},{"id":509,"kind":256,"name":"RangeFilterOptions","url":"interfaces/rangefilteroptions.html","classes":"tsd-kind-interface"},{"id":510,"kind":1024,"name":"min","url":"interfaces/rangefilteroptions.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":511,"kind":1024,"name":"max","url":"interfaces/rangefilteroptions.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":512,"kind":1024,"name":"nullOption","url":"interfaces/rangefilteroptions.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":513,"kind":256,"name":"RelativeDateFilterOptions","url":"interfaces/relativedatefilteroptions.html","classes":"tsd-kind-interface"},{"id":514,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilteroptions.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":515,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilteroptions.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":516,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilteroptions.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":517,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilteroptions.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":518,"kind":256,"name":"RangeDomain","url":"interfaces/rangedomain.html","classes":"tsd-kind-interface"},{"id":519,"kind":1024,"name":"type","url":"interfaces/rangedomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":520,"kind":1024,"name":"min","url":"interfaces/rangedomain.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":521,"kind":1024,"name":"max","url":"interfaces/rangedomain.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":522,"kind":256,"name":"CategoricalDomain","url":"interfaces/categoricaldomain.html","classes":"tsd-kind-interface"},{"id":523,"kind":1024,"name":"type","url":"interfaces/categoricaldomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":524,"kind":1024,"name":"values","url":"interfaces/categoricaldomain.html#values","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":525,"kind":256,"name":"HierarchicalFilterDataValue","url":"interfaces/hierarchicalfilterdatavalue.html","classes":"tsd-kind-interface"},{"id":526,"kind":1024,"name":"value","url":"interfaces/hierarchicalfilterdatavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":527,"kind":1024,"name":"hierarchicalPath","url":"interfaces/hierarchicalfilterdatavalue.html#hierarchicalpath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":528,"kind":1024,"name":"level","url":"interfaces/hierarchicalfilterdatavalue.html#level","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":529,"kind":256,"name":"HierarchicalLevelDetail","url":"interfaces/hierarchicalleveldetail.html","classes":"tsd-kind-interface"},{"id":530,"kind":1024,"name":"name","url":"interfaces/hierarchicalleveldetail.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":531,"kind":1024,"name":"levelSelectionState","url":"interfaces/hierarchicalleveldetail.html#levelselectionstate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":532,"kind":256,"name":"WorkbookFormatting","url":"interfaces/workbookformatting.html","classes":"tsd-kind-interface"},{"id":533,"kind":1024,"name":"formattingSheets","url":"interfaces/workbookformatting.html#formattingsheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormatting"},{"id":534,"kind":256,"name":"FormattingSheet","url":"interfaces/formattingsheet.html","classes":"tsd-kind-interface"},{"id":535,"kind":1024,"name":"classNameKey","url":"interfaces/formattingsheet.html#classnamekey","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":536,"kind":1024,"name":"cssProperties","url":"interfaces/formattingsheet.html#cssproperties","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":537,"kind":256,"name":"Workbook","url":"interfaces/workbook.html","classes":"tsd-kind-interface"},{"id":538,"kind":2048,"name":"getAllDataSourcesAsync","url":"interfaces/workbook.html#getalldatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Workbook"},{"id":539,"kind":256,"name":"DashboardContent","url":"interfaces/dashboardcontent.html","classes":"tsd-kind-interface"},{"id":540,"kind":1024,"name":"dashboard","url":"interfaces/dashboardcontent.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardContent"},{"id":541,"kind":256,"name":"Environment","url":"interfaces/environment.html","classes":"tsd-kind-interface"},{"id":542,"kind":1024,"name":"apiVersion","url":"interfaces/environment.html#apiversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":543,"kind":1024,"name":"context","url":"interfaces/environment.html#context","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":544,"kind":1024,"name":"language","url":"interfaces/environment.html#language","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":545,"kind":1024,"name":"country","url":"interfaces/environment.html#country","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":546,"kind":1024,"name":"workbookFormatting","url":"interfaces/environment.html#workbookformatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":547,"kind":1024,"name":"locale","url":"interfaces/environment.html#locale","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":548,"kind":1024,"name":"mode","url":"interfaces/environment.html#mode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":549,"kind":1024,"name":"operatingSystem","url":"interfaces/environment.html#operatingsystem","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":550,"kind":1024,"name":"tableauVersion","url":"interfaces/environment.html#tableauversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":551,"kind":1024,"name":"uniqueUserId","url":"interfaces/environment.html#uniqueuserid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":552,"kind":256,"name":"Settings","url":"interfaces/settings.html","classes":"tsd-kind-interface"},{"id":553,"kind":2048,"name":"erase","url":"interfaces/settings.html#erase","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":554,"kind":2048,"name":"get","url":"interfaces/settings.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":555,"kind":2048,"name":"getAll","url":"interfaces/settings.html#getall","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":556,"kind":1024,"name":"isModified","url":"interfaces/settings.html#ismodified","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Settings"},{"id":557,"kind":2048,"name":"saveAsync","url":"interfaces/settings.html#saveasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":558,"kind":2048,"name":"set","url":"interfaces/settings.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":559,"kind":2048,"name":"addEventListener","url":"interfaces/settings.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":560,"kind":2048,"name":"removeEventListener","url":"interfaces/settings.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":561,"kind":256,"name":"UI","url":"interfaces/ui.html","classes":"tsd-kind-interface"},{"id":562,"kind":2048,"name":"displayDialogAsync","url":"interfaces/ui.html#displaydialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":563,"kind":2048,"name":"closeDialog","url":"interfaces/ui.html#closedialog","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":564,"kind":256,"name":"DialogOptions","url":"interfaces/dialogoptions.html","classes":"tsd-kind-interface"},{"id":565,"kind":1024,"name":"width","url":"interfaces/dialogoptions.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":566,"kind":1024,"name":"height","url":"interfaces/dialogoptions.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":567,"kind":1024,"name":"dialogStyle","url":"interfaces/dialogoptions.html#dialogstyle","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":568,"kind":256,"name":"WorksheetContent","url":"interfaces/worksheetcontent.html","classes":"tsd-kind-interface"},{"id":569,"kind":1024,"name":"worksheet","url":"interfaces/worksheetcontent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorksheetContent"},{"id":570,"kind":256,"name":"Extensions","url":"interfaces/extensions.html","classes":"tsd-kind-interface"},{"id":571,"kind":2048,"name":"initializeAsync","url":"interfaces/extensions.html#initializeasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":572,"kind":2048,"name":"initializeDialogAsync","url":"interfaces/extensions.html#initializedialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":573,"kind":1024,"name":"dashboardContent","url":"interfaces/extensions.html#dashboardcontent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":574,"kind":1024,"name":"worksheetContent","url":"interfaces/extensions.html#worksheetcontent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":575,"kind":1024,"name":"environment","url":"interfaces/extensions.html#environment","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":576,"kind":1024,"name":"settings","url":"interfaces/extensions.html#settings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":577,"kind":1024,"name":"ui","url":"interfaces/extensions.html#ui","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":578,"kind":1024,"name":"workbook","url":"interfaces/extensions.html#workbook","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":579,"kind":1024,"name":"dashboardObjectId","url":"interfaces/extensions.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":580,"kind":2048,"name":"createVizImageAsync","url":"interfaces/extensions.html#createvizimageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":581,"kind":2048,"name":"setClickThroughAsync","url":"interfaces/extensions.html#setclickthroughasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":582,"kind":4,"name":"ErrorCodes","url":"enums/tableau.errorcodes.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":583,"kind":16,"name":"APINotInitialized","url":"enums/tableau.errorcodes.html#apinotinitialized","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":584,"kind":16,"name":"VisibilityError","url":"enums/tableau.errorcodes.html#visibilityerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":585,"kind":16,"name":"DialogAlreadyOpen","url":"enums/tableau.errorcodes.html#dialogalreadyopen","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":586,"kind":16,"name":"DialogClosedByUser","url":"enums/tableau.errorcodes.html#dialogclosedbyuser","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":587,"kind":16,"name":"InternalError","url":"enums/tableau.errorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":588,"kind":16,"name":"InvalidDomainDialog","url":"enums/tableau.errorcodes.html#invaliddomaindialog","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":589,"kind":16,"name":"InvalidParameter","url":"enums/tableau.errorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":590,"kind":16,"name":"MissingFilter","url":"enums/tableau.errorcodes.html#missingfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":591,"kind":16,"name":"MissingParameter","url":"enums/tableau.errorcodes.html#missingparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":592,"kind":16,"name":"ServerError","url":"enums/tableau.errorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":593,"kind":16,"name":"SettingSaveInProgress","url":"enums/tableau.errorcodes.html#settingsaveinprogress","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":594,"kind":16,"name":"UnsupportedEventName","url":"enums/tableau.errorcodes.html#unsupportedeventname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":595,"kind":16,"name":"UnsupportedMethodForDataSourceType","url":"enums/tableau.errorcodes.html#unsupportedmethodfordatasourcetype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":596,"kind":4,"name":"ExtensionContext","url":"enums/tableau.extensioncontext.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":597,"kind":16,"name":"Desktop","url":"enums/tableau.extensioncontext.html#desktop","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":598,"kind":16,"name":"Server","url":"enums/tableau.extensioncontext.html#server","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":599,"kind":4,"name":"ExtensionMode","url":"enums/tableau.extensionmode.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":600,"kind":16,"name":"Authoring","url":"enums/tableau.extensionmode.html#authoring","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":601,"kind":16,"name":"Viewing","url":"enums/tableau.extensionmode.html#viewing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":602,"kind":4,"name":"TableauEventType","url":"enums/tableau.tableaueventtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":603,"kind":16,"name":"FilterChanged","url":"enums/tableau.tableaueventtype.html#filterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":604,"kind":16,"name":"MarkSelectionChanged","url":"enums/tableau.tableaueventtype.html#markselectionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":605,"kind":16,"name":"SummaryDataChanged","url":"enums/tableau.tableaueventtype.html#summarydatachanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":606,"kind":16,"name":"ParameterChanged","url":"enums/tableau.tableaueventtype.html#parameterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":607,"kind":16,"name":"SettingsChanged","url":"enums/tableau.tableaueventtype.html#settingschanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":608,"kind":16,"name":"DashboardLayoutChanged","url":"enums/tableau.tableaueventtype.html#dashboardlayoutchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":609,"kind":16,"name":"WorkbookFormattingChanged","url":"enums/tableau.tableaueventtype.html#workbookformattingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":610,"kind":4,"name":"VizImageEncodingType","url":"enums/tableau.vizimageencodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":611,"kind":16,"name":"Discrete","url":"enums/tableau.vizimageencodingtype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":612,"kind":16,"name":"Continuous","url":"enums/tableau.vizimageencodingtype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":613,"kind":4,"name":"VizImageSortDirectionType","url":"enums/tableau.vizimagesortdirectiontype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":614,"kind":16,"name":"Ascending","url":"enums/tableau.vizimagesortdirectiontype.html#ascending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":615,"kind":16,"name":"Descending","url":"enums/tableau.vizimagesortdirectiontype.html#descending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":616,"kind":4,"name":"VizImagePaletteType","url":"enums/tableau.vizimagepalettetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":617,"kind":16,"name":"CustomDiverging","url":"enums/tableau.vizimagepalettetype.html#customdiverging","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":618,"kind":16,"name":"CustomSequential","url":"enums/tableau.vizimagepalettetype.html#customsequential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":619,"kind":4,"name":"VizImageSizeSettingType","url":"enums/tableau.vizimagesizesettingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":620,"kind":16,"name":"Fixed","url":"enums/tableau.vizimagesizesettingtype.html#fixed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":621,"kind":16,"name":"Manual","url":"enums/tableau.vizimagesizesettingtype.html#manual","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":622,"kind":4,"name":"VizImageSizeSettingAlignmentType","url":"enums/tableau.vizimagesizesettingalignmenttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":623,"kind":16,"name":"Right","url":"enums/tableau.vizimagesizesettingalignmenttype.html#right","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":624,"kind":16,"name":"Left","url":"enums/tableau.vizimagesizesettingalignmenttype.html#left","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":625,"kind":16,"name":"Center","url":"enums/tableau.vizimagesizesettingalignmenttype.html#center","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":626,"kind":32,"name":"extensions","url":"modules/tableau.html#extensions","classes":"tsd-kind-variable tsd-parent-kind-module","parent":"Tableau"},{"id":627,"kind":256,"name":"TableauWorksheetEvent","url":"interfaces/tableauworksheetevent.html","classes":"tsd-kind-interface"},{"id":628,"kind":1024,"name":"worksheet","url":"interfaces/tableauworksheetevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauWorksheetEvent"},{"id":629,"kind":1024,"name":"sheet","url":"interfaces/tableauworksheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":630,"kind":1024,"name":"type","url":"interfaces/tableauworksheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":631,"kind":256,"name":"MarksSelectedEvent","url":"interfaces/marksselectedevent.html","classes":"tsd-kind-interface"},{"id":632,"kind":2048,"name":"getMarksAsync","url":"interfaces/marksselectedevent.html#getmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"MarksSelectedEvent"},{"id":633,"kind":1024,"name":"worksheet","url":"interfaces/marksselectedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":634,"kind":1024,"name":"sheet","url":"interfaces/marksselectedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":635,"kind":1024,"name":"type","url":"interfaces/marksselectedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":636,"kind":256,"name":"SummaryDataChangedEvent","url":"interfaces/summarydatachangedevent.html","classes":"tsd-kind-interface"},{"id":637,"kind":1024,"name":"worksheet","url":"interfaces/summarydatachangedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SummaryDataChangedEvent"},{"id":638,"kind":1024,"name":"sheet","url":"interfaces/summarydatachangedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SummaryDataChangedEvent"},{"id":639,"kind":1024,"name":"type","url":"interfaces/summarydatachangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SummaryDataChangedEvent"},{"id":640,"kind":256,"name":"TableauSheetEvent","url":"interfaces/tableausheetevent.html","classes":"tsd-kind-interface"},{"id":641,"kind":1024,"name":"sheet","url":"interfaces/tableausheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauSheetEvent"},{"id":642,"kind":1024,"name":"type","url":"interfaces/tableausheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauSheetEvent"},{"id":643,"kind":256,"name":"FilterChangedEvent","url":"interfaces/filterchangedevent.html","classes":"tsd-kind-interface"},{"id":644,"kind":1024,"name":"fieldName","url":"interfaces/filterchangedevent.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":645,"kind":2048,"name":"getFilterAsync","url":"interfaces/filterchangedevent.html#getfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":646,"kind":1024,"name":"worksheet","url":"interfaces/filterchangedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":647,"kind":1024,"name":"sheet","url":"interfaces/filterchangedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":648,"kind":1024,"name":"type","url":"interfaces/filterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":649,"kind":256,"name":"WorkbookFormattingChangedEvent","url":"interfaces/workbookformattingchangedevent.html","classes":"tsd-kind-interface"},{"id":650,"kind":1024,"name":"formatting","url":"interfaces/workbookformattingchangedevent.html#formatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormattingChangedEvent"},{"id":651,"kind":1024,"name":"type","url":"interfaces/workbookformattingchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WorkbookFormattingChangedEvent"},{"id":652,"kind":256,"name":"TableauEvent","url":"interfaces/tableauevent.html","classes":"tsd-kind-interface"},{"id":653,"kind":1024,"name":"type","url":"interfaces/tableauevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauEvent"},{"id":654,"kind":256,"name":"ParameterChangedEvent","url":"interfaces/parameterchangedevent.html","classes":"tsd-kind-interface"},{"id":655,"kind":2048,"name":"getParameterAsync","url":"interfaces/parameterchangedevent.html#getparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ParameterChangedEvent"},{"id":656,"kind":1024,"name":"type","url":"interfaces/parameterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ParameterChangedEvent"},{"id":657,"kind":256,"name":"SettingsChangedEvent","url":"interfaces/settingschangedevent.html","classes":"tsd-kind-interface"},{"id":658,"kind":1024,"name":"newSettings","url":"interfaces/settingschangedevent.html#newsettings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingsChangedEvent"},{"id":659,"kind":65536,"name":"__type","url":"interfaces/settingschangedevent.html#newsettings.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"SettingsChangedEvent.newSettings"},{"id":660,"kind":1024,"name":"type","url":"interfaces/settingschangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SettingsChangedEvent"},{"id":661,"kind":256,"name":"DashboardLayoutChangedEvent","url":"interfaces/dashboardlayoutchangedevent.html","classes":"tsd-kind-interface"},{"id":662,"kind":1024,"name":"dashboardLayoutChangeDetails","url":"interfaces/dashboardlayoutchangedevent.html#dashboardlayoutchangedetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardLayoutChangedEvent"},{"id":663,"kind":1024,"name":"type","url":"interfaces/dashboardlayoutchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"DashboardLayoutChangedEvent"},{"id":664,"kind":256,"name":"EventListenerManager","url":"interfaces/eventlistenermanager.html","classes":"tsd-kind-interface"},{"id":665,"kind":2048,"name":"addEventListener","url":"interfaces/eventlistenermanager.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":666,"kind":2048,"name":"removeEventListener","url":"interfaces/eventlistenermanager.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":667,"kind":4194304,"name":"DashboardLayoutChangeDetails","url":"globals.html#dashboardlayoutchangedetails","classes":"tsd-kind-type-alias"},{"id":668,"kind":4194304,"name":"TableauEventHandlerFn","url":"globals.html#tableaueventhandlerfn","classes":"tsd-kind-type-alias"},{"id":669,"kind":65536,"name":"__type","url":"globals.html#tableaueventhandlerfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventHandlerFn"},{"id":670,"kind":4194304,"name":"TableauEventUnregisterFn","url":"globals.html#tableaueventunregisterfn","classes":"tsd-kind-type-alias"},{"id":671,"kind":65536,"name":"__type","url":"globals.html#tableaueventunregisterfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventUnregisterFn"},{"id":672,"kind":256,"name":"TableauError","url":"interfaces/tableauerror.html","classes":"tsd-kind-interface"},{"id":673,"kind":1024,"name":"errorCode","url":"interfaces/tableauerror.html#errorcode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":674,"kind":1024,"name":"name","url":"interfaces/tableauerror.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":675,"kind":1024,"name":"message","url":"interfaces/tableauerror.html#message","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":676,"kind":1024,"name":"stack","url":"interfaces/tableauerror.html#stack","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":677,"kind":1024,"name":"Error","url":"interfaces/tableauerror.html#error","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":678,"kind":4,"name":"SharedErrorCodes","url":"enums/sharederrorcodes.html","classes":"tsd-kind-enum"},{"id":679,"kind":16,"name":"CrosstabCreationError","url":"enums/sharederrorcodes.html#crosstabcreationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":680,"kind":16,"name":"DataCreationError","url":"enums/sharederrorcodes.html#datacreationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":681,"kind":16,"name":"InvalidAggregationFieldName","url":"enums/sharederrorcodes.html#invalidaggregationfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":682,"kind":16,"name":"InvalidFilterFieldName","url":"enums/sharederrorcodes.html#invalidfilterfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":683,"kind":16,"name":"InvalidFilterFieldValue","url":"enums/sharederrorcodes.html#invalidfilterfieldvalue","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":684,"kind":16,"name":"InvalidSelectionDate","url":"enums/sharederrorcodes.html#invalidselectiondate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":685,"kind":16,"name":"InvalidSelectionFieldName","url":"enums/sharederrorcodes.html#invalidselectionfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":686,"kind":16,"name":"InvalidSelectionValue","url":"enums/sharederrorcodes.html#invalidselectionvalue","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":687,"kind":16,"name":"InvalidSelectionSheet","url":"enums/sharederrorcodes.html#invalidselectionsheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":688,"kind":16,"name":"InternalError","url":"enums/sharederrorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":689,"kind":16,"name":"InvalidParameter","url":"enums/sharederrorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":690,"kind":16,"name":"PDFCreationError","url":"enums/sharederrorcodes.html#pdfcreationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":691,"kind":16,"name":"PowerPointCreationError","url":"enums/sharederrorcodes.html#powerpointcreationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":692,"kind":16,"name":"NotActiveSheet","url":"enums/sharederrorcodes.html#notactivesheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":693,"kind":16,"name":"ImplementationError","url":"enums/sharederrorcodes.html#implementationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":694,"kind":16,"name":"ApiExecutionError","url":"enums/sharederrorcodes.html#apiexecutionerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":695,"kind":16,"name":"ServerError","url":"enums/sharederrorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":696,"kind":16,"name":"Timeout","url":"enums/sharederrorcodes.html#timeout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"}]}; \ No newline at end of file diff --git a/docs/enums/sharederrorcodes.html b/docs/enums/sharederrorcodes.html index 7304e4d1..6906819c 100644 --- a/docs/enums/sharederrorcodes.html +++ b/docs/enums/sharederrorcodes.html @@ -3,7 +3,7 @@ - SharedErrorCodes | Dashboard Extensions + SharedErrorCodes | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -72,6 +72,8 @@

    Index

    Enumeration members

    @@ -97,7 +102,7 @@

    ApiExecutionError

    ApiExecutionError: = "api-execution-error"
    @@ -106,13 +111,43 @@

    ApiExecutionError

    +
    + +

    CrosstabCreationError

    +
    CrosstabCreationError: = "crosstab-creation-error"
    + +
    +
    +

    A CSV or Excel file failed to be created in Viz.exportCrosstabAsync().

    +
    +
    +
    +
    + +

    DataCreationError

    +
    DataCreationError: = "data-creation-error"
    + +
    +
    +

    A CSV file failed to be created in Viz.exportDataAsync().

    +
    +
    +

    ImplementationError

    ImplementationError: = "wrong-implementation"
    @@ -127,7 +162,7 @@

    InternalError

    InternalError: = "internal-error"
    @@ -142,7 +177,7 @@

    InvalidAggregationFieldName

    InvalidAggregationFieldName: = "invalid-aggregation-field-name"
    @@ -158,7 +193,7 @@

    InvalidFilterFieldName

    InvalidFilterFieldName: = "invalid-filter-name"
    @@ -173,7 +208,7 @@

    InvalidFilterFieldValue

    InvalidFilterFieldValue: = "invalid-filter-fieldValue"
    @@ -188,7 +223,7 @@

    InvalidParameter

    InvalidParameter: = "invalid-parameter"
    @@ -203,7 +238,7 @@

    InvalidSelectionDate

    InvalidSelectionDate: = "invalid-selection-date"
    @@ -218,7 +253,7 @@

    InvalidSelectionFieldName

    InvalidSelectionFieldName: = "invalid-selection-fieldName"
    @@ -227,13 +262,28 @@

    InvalidSelectionFieldName

    +
    + +

    InvalidSelectionSheet

    +
    InvalidSelectionSheet: = "invalid-selection-sheet"
    + +
    +
    +

    A parameter did not include a valid sheet selection for exporting.

    +
    +
    +

    InvalidSelectionValue

    InvalidSelectionValue: = "invalid-selection-value"
    @@ -248,7 +298,7 @@

    NotActiveSheet

    NotActiveSheet: = "not-active-sheet"
    @@ -257,13 +307,43 @@

    NotActiveSheet

    +
    + +

    PDFCreationError

    +
    PDFCreationError: = "pdf-creation-error"
    + +
    +
    +

    A PDF file failed to be created in Viz.exportPDFAsync().

    +
    +
    +
    +
    + +

    PowerPointCreationError

    +
    PowerPointCreationError: = "powerpoint-creation-error"
    + +
    +
    +

    A PowerPoint file failed to be created in Viz.exportPowerPointAsync().

    +
    +
    +

    ServerError

    ServerError: = "server-error"
    @@ -278,7 +358,7 @@

    Timeout

    Timeout: = "timeout"
    @@ -307,6 +387,12 @@

    Timeout

  • ApiExecutionError
  • +
  • + CrosstabCreationError +
  • +
  • + DataCreationError +
  • ImplementationError
  • @@ -331,12 +417,21 @@

    Timeout

  • InvalidSelectionFieldName
  • +
  • + InvalidSelectionSheet +
  • InvalidSelectionValue
  • NotActiveSheet
  • +
  • + PDFCreationError +
  • +
  • + PowerPointCreationError +
  • ServerError
  • diff --git a/docs/enums/tableau.analyticsobjecttype.html b/docs/enums/tableau.analyticsobjecttype.html index 182d5dc4..50dda018 100644 --- a/docs/enums/tableau.analyticsobjecttype.html +++ b/docs/enums/tableau.analyticsobjecttype.html @@ -3,7 +3,7 @@ - AnalyticsObjectType | Dashboard Extensions + AnalyticsObjectType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/enums/tableau.annotationtype.html b/docs/enums/tableau.annotationtype.html index 629a1526..ef7f0e7f 100644 --- a/docs/enums/tableau.annotationtype.html +++ b/docs/enums/tableau.annotationtype.html @@ -3,7 +3,7 @@ - AnnotationType | Dashboard Extensions + AnnotationType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/enums/tableau.classnamekey.html b/docs/enums/tableau.classnamekey.html index 988fad08..49036d3c 100644 --- a/docs/enums/tableau.classnamekey.html +++ b/docs/enums/tableau.classnamekey.html @@ -3,7 +3,7 @@ - ClassNameKey | Dashboard Extensions + ClassNameKey | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/enums/tableau.columntype.html b/docs/enums/tableau.columntype.html index 3bf481ac..9b151b9f 100644 --- a/docs/enums/tableau.columntype.html +++ b/docs/enums/tableau.columntype.html @@ -3,7 +3,7 @@ - ColumnType | Dashboard Extensions + ColumnType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/enums/tableau.dashboardlayoutchange.html b/docs/enums/tableau.dashboardlayoutchange.html index 2994485c..fa60b4dd 100644 --- a/docs/enums/tableau.dashboardlayoutchange.html +++ b/docs/enums/tableau.dashboardlayoutchange.html @@ -3,7 +3,7 @@ - DashboardLayoutChange | Dashboard Extensions + DashboardLayoutChange | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +104,7 @@

    Added

    Added: = "added"
    @@ -110,13 +113,43 @@

    Added

    +
    + +

    DashboardChanged

    +
    DashboardChanged: = "dashboard-changed"
    + +
    +
    +

    Navigate to another dashboard

    +
    +
    +
    +
    + +

    Deselected

    +
    Deselected: = "deselected"
    + +
    +
    +

    A dashboard object is deselected

    +
    +
    +

    IsFloatingChanged

    IsFloatingChanged: = "is-floating-changed"
    @@ -131,7 +164,7 @@

    IsVisibleChanged

    IsVisibleChanged: = "is-visible-changed"
    @@ -146,7 +179,7 @@

    NameChanged

    NameChanged: = "name-changed"
    @@ -161,7 +194,7 @@

    PositionChanged

    PositionChanged: = "position-changed"
    @@ -176,7 +209,7 @@

    Removed

    Removed: = "removed"
    @@ -185,13 +218,28 @@

    Removed

    +
    + +

    Selected

    +
    Selected: = "selected"
    + +
    +
    +

    A dashboard object is selected

    +
    +
    +

    SizeChanged

    SizeChanged: = "size-changed"
    @@ -215,18 +263,6 @@

    SizeChanged

    diff --git a/docs/enums/tableau.dashboardobjecttype.html b/docs/enums/tableau.dashboardobjecttype.html index ca045e94..d3ec7f50 100644 --- a/docs/enums/tableau.dashboardobjecttype.html +++ b/docs/enums/tableau.dashboardobjecttype.html @@ -3,7 +3,7 @@ - DashboardObjectType | Dashboard Extensions + DashboardObjectType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/enums/tableau.dashboardobjectvisibilitytype.html b/docs/enums/tableau.dashboardobjectvisibilitytype.html index 8cffd99f..2d035c56 100644 --- a/docs/enums/tableau.dashboardobjectvisibilitytype.html +++ b/docs/enums/tableau.dashboardobjectvisibilitytype.html @@ -3,7 +3,7 @@ - DashboardObjectVisibilityType | Dashboard Extensions + DashboardObjectVisibilityType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/enums/tableau.datatype.html b/docs/enums/tableau.datatype.html index 1c09c130..a6d7e532 100644 --- a/docs/enums/tableau.datatype.html +++ b/docs/enums/tableau.datatype.html @@ -3,7 +3,7 @@ - DataType | Dashboard Extensions + DataType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -88,6 +88,7 @@

    Enumeration members

  • Int
  • Spatial
  • String
  • +
  • Unknown
  • @@ -165,6 +166,16 @@

    String

    +
    + +

    Unknown

    +
    Unknown: = "unknown"
    + +
    diff --git a/docs/enums/tableau.daterangetype.html b/docs/enums/tableau.daterangetype.html index 81d2e0f5..bad2fc8e 100644 --- a/docs/enums/tableau.daterangetype.html +++ b/docs/enums/tableau.daterangetype.html @@ -3,7 +3,7 @@ - DateRangeType | Dashboard Extensions + DateRangeType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -100,7 +100,7 @@

    Current

    Current: = "current"
    @@ -110,7 +110,7 @@

    Last

    Last: = "last"
    @@ -120,7 +120,7 @@

    LastN

    LastN: = "last-n"
    @@ -130,7 +130,7 @@

    Next

    Next: = "next"
    @@ -140,7 +140,7 @@

    NextN

    NextN: = "next-n"
    @@ -150,7 +150,7 @@

    ToDate

    ToDate: = "to-date"
    @@ -169,30 +169,6 @@

    ToDate

    diff --git a/docs/enums/tableau.dialogstyle.html b/docs/enums/tableau.dialogstyle.html index 0e701dd8..d222b6bd 100644 --- a/docs/enums/tableau.dialogstyle.html +++ b/docs/enums/tableau.dialogstyle.html @@ -3,7 +3,7 @@ - DialogStyle | Dashboard Extensions + DialogStyle | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -97,7 +97,7 @@

    Modal

    Modal: = "modal"
    @@ -107,7 +107,7 @@

    Modeless

    Modeless: = "modeless"
    @@ -117,7 +117,7 @@

    Window

    Window: = "window"
    @@ -136,33 +136,6 @@

    Window

    diff --git a/docs/enums/tableau.encodingtype.html b/docs/enums/tableau.encodingtype.html index 344f454b..cfd76ca0 100644 --- a/docs/enums/tableau.encodingtype.html +++ b/docs/enums/tableau.encodingtype.html @@ -3,7 +3,7 @@ - EncodingType | Dashboard Extensions + EncodingType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -77,8 +77,10 @@

    Enumeration members

  • Angle
  • Color
  • Column
  • +
  • Custom
  • Detail
  • Filter
  • +
  • Geometry
  • Label
  • MarksType
  • MeasureValues
  • @@ -101,7 +103,7 @@

    Angle

    Angle: = "angle"
    @@ -111,7 +113,7 @@

    Color

    Color: = "color"
    @@ -121,7 +123,17 @@

    Column

    Column: = "column"
    + +
    + +

    Custom

    +
    Custom: = "custom"
    +
    @@ -131,7 +143,7 @@

    Detail

    Detail: = "detail"
    @@ -141,7 +153,17 @@

    Filter

    Filter: = "filter"
    + +
    + +

    Geometry

    +
    Geometry: = "geometry"
    +
    @@ -151,7 +173,7 @@

    Label

    Label: = "label"
    @@ -161,7 +183,7 @@

    MarksType

    MarksType: = "marks-type"
    @@ -171,7 +193,7 @@

    MeasureValues

    MeasureValues: = "measure-values"
    @@ -181,7 +203,7 @@

    Page

    Page: = "page"
    @@ -191,7 +213,7 @@

    Path

    Path: = "path"
    @@ -201,7 +223,7 @@

    Row

    Row: = "row"
    @@ -211,7 +233,7 @@

    Shape

    Shape: = "shape"
    @@ -221,7 +243,7 @@

    Size

    Size: = "size"
    @@ -231,7 +253,7 @@

    Tooltip

    Tooltip: = "tooltip"
    @@ -250,36 +272,6 @@

    Tooltip

    diff --git a/docs/enums/tableau.errorcodes.html b/docs/enums/tableau.errorcodes.html index c7dda1ad..a88c8536 100644 --- a/docs/enums/tableau.errorcodes.html +++ b/docs/enums/tableau.errorcodes.html @@ -3,7 +3,7 @@ - ErrorCodes | Dashboard Extensions + ErrorCodes | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -311,39 +311,6 @@

    VisibilityError

    diff --git a/docs/enums/tableau.extensioncontext.html b/docs/enums/tableau.extensioncontext.html index 31b43cf7..cabd1e29 100644 --- a/docs/enums/tableau.extensioncontext.html +++ b/docs/enums/tableau.extensioncontext.html @@ -3,7 +3,7 @@ - ExtensionContext | Dashboard Extensions + ExtensionContext | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -125,42 +125,6 @@

    Server

    diff --git a/docs/enums/tableau.extensionmode.html b/docs/enums/tableau.extensionmode.html index c50aec97..163bba28 100644 --- a/docs/enums/tableau.extensionmode.html +++ b/docs/enums/tableau.extensionmode.html @@ -3,7 +3,7 @@ - ExtensionMode | Dashboard Extensions + ExtensionMode | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -125,45 +125,6 @@

    Viewing

    diff --git a/docs/enums/tableau.fieldaggregationtype.html b/docs/enums/tableau.fieldaggregationtype.html index fe545a83..da8f5623 100644 --- a/docs/enums/tableau.fieldaggregationtype.html +++ b/docs/enums/tableau.fieldaggregationtype.html @@ -3,7 +3,7 @@ - FieldAggregationType | Dashboard Extensions + FieldAggregationType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -83,6 +83,7 @@

    Enumeration members

    diff --git a/docs/enums/tableau.fieldroletype.html b/docs/enums/tableau.fieldroletype.html index 1beb3dba..5a71fc33 100644 --- a/docs/enums/tableau.fieldroletype.html +++ b/docs/enums/tableau.fieldroletype.html @@ -3,7 +3,7 @@ - FieldRoleType | Dashboard Extensions + FieldRoleType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -97,7 +97,7 @@

    Dimension

    Dimension: = "dimension"
    @@ -107,7 +107,7 @@

    Measure

    Measure: = "measure"
    @@ -117,7 +117,7 @@

    Unknown

    Unknown: = "unknown"
    @@ -136,51 +136,6 @@

    Unknown

    diff --git a/docs/enums/tableau.filterdomaintype.html b/docs/enums/tableau.filterdomaintype.html index f4108c78..b7e5b416 100644 --- a/docs/enums/tableau.filterdomaintype.html +++ b/docs/enums/tableau.filterdomaintype.html @@ -3,7 +3,7 @@ - FilterDomainType | Dashboard Extensions + FilterDomainType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -96,7 +96,7 @@

    Database

    Database: = "database"
    @@ -111,7 +111,7 @@

    Relevant

    Relevant: = "relevant"
    diff --git a/docs/enums/tableau.filternulloption.html b/docs/enums/tableau.filternulloption.html index 7f9b3c02..d327c724 100644 --- a/docs/enums/tableau.filternulloption.html +++ b/docs/enums/tableau.filternulloption.html @@ -3,7 +3,7 @@ - FilterNullOption | Dashboard Extensions + FilterNullOption | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -98,7 +98,7 @@

    AllValues

    AllValues: = "all-values"
    @@ -108,7 +108,7 @@

    NonNullValues

    NonNullValues: = "non-null-values"
    @@ -118,7 +118,7 @@

    NullValues

    NullValues: = "null-values"
    @@ -137,57 +137,6 @@

    NullValues

    diff --git a/docs/enums/tableau.filtertype.html b/docs/enums/tableau.filtertype.html index 0e58a2ba..c3b14c80 100644 --- a/docs/enums/tableau.filtertype.html +++ b/docs/enums/tableau.filtertype.html @@ -3,7 +3,7 @@ - FilterType | Dashboard Extensions + FilterType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -98,7 +98,7 @@

    Categorical

    Categorical: = "categorical"
    @@ -108,7 +108,7 @@

    Hierarchical

    Hierarchical: = "hierarchical"
    @@ -118,7 +118,7 @@

    Range

    Range: = "range"
    @@ -128,7 +128,7 @@

    RelativeDate

    RelativeDate: = "relative-date"
    @@ -147,60 +147,6 @@

    RelativeDate

    diff --git a/docs/enums/tableau.filterupdatetype.html b/docs/enums/tableau.filterupdatetype.html index b06a3545..fe24156e 100644 --- a/docs/enums/tableau.filterupdatetype.html +++ b/docs/enums/tableau.filterupdatetype.html @@ -3,7 +3,7 @@ - FilterUpdateType | Dashboard Extensions + FilterUpdateType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -98,7 +98,7 @@

    Add

    Add: = "add"
    @@ -108,7 +108,7 @@

    All

    All: = "all"
    @@ -118,7 +118,7 @@

    Remove

    Remove: = "remove"
    @@ -128,7 +128,7 @@

    Replace

    Replace: = "replace"
    @@ -147,63 +147,6 @@

    Replace

    diff --git a/docs/enums/tableau.hierarchicallevelselectionstate.html b/docs/enums/tableau.hierarchicallevelselectionstate.html index 90807a0a..d2954a47 100644 --- a/docs/enums/tableau.hierarchicallevelselectionstate.html +++ b/docs/enums/tableau.hierarchicallevelselectionstate.html @@ -3,7 +3,7 @@ - HierarchicalLevelSelectionState | Dashboard Extensions + HierarchicalLevelSelectionState | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -103,7 +103,7 @@

    AllSelected

    AllSelected: = "all-selected"
    @@ -113,7 +113,7 @@

    NoneSelected

    NoneSelected: = "none-selected"
    @@ -123,7 +123,7 @@

    SomeSelected

    SomeSelected: = "some-selected"
    @@ -133,7 +133,7 @@

    UnknownSelected

    UnknownSelected: = "unknown-selected"
    @@ -152,66 +152,6 @@

    UnknownSelected

    diff --git a/docs/enums/tableau.includedatavaluesoption.html b/docs/enums/tableau.includedatavaluesoption.html index c917d630..0c3bb475 100644 --- a/docs/enums/tableau.includedatavaluesoption.html +++ b/docs/enums/tableau.includedatavaluesoption.html @@ -3,7 +3,7 @@ - IncludeDataValuesOption | Dashboard Extensions + IncludeDataValuesOption | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -106,7 +106,7 @@

    AllValues

    AllValues: = "all-values"
    @@ -121,7 +121,7 @@

    OnlyFormattedValues

    OnlyFormattedValues: = "only-formatted-values"
    @@ -136,7 +136,7 @@

    OnlyNativeValues

    OnlyNativeValues: = "only-native-values"
    diff --git a/docs/enums/tableau.marktype.html b/docs/enums/tableau.marktype.html index 301832c1..ab565fcb 100644 --- a/docs/enums/tableau.marktype.html +++ b/docs/enums/tableau.marktype.html @@ -3,7 +3,7 @@ - MarkType | Dashboard Extensions + MarkType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -85,6 +85,7 @@

    Enumeration members

  • Bar
  • Circle
  • GanttBar
  • +
  • Heatmap
  • Line
  • Map
  • Pie
  • @@ -92,6 +93,7 @@

    Enumeration members

  • Shape
  • Square
  • Text
  • +
  • VizExtension
  • @@ -105,7 +107,7 @@

    Area

    Area: = "area"
    @@ -115,7 +117,7 @@

    Bar

    Bar: = "bar"
    @@ -125,7 +127,7 @@

    Circle

    Circle: = "circle"
    @@ -135,7 +137,17 @@

    GanttBar

    GanttBar: = "gantt-bar"
    + +
    + +

    Heatmap

    +
    Heatmap: = "heatmap"
    +
    @@ -145,7 +157,7 @@

    Line

    Line: = "line"
    @@ -155,7 +167,7 @@

    Map

    Map: = "map"
    @@ -165,7 +177,7 @@

    Pie

    Pie: = "pie"
    @@ -175,7 +187,7 @@

    Polygon

    Polygon: = "polygon"
    @@ -185,7 +197,7 @@

    Shape

    Shape: = "shape"
    @@ -195,7 +207,7 @@

    Square

    Square: = "square"
    @@ -205,7 +217,17 @@

    Text

    Text: = "text"
    + +
    + +

    VizExtension

    +
    VizExtension: = "viz-extension"
    +
    @@ -224,72 +246,6 @@

    Text

    diff --git a/docs/enums/tableau.parametervaluetype.html b/docs/enums/tableau.parametervaluetype.html index eb5ac5e9..a363ebd6 100644 --- a/docs/enums/tableau.parametervaluetype.html +++ b/docs/enums/tableau.parametervaluetype.html @@ -3,7 +3,7 @@ - ParameterValueType | Dashboard Extensions + ParameterValueType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -98,7 +98,7 @@

    All

    All: = "all"
    @@ -108,7 +108,7 @@

    List

    List: = "list"
    @@ -118,7 +118,7 @@

    Range

    Range: = "range"
    @@ -137,75 +137,6 @@

    Range

    diff --git a/docs/enums/tableau.periodtype.html b/docs/enums/tableau.periodtype.html index 30404647..43f3c6a3 100644 --- a/docs/enums/tableau.periodtype.html +++ b/docs/enums/tableau.periodtype.html @@ -3,7 +3,7 @@ - PeriodType | Dashboard Extensions + PeriodType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -102,7 +102,7 @@

    Days

    Days: = "days"
    @@ -112,7 +112,7 @@

    Hours

    Hours: = "hours"
    @@ -122,7 +122,7 @@

    Minutes

    Minutes: = "minutes"
    @@ -132,7 +132,7 @@

    Months

    Months: = "months"
    @@ -142,7 +142,7 @@

    Quarters

    Quarters: = "quarters"
    @@ -152,7 +152,7 @@

    Seconds

    Seconds: = "seconds"
    @@ -162,7 +162,7 @@

    Weeks

    Weeks: = "weeks"
    @@ -172,7 +172,7 @@

    Years

    Years: = "years"
    @@ -191,78 +191,6 @@

    Years

    diff --git a/docs/enums/tableau.quicktablecalctype.html b/docs/enums/tableau.quicktablecalctype.html index a94eb42d..114a1a22 100644 --- a/docs/enums/tableau.quicktablecalctype.html +++ b/docs/enums/tableau.quicktablecalctype.html @@ -3,7 +3,7 @@ - QuickTableCalcType | Dashboard Extensions + QuickTableCalcType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -99,7 +99,7 @@

    CompoundGrowthRate

    CompoundGrowthRate: = "compound-growth-rate"
    @@ -109,7 +109,7 @@

    Difference

    Difference: = "difference"
    @@ -119,7 +119,7 @@

    MovingAverage

    MovingAverage: = "moving-average"
    @@ -129,7 +129,7 @@

    PercentDifference

    PercentDifference: = "percent-difference"
    @@ -139,7 +139,7 @@

    PercentOfTotal

    PercentOfTotal: = "percent-of-total"
    @@ -149,7 +149,7 @@

    Percentile

    Percentile: = "percentile"
    @@ -159,7 +159,7 @@

    Rank

    Rank: = "rank"
    @@ -169,7 +169,7 @@

    RunningTotal

    RunningTotal: = "running-total"
    @@ -179,7 +179,7 @@

    Undefined

    Undefined: = "undefined"
    @@ -189,7 +189,7 @@

    YTDGrowth

    YTDGrowth: = "ytd-growth"
    @@ -199,7 +199,7 @@

    YTDTotal

    YTDTotal: = "ytd-total"
    @@ -209,7 +209,7 @@

    YearOverYearGrowth

    YearOverYearGrowth: = "year-over-year-growth"
    @@ -228,81 +228,6 @@

    YearOverYearGrowth

    diff --git a/docs/enums/tableau.replayspeedtype.html b/docs/enums/tableau.replayspeedtype.html index af6e142f..d6c0e6b7 100644 --- a/docs/enums/tableau.replayspeedtype.html +++ b/docs/enums/tableau.replayspeedtype.html @@ -3,7 +3,7 @@ - ReplaySpeedType | Dashboard Extensions + ReplaySpeedType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -102,7 +102,7 @@

    Fast

    Fast: = "fast"
    @@ -117,7 +117,7 @@

    Normal

    Normal: = "normal"
    @@ -132,7 +132,7 @@

    Slow

    Slow: = "slow"
    diff --git a/docs/enums/tableau.selectionupdatetype.html b/docs/enums/tableau.selectionupdatetype.html index aec69b20..0d7fba3a 100644 --- a/docs/enums/tableau.selectionupdatetype.html +++ b/docs/enums/tableau.selectionupdatetype.html @@ -3,7 +3,7 @@ - SelectionUpdateType | Dashboard Extensions + SelectionUpdateType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -97,7 +97,7 @@

    Add

    Add: = "select-add"
    @@ -107,7 +107,7 @@

    Remove

    Remove: = "select-remove"
    @@ -117,7 +117,7 @@

    Replace

    Replace: = "select-replace"
    @@ -136,87 +136,6 @@

    Replace

    diff --git a/docs/enums/tableau.selectoptions.html b/docs/enums/tableau.selectoptions.html new file mode 100644 index 00000000..fcc2db12 --- /dev/null +++ b/docs/enums/tableau.selectoptions.html @@ -0,0 +1,231 @@ + + + + + + SelectOptions | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Enumeration SelectOptions

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    Enum for specifying the select option for the Worksheet.selectTuplesAsync method.

    +
    +
    +
    +
    +

    Index

    +
    +
    +
    +

    Enumeration members

    + +
    +
    +
    +
    +
    +

    Enumeration members

    +
    + +

    Simple

    +
    Simple: = "select-options-simple"
    + +
    +
    +

    Clears existing selection before selecting the tuples specified

    +
    +
    +
    +
    + +

    Toggle

    +
    Toggle: = "select-options-toggle"
    + +
    +
    +

    Adds specified tuples to the existing selection

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/enums/tableau.sheettype.html b/docs/enums/tableau.sheettype.html index cd3e753d..f9991a72 100644 --- a/docs/enums/tableau.sheettype.html +++ b/docs/enums/tableau.sheettype.html @@ -3,7 +3,7 @@ - SheetType | Dashboard Extensions + SheetType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -97,7 +97,7 @@

    Dashboard

    Dashboard: = "dashboard"
    @@ -107,7 +107,7 @@

    Story

    Story: = "story"
    @@ -117,7 +117,7 @@

    Worksheet

    Worksheet: = "worksheet"
    @@ -136,90 +136,6 @@

    Worksheet

    diff --git a/docs/enums/tableau.sortdirection.html b/docs/enums/tableau.sortdirection.html index 705c7afa..a58ad064 100644 --- a/docs/enums/tableau.sortdirection.html +++ b/docs/enums/tableau.sortdirection.html @@ -3,7 +3,7 @@ - SortDirection | Dashboard Extensions + SortDirection | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -89,7 +89,7 @@

    Decreasing

    Decreasing: = "decreasing"
    @@ -99,7 +99,7 @@

    Increasing

    Increasing: = "increasing"
    @@ -118,93 +118,6 @@

    Increasing

    diff --git a/docs/enums/tableau.tableaueventtype.html b/docs/enums/tableau.tableaueventtype.html index 57711ad1..ecd4500b 100644 --- a/docs/enums/tableau.tableaueventtype.html +++ b/docs/enums/tableau.tableaueventtype.html @@ -3,7 +3,7 @@ - TableauEventType | Dashboard Extensions + TableauEventType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -79,13 +79,17 @@

    Index

    -

    Enumeration members

    +

    All Extensions Enumeration members

    +

    Dashboard Extensions Enumeration members

    +
    @@ -93,22 +97,7 @@

    Enumeration members

    -

    Enumeration members

    -
    - -

    DashboardLayoutChanged

    -
    DashboardLayoutChanged: = "dashboard-layout-changed"
    - -
    -
    -

    The dashboard layout has changed

    -
    -
    -
    +

    All Extensions Enumeration members

    FilterChanged

    @@ -146,7 +135,7 @@

    ParameterChanged

    ParameterChanged: = "parameter-changed"
    @@ -161,7 +150,7 @@

    SettingsChanged

    SettingsChanged: = "settings-changed"
    @@ -170,13 +159,47 @@

    SettingsChanged

    +
    + +

    SummaryDataChanged

    +
    SummaryDataChanged: = "summary-data-changed"
    + +
    +
    +

    The summary data backing a worksheet has changed + You can use this event type with Worksheet objects.

    +
    +
    +
    +
    +
    +

    Dashboard Extensions Enumeration members

    +
    + +

    DashboardLayoutChanged

    +
    DashboardLayoutChanged: = "dashboard-layout-changed"
    + +
    +
    +

    The dashboard layout has changed

    +
    +
    +

    WorkbookFormattingChanged

    WorkbookFormattingChanged: = "workbook-formatting-changed"
    diff --git a/docs/enums/tableau.trendlinemodeltype.html b/docs/enums/tableau.trendlinemodeltype.html index 0d36dd69..a2dbc312 100644 --- a/docs/enums/tableau.trendlinemodeltype.html +++ b/docs/enums/tableau.trendlinemodeltype.html @@ -3,7 +3,7 @@ - TrendLineModelType | Dashboard Extensions + TrendLineModelType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -91,7 +91,7 @@

    Exponential

    Exponential: = "exponential"
    @@ -101,7 +101,7 @@

    Linear

    Linear: = "linear"
    @@ -111,7 +111,7 @@

    Logarithmic

    Logarithmic: = "logarithmic"
    @@ -121,7 +121,7 @@

    Polynomial

    Polynomial: = "polynomial"
    @@ -140,99 +140,6 @@

    Polynomial

    diff --git a/docs/enums/tableau.vizimageencodingtype.html b/docs/enums/tableau.vizimageencodingtype.html index a86590c5..32336456 100644 --- a/docs/enums/tableau.vizimageencodingtype.html +++ b/docs/enums/tableau.vizimageencodingtype.html @@ -3,7 +3,7 @@ - VizImageEncodingType | Dashboard Extensions + VizImageEncodingType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    Continuous

    Continuous: = "continuous"
    @@ -111,7 +111,7 @@

    Discrete

    Discrete: = "discrete"
    @@ -130,102 +130,6 @@

    Discrete

    diff --git a/docs/enums/tableau.vizimagepalettetype.html b/docs/enums/tableau.vizimagepalettetype.html index 1f3d37fb..2afd6dd9 100644 --- a/docs/enums/tableau.vizimagepalettetype.html +++ b/docs/enums/tableau.vizimagepalettetype.html @@ -3,7 +3,7 @@ - VizImagePaletteType | Dashboard Extensions + VizImagePaletteType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    CustomDiverging

    CustomDiverging: = "custom-diverging"
    @@ -111,7 +111,7 @@

    CustomSequential

    CustomSequential: = "custom-sequential"
    @@ -130,105 +130,6 @@

    CustomSequential

    diff --git a/docs/enums/tableau.vizimagesizesettingalignmenttype.html b/docs/enums/tableau.vizimagesizesettingalignmenttype.html index 0d78fe84..db30b008 100644 --- a/docs/enums/tableau.vizimagesizesettingalignmenttype.html +++ b/docs/enums/tableau.vizimagesizesettingalignmenttype.html @@ -3,7 +3,7 @@ - VizImageSizeSettingAlignmentType | Dashboard Extensions + VizImageSizeSettingAlignmentType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -102,7 +102,7 @@

    Center

    Center: = "center"
    @@ -112,7 +112,7 @@

    Left

    Left: = "left"
    @@ -122,7 +122,7 @@

    Right

    Right: = "right"
    @@ -141,108 +141,6 @@

    Right

    diff --git a/docs/enums/tableau.vizimagesizesettingtype.html b/docs/enums/tableau.vizimagesizesettingtype.html index f8872e6d..69a8d767 100644 --- a/docs/enums/tableau.vizimagesizesettingtype.html +++ b/docs/enums/tableau.vizimagesizesettingtype.html @@ -3,7 +3,7 @@ - VizImageSizeSettingType | Dashboard Extensions + VizImageSizeSettingType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    Fixed

    Fixed: = "fixed"
    @@ -111,7 +111,7 @@

    Manual

    Manual: = "manual"
    @@ -130,111 +130,6 @@

    Manual

    diff --git a/docs/enums/tableau.vizimagesortdirectiontype.html b/docs/enums/tableau.vizimagesortdirectiontype.html index 4e3f9b1f..f02b0e21 100644 --- a/docs/enums/tableau.vizimagesortdirectiontype.html +++ b/docs/enums/tableau.vizimagesortdirectiontype.html @@ -3,7 +3,7 @@ - VizImageSortDirectionType | Dashboard Extensions + VizImageSortDirectionType | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    Ascending

    Ascending: = "ascending"
    @@ -111,7 +111,7 @@

    Descending

    Descending: = "descending"
    @@ -130,114 +130,6 @@

    Descending

    diff --git a/docs/globals.html b/docs/globals.html index 0f31bba7..0c025f41 100644 --- a/docs/globals.html +++ b/docs/globals.html @@ -3,7 +3,7 @@ - Dashboard Extensions + Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -54,7 +54,7 @@ Globals -

    Dashboard Extensions

    +

    Tableau Extensions

    @@ -78,28 +78,25 @@

    Enumerations

    -

    Interfaces

    +

    All Extensions Interfaces

    +

    Dashboard Extensions Interfaces

    + +

    Viz Extensions Interfaces

    +
    -

    Type aliases

    +

    All Extensions Type aliases

    +

    Dashboard Extensions Type aliases

    +
    @@ -157,14 +173,14 @@

    Type aliases

    -

    Type aliases

    +

    All Extensions Type aliases

    CategoricalValue

    CategoricalValue: string | Array<string>
    @@ -173,58 +189,13 @@

    CategoricalValue

    -
    - -

    DashboardLayoutChangeDetails

    -
    DashboardLayoutChangeDetails: Map<number, Array<DashboardLayoutChange>>
    - -
    -
    -

    Map object that is used for the DashboardLayoutChangedEvent.

    -
    -
    -
    -
    - -

    DashboardObjectPositionAndSizeUpdateArray

    -
    DashboardObjectPositionAndSizeUpdateArray: Array<DashboardObjectPositionAndSizeUpdate>
    - -
    -
    -

    Array object that can be passed into moveAndResizeDashboardObjects.

    -
    -
    -
    -
    - -

    DashboardObjectVisibilityMap

    -
    DashboardObjectVisibilityMap: Map<number, DashboardObjectVisibilityType>
    - -
    -
    -

    Map object that can be passed into setDashboardObjectVisibilityAsync.

    -
    -
    -

    TableauEventHandlerFn

    TableauEventHandlerFn: (event: TableauEvent) => void
    @@ -265,7 +236,7 @@

    TableauEventUnregisterFn

    TableauEventUnregisterFn: () => boolean
    @@ -295,13 +266,61 @@

    Returns boolean

    + +
    +

    Dashboard Extensions Type aliases

    +
    + +

    DashboardLayoutChangeDetails

    +
    DashboardLayoutChangeDetails: Map<number, Array<DashboardLayoutChange>>
    + +
    +
    +

    Map object that is used for the DashboardLayoutChangedEvent.

    +
    +
    +
    +
    + +

    DashboardObjectPositionAndSizeUpdateArray

    +
    DashboardObjectPositionAndSizeUpdateArray: Array<DashboardObjectPositionAndSizeUpdate>
    + +
    +
    +

    Array object that can be passed into moveAndResizeDashboardObjects.

    +
    +
    +
    +
    + +

    DashboardObjectVisibilityMap

    +
    DashboardObjectVisibilityMap: Map<number, DashboardObjectVisibilityType>
    + +
    +
    +

    Map object that can be passed into setDashboardObjectVisibilityAsync.

    +
    +
    +

    ZoneVisibilityMap

    ZoneVisibilityMap: Map<number, ZoneVisibilityType> | object
    @@ -380,6 +399,9 @@

    ZoneVisibilityMap

  • DialogOptions
  • +
  • + Encoding +
  • Environment
  • @@ -392,6 +414,9 @@

    ZoneVisibilityMap

  • Field
  • +
  • + FieldInstance +
  • Filter
  • @@ -434,6 +459,9 @@

    ZoneVisibilityMap

  • MarksSelectedEvent
  • +
  • + MarksSpecification +
  • Parameter
  • @@ -479,6 +507,9 @@

    ZoneVisibilityMap

  • Size
  • +
  • + SummaryDataChangedEvent +
  • TableSummary
  • @@ -494,9 +525,15 @@

    ZoneVisibilityMap

  • TableauWorksheetEvent
  • +
  • + TooltipContext +
  • UI
  • +
  • + VisualSpecification +
  • Workbook
  • @@ -509,6 +546,9 @@

    ZoneVisibilityMap

  • Worksheet
  • +
  • + WorksheetContent +
  • CategoricalValue
  • diff --git a/docs/index.html b/docs/index.html index 43148968..8cf181a5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,7 +3,7 @@ - Dashboard Extensions + Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -54,7 +54,7 @@ Globals -

    Dashboard Extensions

    +

    Tableau Extensions

    @@ -62,12 +62,14 @@

    Dashboard Extensions

    - -

    Tableau Dashboard Extensions API

    +
    +

    Tableau Extensions API

    The Tableau Extensions API is a JavaScript library that is organized into namespaces that contain - the classes and methods for communicating with Tableau components. For an overview of how the API is - organized, see Tableau Extensions API Basics.

    + the classes and methods for communicating with Tableau components. The Tableau Extensions API + library supports both dashboard extensions and viz extensions (only available in beta), although not + all interfaces and methods apply to both extensions. For an overview of how the API is organized, + see Tableau Extensions API Basics.

    Note: To see all the methods and properties for the Extensions API interfaces, select the Inherited option in the upper-right corner of your browser window. This option shows any methods and properties inherited from base classes.
    @@ -88,7 +90,11 @@

    Tableau Dashboard Extensions API

    DashboardContent - The dashboardContent provides access to the dashboard object. When you have the dashboard object, you have access to all elements in the dashboard, including the worksheets, marks, filters, parameters, and data sources. For example, to access the worksheets in a dashboard (after initialization), you might have a line of code that looks like the following:
    worksheets = tableau.extensions.dashboardContent.dashboard.worksheets + (Available to dashboard extensions only) The dashboardContent provides access to the dashboard object. When you have the dashboard object, you have access to all elements in the dashboard, including the worksheets, marks, filters, parameters, and data sources. For example, to access the worksheets in a dashboard (after initialization), you might have a line of code that looks like the following:
    const worksheets = tableau.extensions.dashboardContent.dashboard.worksheets + + + WorksheetContent + (Available to viz extensions beta only) The worksheetContent provides access to the worksheet object. When you have the worksheet object, you have access to all elements in the worksheet, including the worksheets, marks, filters, parameters, and data sources. For example, to access the worksheet in a workbook (after initialization), you might have a line of code that looks like the following:
    const worksheet = tableau.extensions.worksheetContent Settings @@ -103,9 +109,19 @@

    Tableau Dashboard Extensions API

    The ui namespace provides methods for an extension to display a popup dialog window. + +

    Dashboard extensions

    +

    The following diagram shows the relationship between the extensions namespace and the worksheets in the dashboard. For more information, see Tableau Extensions API Basics.

    Extensions API namespace hierarchy

    +
    + +

    Viz extensions (available in beta only)

    +
    +

    The following diagram shows the relationship between the extensions namespace and the worksheets in + the workbook. For more information, see Tableau Extensions API Basics.

    +

    Viz Extensions API namespace hierarchy

    diff --git a/docs/interfaces/categoricaldomain.html b/docs/interfaces/categoricaldomain.html index 591c3ded..d8f197a1 100644 --- a/docs/interfaces/categoricaldomain.html +++ b/docs/interfaces/categoricaldomain.html @@ -3,7 +3,7 @@ - CategoricalDomain | Dashboard Extensions + CategoricalDomain | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/categoricalfilter.html b/docs/interfaces/categoricalfilter.html index 8c17e79a..59fd3be3 100644 --- a/docs/interfaces/categoricalfilter.html +++ b/docs/interfaces/categoricalfilter.html @@ -3,7 +3,7 @@ - CategoricalFilter | Dashboard Extensions + CategoricalFilter | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/column.html b/docs/interfaces/column.html index 3abe9a48..bcd09bb0 100644 --- a/docs/interfaces/column.html +++ b/docs/interfaces/column.html @@ -3,7 +3,7 @@ - Column | Dashboard Extensions + Column | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -121,11 +121,10 @@

    fieldId

    returns
    -

    The fieldId of the field in the column. This is a calculated string that is unique across all fields and datasources in the workbook. - It does not directly correspond to any other object Id - it is a combination of DataSource.id, Field.id, and Field type information. - (When retrieved as summary data, this includes the aggregation.) - This means the fieldID will change if the datasource is replaced: for example - [Clipboard_20210305T164000].[sum:Sales:qk] could become [federated.12usuoq1171o1b1ebdyh60fjnev1].[sum:Sales:qk].

    +

    The fieldId of the field in the column. In summary data, this includes the aggregation. + The fieldId is not stable across replacing data sources. + For example after replacing the data source [Clipboard_20210305T164000].[sum:Sales:qk] could become + [federated.12usuoq1171o1b1ebdyh60fjnev1].[sum:Sales:qk].

    since

    1.5.0

    @@ -145,8 +144,8 @@

    fieldName

    returns
    -

    The name of the field in the column. In summary data, this includes the aggregation as localized text, therefore - the summary data field name is not stable across languages. +

    The name of the field in the column. In summary data, this includes the aggregation. + The summary data field name is not stable across languages. For example, in an English version of Tableau, the field name might be SUM(Sales). In French, this would be SOMME(Sales).

    @@ -300,4 +299,4 @@

    Legend

    ga('send', 'pageview'); - + \ No newline at end of file diff --git a/docs/interfaces/connectionsummary.html b/docs/interfaces/connectionsummary.html index 0a6be4bb..cfb38d83 100644 --- a/docs/interfaces/connectionsummary.html +++ b/docs/interfaces/connectionsummary.html @@ -3,7 +3,7 @@ - ConnectionSummary | Dashboard Extensions + ConnectionSummary | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -104,7 +104,7 @@

    id

    id: string
    @@ -121,7 +121,7 @@

    name

    name: string
    @@ -138,7 +138,7 @@

    serverURI

    serverURI: string | undefined
    @@ -157,7 +157,7 @@

    type

    type: string
    diff --git a/docs/interfaces/dashboard.html b/docs/interfaces/dashboard.html index 61364d1f..0e42e447 100644 --- a/docs/interfaces/dashboard.html +++ b/docs/interfaces/dashboard.html @@ -3,7 +3,7 @@ - Dashboard | Dashboard Extensions + Dashboard | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -91,6 +91,8 @@

    Index

    Properties

    Properties

    +
    + +

    activeDashboardName

    +
    activeDashboardName: string
    + +
    +
    +
    returns
    +

    The name of the active dashboard.

    +
    +
    +
    +
    +
    + +

    activeDashboardObjectId

    +
    activeDashboardObjectId: number
    + +
    +
    +
    returns
    +

    The ID of the active object in the dashboard.

    +
    +
    +
    +

    name

    @@ -126,7 +162,7 @@

    name

    @@ -143,7 +179,7 @@

    objects

    objects: Array<DashboardObject>
    @@ -161,7 +197,7 @@

    sheetType

    @@ -179,7 +215,7 @@

    size

    @@ -196,7 +232,7 @@

    worksheets

    worksheets: Array<Worksheet>
    @@ -235,7 +271,7 @@

    addEventListener

    @@ -253,7 +289,7 @@

    addEventListener

    Worksheet - FilterChanged , MarkSelectionChanged + FilterChanged , MarkSelectionChanged, SummaryDataChanged Parameter @@ -314,7 +350,7 @@

    applyFilterAsync

  • @@ -372,12 +408,12 @@

    findParameterAsync

    -

    Searches for a parameter with the given name in the dashboard.

    +

    Searches for a parameter with the given name.

    Parameters

    @@ -404,7 +440,7 @@

    getDashboardObjectById

  • @@ -444,7 +480,7 @@

    getFiltersAsync

  • @@ -470,7 +506,7 @@

    getParametersAsync

    @@ -490,7 +526,7 @@

    moveAndResizeDashboardObjectsAsync

  • @@ -547,7 +583,7 @@

    removeEventListener

    @@ -582,7 +618,7 @@

    replayAnimationAsync

  • @@ -622,7 +658,7 @@

    setDashboardObjectVisibilityAsync

  • @@ -650,7 +686,7 @@

    Parameters

  • dashboardObjectVisibilityMap: DashboardObjectVisibilityMap
    -

    A map of dashboard object ids to its desired state of visibilty.

    +

    A map of dashboard object ids to its desired state of visibility.

  • @@ -669,7 +705,7 @@

    setZoneVisibilityAsync

  • @@ -707,7 +743,7 @@

    Parameters

  • zoneVisibilityMap: ZoneVisibilityMap
    -

    A map of zone ids to the desired state of visibilty for that zone.

    +

    A map of zone ids to the desired state of visibility for that zone.

  • @@ -733,6 +769,12 @@

    Returns Promise Dashboard
      +
    • + activeDashboardName +
    • +
    • + activeDashboardObjectId +
    • name
    • diff --git a/docs/interfaces/dashboardcontent.html b/docs/interfaces/dashboardcontent.html index ebd14d83..c2800919 100644 --- a/docs/interfaces/dashboardcontent.html +++ b/docs/interfaces/dashboardcontent.html @@ -3,7 +3,7 @@ - DashboardContent | Dashboard Extensions + DashboardContent | Tableau Extensions @@ -22,7 +22,7 @@
    • Preparing search index...
    • The search index is not available
    - Dashboard Extensions + Tableau Extensions

    @@ -67,7 +67,7 @@

    Interface DashboardContent

    -

    The DashboardContent namespace is the namespace associated with dashboard extensions. +

    The DashboardContent namespace is the namespace associated with Dashboard Extensions. The DashboardContent namespace contains the Dashboard interface. Use the Dashboard Interface to access dashboard objects, worksheets, and parameters, and to add or remove event listeners.

    @@ -102,7 +102,7 @@

    dashboard

    dashboard: Dashboard
    diff --git a/docs/interfaces/dashboardlayoutchangedevent.html b/docs/interfaces/dashboardlayoutchangedevent.html index 560eb97d..6988e5da 100644 --- a/docs/interfaces/dashboardlayoutchangedevent.html +++ b/docs/interfaces/dashboardlayoutchangedevent.html @@ -3,7 +3,7 @@ - DashboardLayoutChangedEvent | Dashboard Extensions + DashboardLayoutChangedEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -112,7 +112,7 @@

    dashboardLayoutChangeDetails

    dashboardLayoutChangeDetails: DashboardLayoutChangeDetails
    @@ -130,7 +130,7 @@

    type

    diff --git a/docs/interfaces/dashboardobject.html b/docs/interfaces/dashboardobject.html index a3a1d56e..0b581f4d 100644 --- a/docs/interfaces/dashboardobject.html +++ b/docs/interfaces/dashboardobject.html @@ -3,7 +3,7 @@ - DashboardObject | Dashboard Extensions + DashboardObject | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -108,7 +108,7 @@

    dashboard

    dashboard: Dashboard
    @@ -125,7 +125,7 @@

    id

    id: number
    @@ -145,7 +145,7 @@

    isFloating

    isFloating: boolean
    @@ -165,7 +165,7 @@

    isVisible

    isVisible: boolean
    @@ -185,7 +185,7 @@

    name

    name: string
    @@ -205,7 +205,7 @@

    position

    position: Point
    @@ -222,7 +222,7 @@

    size

    size: Size
    @@ -239,7 +239,7 @@

    type

    @@ -256,7 +256,7 @@

    worksheet

    worksheet: Worksheet | undefined
    diff --git a/docs/interfaces/dashboardobjectpositionandsizeupdate.html b/docs/interfaces/dashboardobjectpositionandsizeupdate.html index 2e69e470..0fd8b58f 100644 --- a/docs/interfaces/dashboardobjectpositionandsizeupdate.html +++ b/docs/interfaces/dashboardobjectpositionandsizeupdate.html @@ -3,7 +3,7 @@ - DashboardObjectPositionAndSizeUpdate | Dashboard Extensions + DashboardObjectPositionAndSizeUpdate | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -104,7 +104,7 @@

    dashboardObjectID

    dashboardObjectID: number
    @@ -121,7 +121,7 @@

    height

    height: number
    @@ -138,7 +138,7 @@

    width

    width: number
    @@ -155,7 +155,7 @@

    x

    x: number
    @@ -172,7 +172,7 @@

    y

    y: number
    diff --git a/docs/interfaces/datasource.html b/docs/interfaces/datasource.html index f7793eb8..d33b1d0f 100644 --- a/docs/interfaces/datasource.html +++ b/docs/interfaces/datasource.html @@ -3,7 +3,7 @@ - DataSource | Dashboard Extensions + DataSource | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    -
    - -

    getLogicalTableDataReaderAsync

    - -
      -
    • - -
      -
      -

      Gets the underlying data table reader for the given logical table id. - Only one active DataTableReader per logical table id is supported.

      -
      -
      -

      Parameters

      -
        -
      • -
        logicalTableId: string
        -
        -

        logical table id.

        -
        -
      • -
      • -
        Optional pageRowCount: undefined | number
        -
        -

        The number of rows per page. The default and maximum is 10,000 rows.

        -
        -
      • -
      • -
        Optional options: DataSourceUnderlyingDataOptions
        -
        -

        Collection of options to change the behavior of the reader.

        -
        -
      • -
      -

      Returns Promise<DataTableReader>

      -

      A data table reader to access the logical table data in the data source.

      -

      getLogicalTableDataReaderAsync attempts to prepare all the rows of the table to be read as pages. - There is a limit to the number of rows that can be prepared. The default limit is about 1 million - rows of data. However, if the data source has many columns, this number will be adjusted downward. - You can change the default limit with the Tableau Server (Cloud) or Tableau Desktop option: ExtensionsAndEmbeddingReaderCellLimit. - If the data source has many columns, getLogicalTableDataReaderAsync can be sped up by only requesting - native data values in the DataSourceUnderlyingDataOptions.

      -

      The following example shows use of the getLogicalTableDataReaderAsync and getAllPagesAsync to - prepare pages of 10,000 rows each, and then to get a maximum of 150,000 rows of native data from - a specific logical table in a data source.

      -
      const dataSources = await worksheet.getDataSourcesAsync();
      -const dataSource = dataSources.find(datasource => datasource.name === "Sample - Superstore");
      -const logicalTables = await dataSource.getLogicalTablesAsync()
      -const dataTableReader = await dataSource.getLogicalTableDataReaderAsync(logicalTables[0].id, 10000,
      -    { includeDataValuesOption: tableau.IncludeDataValuesOption.OnlyNativeValues });
      -const dataTable = await dataTableReader.getAllPagesAsync(150000);
      -console.log(dataTable);
      -await dataTableReader.releaseAsync();
      -
    • -
    -

    getLogicalTablesAsync

    @@ -539,9 +476,6 @@

    Returns Promise getLogicalTableDataAsync -
  • - getLogicalTableDataReaderAsync -
  • getLogicalTablesAsync
  • diff --git a/docs/interfaces/datasourceunderlyingdataoptions.html b/docs/interfaces/datasourceunderlyingdataoptions.html index 62f9e5b7..bb85bd11 100644 --- a/docs/interfaces/datasourceunderlyingdataoptions.html +++ b/docs/interfaces/datasourceunderlyingdataoptions.html @@ -3,7 +3,7 @@ - DataSourceUnderlyingDataOptions | Dashboard Extensions + DataSourceUnderlyingDataOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions

    @@ -104,7 +104,7 @@

    Optional columnsToInclude
    columnsToInclude: Array<string>
    @@ -119,7 +119,7 @@

    Optional columnsToInclude
    columnsToIncludeById: Array<string>
    @@ -140,7 +140,7 @@

    Optional ignoreAliasesignoreAliases: undefined | false | true

    @@ -155,7 +155,7 @@

    Optional includeData
    includeDataValuesOption: IncludeDataValuesOption
    @@ -177,7 +177,7 @@

    Optional maxRows

    maxRows: undefined | number
    diff --git a/docs/interfaces/datatable.html b/docs/interfaces/datatable.html index 4793eddb..a333a3cd 100644 --- a/docs/interfaces/datatable.html +++ b/docs/interfaces/datatable.html @@ -3,7 +3,7 @@ - DataTable | Dashboard Extensions + DataTable | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -184,7 +184,7 @@

    Optional marksInfo

    returns

    An array of information about marks. Each mark in the array corresponds - to a row in the data of this DataTable. MarkInfo is only currently + to a row in the data of this DataTable. MarkInfo is currently only partially available within results from getSelectedMarksAsync / getMarksAsync.

    diff --git a/docs/interfaces/datatablereader.html b/docs/interfaces/datatablereader.html index 6a60f66f..06780e63 100644 --- a/docs/interfaces/datatablereader.html +++ b/docs/interfaces/datatablereader.html @@ -3,7 +3,7 @@ - DataTableReader | Dashboard Extensions + DataTableReader | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/datavalue.html b/docs/interfaces/datavalue.html index 4c5a15a4..584ae1b5 100644 --- a/docs/interfaces/datavalue.html +++ b/docs/interfaces/datavalue.html @@ -3,7 +3,7 @@ - DataValue | Dashboard Extensions + DataValue | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/dialogoptions.html b/docs/interfaces/dialogoptions.html index 9bd37479..7339ce60 100644 --- a/docs/interfaces/dialogoptions.html +++ b/docs/interfaces/dialogoptions.html @@ -3,7 +3,7 @@ - DialogOptions | Dashboard Extensions + DialogOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/encoding.html b/docs/interfaces/encoding.html new file mode 100644 index 00000000..1ac69481 --- /dev/null +++ b/docs/interfaces/encoding.html @@ -0,0 +1,240 @@ + + + + + + Encoding | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface Encoding

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    since
    +

    1.11.0 + Represents a single field and its associated encoding on a marks card

    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + Encoding +
    • +
    +
    +
    +

    Index

    +
    +
    +
    +

    Properties

    + +
    +
    +
    +
    +
    +

    Properties

    +
    + +

    field

    + + +
    +
    + +

    id

    +
    id: string
    + +
    +
    + +

    type

    + + +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/environment.html b/docs/interfaces/environment.html index f8cca5cd..cba9f86b 100644 --- a/docs/interfaces/environment.html +++ b/docs/interfaces/environment.html @@ -3,7 +3,7 @@ - Environment | Dashboard Extensions + Environment | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions

    @@ -250,6 +251,28 @@

    tableauVersion

    +
    + +

    Optional uniqueUserId

    +
    uniqueUserId: undefined | string
    + +
    +
    +
    returns
    +

    A unique id representing the current user. + The id is unique across a Tableau deployment or across a Tableau Cloud Site. + When the extension is running in desktop, the uniqueUserId is derived from machine-name/user-name. + When the extension is running in server, the uniqueUserId is derived from the user's login name. + There is no mechanism to obtain the actual user name or any additional user information. + If running against a Tableau version prior to 2023.2, uniqueUserId will be undefined.

    +
    +
    +
    +

    Optional workbookFormatting

    @@ -316,6 +339,9 @@

    Optional workbookFormatti
  • tableauVersion
  • +
  • + uniqueUserId +
  • workbookFormatting
  • diff --git a/docs/interfaces/eventlistenermanager.html b/docs/interfaces/eventlistenermanager.html index 6cbc8c0b..dbcbb73d 100644 --- a/docs/interfaces/eventlistenermanager.html +++ b/docs/interfaces/eventlistenermanager.html @@ -3,7 +3,7 @@ - EventListenerManager | Dashboard Extensions + EventListenerManager | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions

    @@ -117,7 +117,7 @@

    addEventListener

  • @@ -135,7 +135,7 @@

    addEventListener

    Worksheet - FilterChanged , MarkSelectionChanged + FilterChanged , MarkSelectionChanged, SummaryDataChanged Parameter @@ -196,7 +196,7 @@

    removeEventListener

  • diff --git a/docs/interfaces/extensions.html b/docs/interfaces/extensions.html index 326f42ba..4595f703 100644 --- a/docs/interfaces/extensions.html +++ b/docs/interfaces/extensions.html @@ -3,7 +3,7 @@ - Extensions | Dashboard Extensions + Extensions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -85,22 +85,32 @@

    Index

    -

    Properties

    +

    All Extensions Properties

    +

    Dashboard Extensions Properties

    + +

    Viz Extensions Properties

    +
    -

    Methods

    +

    All Extensions Methods

    +

    Dashboard Extensions Methods

    +
    @@ -108,53 +118,14 @@

    Methods

    -

    Properties

    -
    - -

    Optional dashboardContent

    -
    dashboardContent: DashboardContent
    - -
    -
    -

    The dashboardContent namespace provides access to the dashboard object. - When you have the dashboard object, you have access to all elements in the dashboard - including the worksheets, marks, - filters, parameters, and data sources. - To access the objects in this name space, specify tableau.extensions.dashboardContent.

    -
    -
    -
    -
    - -

    dashboardObjectId

    -
    dashboardObjectId: number
    - -
    -
    -

    The dashboard object id for the extension that is running.

    -
    -
    -
    since
    -

    1.7.0

    -
    -
    -
    -
    +

    All Extensions Properties

    environment

    environment: Environment
    @@ -171,7 +142,7 @@

    settings

    settings: Settings
    @@ -188,7 +159,7 @@

    ui

    ui: UI
    @@ -204,7 +175,7 @@

    workbook

    workbook: Workbook
    @@ -220,7 +191,73 @@

    workbook

    -

    Methods

    +

    Dashboard Extensions Properties

    +
    + +

    Optional dashboardContent

    +
    dashboardContent: DashboardContent
    + +
    +
    +

    The dashboardContent namespace provides access to the dashboard object when the extension is a dashboard extension. + When you have the dashboard object, you have access to all elements in the dashboard + including the worksheets, marks, + filters, parameters, and data sources. + To access the objects in this name space, specify tableau.extensions.dashboardContent.

    +
    +
    +
    +
    + +

    dashboardObjectId

    +
    dashboardObjectId: number
    + +
    +
    +

    The dashboard object id for the extension that is running.

    +
    +
    +
    since
    +

    1.7.0

    +
    +
    +
    +
    +
    +
    +

    Viz Extensions Properties

    +
    + +

    Optional worksheetContent

    +
    worksheetContent: WorksheetContent
    + +
    +
    +

    The worksheetContent namespace provides access to the worksheet when the extension is a worksheet extension. + When you have the worksheet object, you have access to all elements in the worksheet + To access the objects in this name space, specify tableau.extensions.worksheetContent.

    +
    +
    +
    beta
    +
    +
    +
    +
    +
    +
    +

    All Extensions Methods

    createVizImageAsync

    @@ -231,7 +268,7 @@

    createVizImageAsync

  • @@ -287,7 +324,7 @@

    initializeAsync

  • @@ -334,7 +371,7 @@

    initializeDialogAsync

  • @@ -355,6 +392,9 @@

    Returns Promise

  • +
    +
    +

    Dashboard Extensions Methods

    setClickThroughAsync

    @@ -365,7 +405,7 @@

    setClickThroughAsync

  • @@ -435,6 +475,9 @@

    Returns Promise workbook

  • +
  • + worksheetContent +
  • createVizImageAsync
  • diff --git a/docs/interfaces/field.html b/docs/interfaces/field.html index 3505be7d..b590efd5 100644 --- a/docs/interfaces/field.html +++ b/docs/interfaces/field.html @@ -3,7 +3,7 @@ - Field | Dashboard Extensions + Field | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -76,7 +76,12 @@

    Interface Field

    Hierarchy

    • - Field + FieldBase +
        +
      • + Field +
      • +
    @@ -87,17 +92,19 @@

    Index

    Properties

    @@ -105,13 +112,14 @@

    Properties

    Properties

    -
    +

    aggregation

    @@ -128,7 +136,7 @@

    columnType

    columnType: ColumnType
    @@ -147,7 +155,7 @@

    dataSource

    dataSource: DataSource
    @@ -158,13 +166,32 @@

    dataSource

    -
    +
    + +

    dataType

    +
    dataType: DataType | undefined
    + +
    +
    +
    returns
    +

    The data type of the field

    +
    +
    +
    +
    +

    description

    description: string | undefined
    @@ -181,28 +208,25 @@

    id

    id: string
    returns
    -

    String that represents this field uniquely within this datasource. It is in the format 'a:generated-id:b[:c]', - where 'generated-id' is based on the first name given to the Field and a/b/c are type information. - To match a Field to a Column, use [this.DataSource.id][this.id] == Column.id -

    -
    +

    Unique string representing this field in this datasource.

    -
    +

    isCalculatedField

    isCalculatedField: boolean
    @@ -213,13 +237,14 @@

    isCalculatedField

    -
    +

    isCombinedField

    isCombinedField: boolean
    @@ -230,13 +255,14 @@

    isCombinedField

    -
    +

    isGenerated

    isGenerated: boolean
    @@ -257,7 +283,7 @@

    isHidden

    isHidden: boolean
    @@ -268,11 +294,30 @@

    isHidden

    -
    +
    + +

    isPresentOnPublishedDatasource

    +
    isPresentOnPublishedDatasource: boolean
    + +
    +
    +
    returns
    +

    True if this field comes from the published datasource. False if it was created in Tableau (as a calculated field, for example).

    +
    +
    +
    +
    +

    name

    name: string
    -
    +

    role

    @@ -319,7 +365,7 @@

    role

  • Field @@ -434,4 +486,4 @@

    Legend

    ga('send', 'pageview'); - + \ No newline at end of file diff --git a/docs/interfaces/fieldinstance.html b/docs/interfaces/fieldinstance.html new file mode 100644 index 00000000..a95d59db --- /dev/null +++ b/docs/interfaces/fieldinstance.html @@ -0,0 +1,450 @@ + + + + + + FieldInstance | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface FieldInstance

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    since
    +

    1.11.0 + Represents a field and its properties

    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + FieldBase +
        +
      • + FieldInstance +
      • +
      +
    • +
    +
    +
    +

    Index

    +
    + +
    +
    +
    +

    Properties

    +
    + +

    aggregation

    + + +
    +
    +
    returns
    +

    The type of aggregation for this field.

    +
    +
    +
    +
    +
    + +

    columnType

    +
    columnType: ColumnType
    + +
    +
    +
    returns
    +

    The type of the column, either discrete or continuous.

    +
    +
    +
    +
    +
    + +

    dataType

    +
    dataType: DataType | undefined
    + +
    +
    +
    returns
    +

    The data type of the field

    +
    +
    +
    +
    +
    + +

    description

    +
    description: string | undefined
    + +
    +
    +
    returns
    +

    User description of field, undefined if there is none.

    +
    +
    +
    +
    +
    + +

    fieldId

    +
    fieldId: string
    + +
    +
    +
    returns
    +

    The unique representation of the field across all data sources in the workbook. In summary data, this includes aggregation. + Note that the fieldId could change if you change the data source. + For example after replacing the data source [Clipboard_20210305T164000].[sum:Sales:qk] could become + [federated.12usuoq1171o1b1ebdyh60fjnev1].[sum:Sales:qk].

    +
    +
    +
    +
    +
    + +

    isCalculatedField

    +
    isCalculatedField: boolean
    + +
    +
    +
    returns
    +

    True if this field is a table calculation.

    +
    +
    +
    +
    +
    + +

    isCombinedField

    +
    isCombinedField: boolean
    + +
    +
    +
    returns
    +

    True if this field is a combination of multiple fields, false otherwise.

    +
    +
    +
    +
    +
    + +

    isGenerated

    +
    isGenerated: boolean
    + +
    +
    +
    returns
    +

    True if this field is generated by Tableau, false otherwise. + Tableau generates a number of fields for a data source, such as Number + of Records, or Measure Values. This property can be used to + distinguish between those fields and fields that come from the underlying + data connection, or were created by a user.

    +
    +
    +
    +
    +
    + +

    isPresentOnPublishedDatasource

    +
    isPresentOnPublishedDatasource: boolean
    + +
    +
    +
    returns
    +

    True if this field comes from the published datasource. False if it was created in Tableau (as a calculated field, for example).

    +
    +
    +
    +
    +
    + +

    name

    +
    name: string
    + +
    +
    +
    returns
    +

    The name of the field (i.e. the caption).

    +
    +
    +
    +
    +
    + +

    role

    + + +
    +
    +
    returns
    +

    The role of this field.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/filter.html b/docs/interfaces/filter.html index 6e9338f1..5533bd6a 100644 --- a/docs/interfaces/filter.html +++ b/docs/interfaces/filter.html @@ -3,7 +3,7 @@ - Filter | Dashboard Extensions + Filter | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/filterchangedevent.html b/docs/interfaces/filterchangedevent.html index 99e1a7c8..75937d85 100644 --- a/docs/interfaces/filterchangedevent.html +++ b/docs/interfaces/filterchangedevent.html @@ -3,7 +3,7 @@ - FilterChangedEvent | Dashboard Extensions + FilterChangedEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -107,7 +107,7 @@

    fieldName

    fieldName: string
    @@ -125,7 +125,7 @@

    sheet

    @@ -143,7 +143,7 @@

    type

    @@ -185,7 +185,7 @@

    getFilterAsync

  • diff --git a/docs/interfaces/filteroptions.html b/docs/interfaces/filteroptions.html index c8112ba4..37602609 100644 --- a/docs/interfaces/filteroptions.html +++ b/docs/interfaces/filteroptions.html @@ -3,7 +3,7 @@ - FilterOptions | Dashboard Extensions + FilterOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/formattingsheet.html b/docs/interfaces/formattingsheet.html index 7d9fb715..28a472df 100644 --- a/docs/interfaces/formattingsheet.html +++ b/docs/interfaces/formattingsheet.html @@ -3,7 +3,7 @@ - FormattingSheet | Dashboard Extensions + FormattingSheet | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/getsummarydataoptions.html b/docs/interfaces/getsummarydataoptions.html index 0b88aa7b..cf697391 100644 --- a/docs/interfaces/getsummarydataoptions.html +++ b/docs/interfaces/getsummarydataoptions.html @@ -3,7 +3,7 @@ - GetSummaryDataOptions | Dashboard Extensions + GetSummaryDataOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/getunderlyingdataoptions.html b/docs/interfaces/getunderlyingdataoptions.html index 7426c0c9..e3f7f8ee 100644 --- a/docs/interfaces/getunderlyingdataoptions.html +++ b/docs/interfaces/getunderlyingdataoptions.html @@ -3,7 +3,7 @@ - GetUnderlyingDataOptions | Dashboard Extensions + GetUnderlyingDataOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/hierarchicalfilter.html b/docs/interfaces/hierarchicalfilter.html index 3f3ab8f2..c03a77ad 100644 --- a/docs/interfaces/hierarchicalfilter.html +++ b/docs/interfaces/hierarchicalfilter.html @@ -3,7 +3,7 @@ - HierarchicalFilter | Dashboard Extensions + HierarchicalFilter | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/hierarchicalfilterdatavalue.html b/docs/interfaces/hierarchicalfilterdatavalue.html index d7dd38d9..7d2490ab 100644 --- a/docs/interfaces/hierarchicalfilterdatavalue.html +++ b/docs/interfaces/hierarchicalfilterdatavalue.html @@ -3,7 +3,7 @@ - HierarchicalFilterDataValue | Dashboard Extensions + HierarchicalFilterDataValue | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/hierarchicalleveldetail.html b/docs/interfaces/hierarchicalleveldetail.html index fa8d73a0..a43392be 100644 --- a/docs/interfaces/hierarchicalleveldetail.html +++ b/docs/interfaces/hierarchicalleveldetail.html @@ -3,7 +3,7 @@ - HierarchicalLevelDetail | Dashboard Extensions + HierarchicalLevelDetail | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/hierarchicallevels.html b/docs/interfaces/hierarchicallevels.html index f0d9b236..b2a09143 100644 --- a/docs/interfaces/hierarchicallevels.html +++ b/docs/interfaces/hierarchicallevels.html @@ -3,7 +3,7 @@ - HierarchicalLevels | Dashboard Extensions + HierarchicalLevels | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -105,7 +105,7 @@

    levels

    levels: Array<string>
    diff --git a/docs/interfaces/logicaltable.html b/docs/interfaces/logicaltable.html index a925f192..bb5bf32b 100644 --- a/docs/interfaces/logicaltable.html +++ b/docs/interfaces/logicaltable.html @@ -3,7 +3,7 @@ - LogicalTable | Dashboard Extensions + LogicalTable | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -104,7 +104,7 @@

    caption

    caption: string
    @@ -114,7 +114,7 @@

    id

    id: string
    diff --git a/docs/interfaces/markinfo.html b/docs/interfaces/markinfo.html index aaf36105..4eaa7597 100644 --- a/docs/interfaces/markinfo.html +++ b/docs/interfaces/markinfo.html @@ -3,7 +3,7 @@ - MarkInfo | Dashboard Extensions + MarkInfo | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -102,11 +102,13 @@

    color

    color: string
    +
    notimplemented
    +
    returns

    The RGBA value of this mark.

    @@ -119,7 +121,7 @@

    Optional tupleId

    tupleId: undefined | number
    @@ -136,11 +138,13 @@

    type

    type: MarkType
    +
    notimplemented
    +
    returns

    The type of this mark.

    diff --git a/docs/interfaces/markscollection.html b/docs/interfaces/markscollection.html index 9f92c2f6..fc723ea4 100644 --- a/docs/interfaces/markscollection.html +++ b/docs/interfaces/markscollection.html @@ -3,7 +3,7 @@ - MarksCollection | Dashboard Extensions + MarksCollection | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    data

    data: Array<DataTable>
    diff --git a/docs/interfaces/marksselectedevent.html b/docs/interfaces/marksselectedevent.html index a398a0f2..7615a18e 100644 --- a/docs/interfaces/marksselectedevent.html +++ b/docs/interfaces/marksselectedevent.html @@ -3,7 +3,7 @@ - MarksSelectedEvent | Dashboard Extensions + MarksSelectedEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -114,7 +114,7 @@

    sheet

    @@ -132,7 +132,7 @@

    type

    diff --git a/docs/interfaces/marksspecification.html b/docs/interfaces/marksspecification.html new file mode 100644 index 00000000..b3baf01f --- /dev/null +++ b/docs/interfaces/marksspecification.html @@ -0,0 +1,226 @@ + + + + + + MarksSpecification | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface MarksSpecification

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    since
    +

    1.11.0 + Represents a collection of fields on various encodings for a single marks card

    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + MarksSpecification +
    • +
    +
    +
    +

    Index

    +
    +
    +
    +

    Properties

    + +
    +
    +
    +
    +
    +

    Properties

    +
    + +

    encodings

    +
    encodings: Encoding[]
    + +
    +
    + +

    primitiveType

    +
    primitiveType: MarkType
    + +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/parameter.html b/docs/interfaces/parameter.html index 0dd2425b..bbf3b78e 100644 --- a/docs/interfaces/parameter.html +++ b/docs/interfaces/parameter.html @@ -3,7 +3,7 @@ - Parameter | Dashboard Extensions + Parameter | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -210,7 +210,7 @@

    addEventListener

    @@ -228,7 +228,7 @@

    addEventListener

    Worksheet - FilterChanged , MarkSelectionChanged + FilterChanged , MarkSelectionChanged, SummaryDataChanged Parameter @@ -332,7 +332,7 @@

    removeEventListener

    diff --git a/docs/interfaces/parameterchangedevent.html b/docs/interfaces/parameterchangedevent.html index d69dc8c1..f9eaba88 100644 --- a/docs/interfaces/parameterchangedevent.html +++ b/docs/interfaces/parameterchangedevent.html @@ -3,7 +3,7 @@ - ParameterChangedEvent | Dashboard Extensions + ParameterChangedEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -112,7 +112,7 @@

    type

    @@ -136,7 +136,7 @@

    getParameterAsync

  • diff --git a/docs/interfaces/parameterdomainrestriction.html b/docs/interfaces/parameterdomainrestriction.html index 7287eb46..c65c6793 100644 --- a/docs/interfaces/parameterdomainrestriction.html +++ b/docs/interfaces/parameterdomainrestriction.html @@ -3,7 +3,7 @@ - ParameterDomainRestriction | Dashboard Extensions + ParameterDomainRestriction | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/point.html b/docs/interfaces/point.html index 5a355525..ae4f536d 100644 --- a/docs/interfaces/point.html +++ b/docs/interfaces/point.html @@ -3,7 +3,7 @@ - Point | Dashboard Extensions + Point | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    x

    x: number
    @@ -118,7 +118,7 @@

    y

    y: number
    diff --git a/docs/interfaces/rangedomain.html b/docs/interfaces/rangedomain.html index b5e7f233..b610c72f 100644 --- a/docs/interfaces/rangedomain.html +++ b/docs/interfaces/rangedomain.html @@ -3,7 +3,7 @@ - RangeDomain | Dashboard Extensions + RangeDomain | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/rangefilter.html b/docs/interfaces/rangefilter.html index 2c7cd42c..c449ef12 100644 --- a/docs/interfaces/rangefilter.html +++ b/docs/interfaces/rangefilter.html @@ -3,7 +3,7 @@ - RangeFilter | Dashboard Extensions + RangeFilter | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/rangefilteroptions.html b/docs/interfaces/rangefilteroptions.html index aed0bdec..e41f6b90 100644 --- a/docs/interfaces/rangefilteroptions.html +++ b/docs/interfaces/rangefilteroptions.html @@ -3,7 +3,7 @@ - RangeFilterOptions | Dashboard Extensions + RangeFilterOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/rangevalue.html b/docs/interfaces/rangevalue.html index ad2c6bd7..1c43a49d 100644 --- a/docs/interfaces/rangevalue.html +++ b/docs/interfaces/rangevalue.html @@ -3,7 +3,7 @@ - RangeValue | Dashboard Extensions + RangeValue | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -105,7 +105,7 @@

    max

    max: number | Date
    @@ -120,7 +120,7 @@

    min

    min: number | Date
    @@ -135,7 +135,7 @@

    Optional nullOption

    nullOption: FilterNullOption
    diff --git a/docs/interfaces/relativedatefilter.html b/docs/interfaces/relativedatefilter.html index 53a18d20..f5eb907b 100644 --- a/docs/interfaces/relativedatefilter.html +++ b/docs/interfaces/relativedatefilter.html @@ -3,7 +3,7 @@ - RelativeDateFilter | Dashboard Extensions + RelativeDateFilter | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/relativedatefilteroptions.html b/docs/interfaces/relativedatefilteroptions.html index aa0ad04c..b847e853 100644 --- a/docs/interfaces/relativedatefilteroptions.html +++ b/docs/interfaces/relativedatefilteroptions.html @@ -3,7 +3,7 @@ - RelativeDateFilterOptions | Dashboard Extensions + RelativeDateFilterOptions | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/selectioncriteria.html b/docs/interfaces/selectioncriteria.html index abcc99c8..88e9fe33 100644 --- a/docs/interfaces/selectioncriteria.html +++ b/docs/interfaces/selectioncriteria.html @@ -3,7 +3,7 @@ - SelectionCriteria | Dashboard Extensions + SelectionCriteria | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -101,7 +101,7 @@

    fieldName

    fieldName: string
    @@ -117,7 +117,7 @@

    value

    diff --git a/docs/interfaces/settings.html b/docs/interfaces/settings.html index abda3143..683f0372 100644 --- a/docs/interfaces/settings.html +++ b/docs/interfaces/settings.html @@ -3,7 +3,7 @@ - Settings | Dashboard Extensions + Settings | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -148,7 +148,7 @@

    addEventListener

    @@ -166,7 +166,7 @@

    addEventListener

    Worksheet - FilterChanged , MarkSelectionChanged + FilterChanged , MarkSelectionChanged, SummaryDataChanged Parameter @@ -320,7 +320,7 @@

    removeEventListener

    diff --git a/docs/interfaces/settingschangedevent.html b/docs/interfaces/settingschangedevent.html index 243c7ad4..a2528bc8 100644 --- a/docs/interfaces/settingschangedevent.html +++ b/docs/interfaces/settingschangedevent.html @@ -3,7 +3,7 @@ - SettingsChangedEvent | Dashboard Extensions + SettingsChangedEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -107,7 +107,7 @@

    newSettings

    newSettings: {}
    @@ -133,7 +133,7 @@

    type

    diff --git a/docs/interfaces/sheet.html b/docs/interfaces/sheet.html index 0b73f405..91f43093 100644 --- a/docs/interfaces/sheet.html +++ b/docs/interfaces/sheet.html @@ -3,7 +3,7 @@ - Sheet | Dashboard Extensions + Sheet | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -117,7 +117,7 @@

    name

    name: string
    @@ -134,7 +134,7 @@

    sheetType

    sheetType: SheetType
    @@ -151,7 +151,7 @@

    size

    size: Size
    @@ -176,7 +176,7 @@

    addEventListener

    @@ -194,7 +194,7 @@

    addEventListener

    Worksheet - FilterChanged , MarkSelectionChanged + FilterChanged , MarkSelectionChanged, SummaryDataChanged Parameter @@ -255,12 +255,12 @@

    findParameterAsync

  • -

    Searches for a parameter with the given name in the dashboard.

    +

    Searches for a parameter with the given name.

    Parameters

    @@ -287,7 +287,7 @@

    getParametersAsync

  • @@ -308,7 +308,7 @@

    removeEventListener

    diff --git a/docs/interfaces/size.html b/docs/interfaces/size.html index d147641f..5277235d 100644 --- a/docs/interfaces/size.html +++ b/docs/interfaces/size.html @@ -3,7 +3,7 @@ - Size | Dashboard Extensions + Size | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/summarydatachangedevent.html b/docs/interfaces/summarydatachangedevent.html new file mode 100644 index 00000000..1d75ac23 --- /dev/null +++ b/docs/interfaces/summarydatachangedevent.html @@ -0,0 +1,271 @@ + + + + + + SummaryDataChangedEvent | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface SummaryDataChangedEvent

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    An event which is raised when summary data is changed for a worksheet or when a worksheet's data source is refreshed

    +
    +
    +
    since
    +

    1.11.0 and Tableau 2024.1

    +
    +
    +
    +
    +
    +

    Hierarchy

    + +
    +
    +

    Index

    +
    +
    +
    +

    Properties

    + +
    +
    +
    +
    +
    +

    Properties

    +
    + +

    sheet

    +
    sheet: Sheet
    + +
    +
    +
    returns
    +

    The sheet which was the source of this event.

    +
    +
    +
    +
    +
    + +

    type

    + + +
    +
    +
    returns
    +

    The type of event which this class is representing.

    +
    +
    +
    +
    +
    + +

    worksheet

    +
    worksheet: Worksheet
    + +
    +
    +
    returns
    +

    The worksheet which was the source of this event.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/tableauerror.html b/docs/interfaces/tableauerror.html index f51ea165..7c78d9a5 100644 --- a/docs/interfaces/tableauerror.html +++ b/docs/interfaces/tableauerror.html @@ -3,7 +3,7 @@ - TableauError | Dashboard Extensions + TableauError | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/tableauevent.html b/docs/interfaces/tableauevent.html index f3ab9a5a..cd5511ae 100644 --- a/docs/interfaces/tableauevent.html +++ b/docs/interfaces/tableauevent.html @@ -3,7 +3,7 @@ - TableauEvent | Dashboard Extensions + TableauEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -118,7 +118,7 @@

    type

    diff --git a/docs/interfaces/tableausheetevent.html b/docs/interfaces/tableausheetevent.html index 6c954ff8..07ad9f0f 100644 --- a/docs/interfaces/tableausheetevent.html +++ b/docs/interfaces/tableausheetevent.html @@ -3,7 +3,7 @@ - TableauSheetEvent | Dashboard Extensions + TableauSheetEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -111,7 +111,7 @@

    sheet

    sheet: Sheet
    @@ -129,7 +129,7 @@

    type

    diff --git a/docs/interfaces/tableauworksheetevent.html b/docs/interfaces/tableauworksheetevent.html index 2e5ce08b..5fdeb04f 100644 --- a/docs/interfaces/tableauworksheetevent.html +++ b/docs/interfaces/tableauworksheetevent.html @@ -3,7 +3,7 @@ - TableauWorksheetEvent | Dashboard Extensions + TableauWorksheetEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -83,6 +83,9 @@

    Hierarchy

  • MarksSelectedEvent
  • +
  • + SummaryDataChangedEvent +
  • FilterChangedEvent
  • @@ -116,7 +119,7 @@

    sheet

    @@ -134,7 +137,7 @@

    type

    diff --git a/docs/interfaces/tablesummary.html b/docs/interfaces/tablesummary.html index 1b6cebf4..fd3395ad 100644 --- a/docs/interfaces/tablesummary.html +++ b/docs/interfaces/tablesummary.html @@ -3,7 +3,7 @@ - TableSummary | Dashboard Extensions + TableSummary | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -103,7 +103,7 @@

    connectionId

    connectionId: string
    @@ -120,7 +120,7 @@

    customSQL

    customSQL: string | undefined
    @@ -137,7 +137,7 @@

    id

    id: string
    @@ -154,7 +154,7 @@

    name

    name: string
    diff --git a/docs/interfaces/tooltipcontext.html b/docs/interfaces/tooltipcontext.html new file mode 100644 index 00000000..7731fc79 --- /dev/null +++ b/docs/interfaces/tooltipcontext.html @@ -0,0 +1,218 @@ + + + + + + TooltipContext | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface TooltipContext

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    Provides the necessary information for how to display a Tableau tooltip.

    +
    +
    +
    experimental
    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + TooltipContext +
    • +
    +
    +
    +

    Index

    +
    +
    +
    +

    Properties

    + +
    +
    +
    +
    +
    +

    Properties

    +
    + +

    tooltipAnchorPoint

    +
    tooltipAnchorPoint: Point
    + +
    +
    +

    Indicates where the tooltip should be displayed relative to the top left of the visualization.

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/ui.html b/docs/interfaces/ui.html index 7b0c061e..fc0c45a4 100644 --- a/docs/interfaces/ui.html +++ b/docs/interfaces/ui.html @@ -3,7 +3,7 @@ - UI | Dashboard Extensions + UI | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/visualspecification.html b/docs/interfaces/visualspecification.html new file mode 100644 index 00000000..2f00955c --- /dev/null +++ b/docs/interfaces/visualspecification.html @@ -0,0 +1,254 @@ + + + + + + VisualSpecification | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface VisualSpecification

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    since
    +

    1.11.0 + Represents a collection of fields on various encodings as well as other viz specific information for a worksheet

    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + VisualSpecification +
    • +
    +
    +
    +

    Index

    +
    + +
    +
    +
    +

    Properties

    +
    + +

    activeMarksSpecificationIndex

    +
    activeMarksSpecificationIndex: number
    + +
    +
    + +

    columnFields

    +
    columnFields: FieldInstance[]
    + +
    +
    + +

    marksSpecifications

    +
    marksSpecifications: MarksSpecification[]
    + +
    +
    + +

    rowFields

    +
    rowFields: FieldInstance[]
    + +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/workbook.html b/docs/interfaces/workbook.html index 0ebc5a67..2c319a96 100644 --- a/docs/interfaces/workbook.html +++ b/docs/interfaces/workbook.html @@ -3,7 +3,7 @@ - Workbook | Dashboard Extensions + Workbook | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/workbookformatting.html b/docs/interfaces/workbookformatting.html index e31bba86..1d24b32c 100644 --- a/docs/interfaces/workbookformatting.html +++ b/docs/interfaces/workbookformatting.html @@ -3,7 +3,7 @@ - WorkbookFormatting | Dashboard Extensions + WorkbookFormatting | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    diff --git a/docs/interfaces/workbookformattingchangedevent.html b/docs/interfaces/workbookformattingchangedevent.html index 55b450e0..94b9fec9 100644 --- a/docs/interfaces/workbookformattingchangedevent.html +++ b/docs/interfaces/workbookformattingchangedevent.html @@ -3,7 +3,7 @@ - WorkbookFormattingChangedEvent | Dashboard Extensions + WorkbookFormattingChangedEvent | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -106,7 +106,7 @@

    formatting

    formatting: WorkbookFormatting
    @@ -124,7 +124,7 @@

    type

    diff --git a/docs/interfaces/worksheet.html b/docs/interfaces/worksheet.html index 4fb5c5e1..8af5b6ac 100644 --- a/docs/interfaces/worksheet.html +++ b/docs/interfaces/worksheet.html @@ -3,7 +3,7 @@ - Worksheet | Dashboard Extensions + Worksheet | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions
    @@ -82,16 +82,19 @@

    Index

    -

    Properties

    +

    All Extensions Properties

    +

    Dashboard Extensions Properties

    +
    -

    Methods

    +

    All Extensions Methods

    +

    Viz Extensions Methods

    +
    -

    Properties

    +

    All Extensions Properties

    name

    @@ -132,7 +141,7 @@

    name

    @@ -143,23 +152,6 @@

    name

    -
    - -

    parentDashboard

    -
    parentDashboard: Dashboard
    - -
    -
    -
    returns
    -

    The dashboard object to which this worksheet belongs.

    -
    -
    -
    -

    sheetType

    @@ -167,7 +159,7 @@

    sheetType

    @@ -185,7 +177,7 @@

    size

    @@ -198,7 +190,27 @@

    size

    -

    Methods

    +

    Dashboard Extensions Properties

    +
    + +

    parentDashboard

    +
    parentDashboard: Dashboard
    + +
    +
    +
    returns
    +

    The dashboard object to which this worksheet belongs.

    +
    +
    +
    +
    +
    +
    +

    All Extensions Methods

    addEventListener

    @@ -210,7 +222,7 @@

    addEventListener

    @@ -228,7 +240,7 @@

    addEventListener

    Worksheet - FilterChanged , MarkSelectionChanged + FilterChanged , MarkSelectionChanged, SummaryDataChanged Parameter @@ -289,7 +301,7 @@

    annotateMarkAsync

  • @@ -337,7 +349,7 @@

    applyFilterAsync

  • @@ -387,7 +399,7 @@

    applyHierarchicalFilterAsync

  • @@ -439,7 +451,7 @@

    applyRangeFilterAsync

  • @@ -463,8 +475,8 @@
    fieldName: string
  • filterOptions: RangeFilterOptions
    -

    Filter Options: min, max, nullOption. Atleast one of of min and max is required. - For applying date filters, UTC Date objects are expected. (i.e., var min = new Date(Date.UTC(1999, 0, 1)))

    +

    Filter Options: min, max, nullOption. At least one of of min and max is required. + For applying date filters, UTC Date objects are expected (that is, var min = new Date(Date.UTC(1999, 0, 1))).

  • @@ -483,7 +495,7 @@

    applyRelativeDateFilterAsync

  • @@ -535,7 +547,7 @@

    clearFilterAsync

  • @@ -569,7 +581,7 @@

    clearSelectedMarksAsync

  • @@ -598,12 +610,12 @@

    findParameterAsync

    -

    Searches for a parameter with the given name in the dashboard.

    +

    Searches for a parameter with the given name.

    Parameters

    @@ -630,7 +642,7 @@

    getAnnotationsAsync

  • @@ -660,7 +672,7 @@

    getDataSourcesAsync

  • @@ -676,7 +688,7 @@

    Returns PromiseThe following example shows how you might find a specific data source of a worksheet, using the getDataSourcesAsync() method. The example then chains the data source returned in the promise to a call to the getUnderlyingDataAsync() method to access the data table.

    -
    tableau.extensions.dashboardContent.dashboard.worksheets.find(w => w.name === "Sale Map").getDataSourcesAsync().then(datasources => {
    +							
    worksheet.getDataSourcesAsync().then(datasources => {
       dataSource = datasources.find(datasource => datasource.name === "Sample - Superstore");
       return dataSource.getUnderlyingDataAsync();
     }).then(dataTable => {
    @@ -696,7 +708,7 @@ 

    getFiltersAsync

  • @@ -719,7 +731,7 @@

    getHighlightedMarksAsync

  • @@ -744,7 +756,7 @@

    getParametersAsync

    @@ -764,7 +776,7 @@

    getSelectedMarksAsync

  • @@ -796,7 +808,7 @@

    getSummaryColumnsInfoAsync

  • @@ -824,7 +836,7 @@

    getSummaryDataAsync

  • @@ -835,15 +847,24 @@

    getSummaryDataAsync

    deprecated

    since 1.10.0 Use getSummaryDataReaderAsync to avoid failures with many rows of data.

    -

    Example shows how to replace unsafe usage of getSummaryDataAsync with - getSummaryDataReaderAsync and getAllPagesAsync assuming less than 4,000,000 - rows of data.

    +
    +

    Note: The getSummaryDataAsync and getSummaryDataReaderAsync methods return the data that is currently + in the viz, with parameters, calculated fields, and sorting applied. To access full data, that is + the underlying data without the additional fields and processing you have added in Tableau, use + the Worksheet.getUnderlyingTableDataAsync and Worksheet.getUnderlyingTableDataReaderAsync methods.

    +
    +

    The following example shows how to replace unsafe usage of getSummaryDataAsync with + getSummaryDataReaderAsync and getAllPagesAsync, assuming you have less than 4,000,000 + rows of data. +

    const dataTableReader = await worksheet.getSummaryDataReaderAsync();
     const dataTable = await dataTableReader.getAllPagesAsync();
     await dataTableReader.releaseAsync();
    -// ... process data table ...

    Example shows how to replace unsafe usage of getSummaryDataAsync with +// ... process data table ...


  • +

    The following example shows how to replace unsafe usage of getSummaryDataAsync with getSummaryDataReaderAsync and getPageAsync and work with individual pages.

    +
    const dataTableReader = await worksheet.getSummaryDataReaderAsync();
     for (let currentPage = 0; currentPage < dataTableReader.pageCount; currentPage++) {
       const dataTablePage = await dataTableReader.getPageAsync(currentPage);
    @@ -876,7 +897,7 @@ 

    getSummaryDataReaderAsync

  • @@ -884,6 +905,12 @@

    getSummaryDataReaderAsync

    Gets a summary data table reader for this worksheet. Only one active DataTableReader for summary data is supported.

    +
    +

    Note: The getSummaryDataAsync and getSummaryDataReaderAsync methods return the data that is currently + in the viz, with parameters, calculated fields, and sorting applied. To access full data, that is + the underlying data without the additional fields and processing you have added in Tableau, use + the Worksheet.getUnderlyingTableDataAsync and Worksheet.getUnderlyingTableDataReaderAsync methods.

    +
  • Parameters

      @@ -902,7 +929,7 @@
      Optional options: Returns Promise<DataTableReader>

      A data table reader to access the summary data for the worksheet.

      -

      Example showing the methods to get and use the summary data reader for all rows in a worksheet.

      +

      The following example shows the methods to get and use the summary data reader for all rows in a worksheet.

      const dataTableReader = await worksheet.getSummaryDataReaderAsync();
       for (let currentPage = 0; currentPage < dataTableReader.pageCount; currentPage++) {
         let dataTablePage = await dataTableReader.getPageAsync(currentPage);
      @@ -922,7 +949,7 @@ 

      getUnderlyingDataAsync

    • @@ -931,7 +958,7 @@

      getUnderlyingDataAsync

      deprecated
      -

      Use Worksheet.getUnderlyingTableDataReaderAsync or Worksheet.getUnderlyingTableDataAsync.

      +

      Use Worksheet.getUnderlyingTableDataReaderAsync or Worksheet.getUnderlyingTableDataAsync.

  • @@ -959,7 +986,7 @@

    getUnderlyingTableDataAsync

  • @@ -970,6 +997,13 @@

    getUnderlyingTableDataAsync

    since

    1.4.0

    +
    +

    Note: Use the getUnderlyingTableDataAsync method to access the full data, that is the underlying + data without the parameters, calculated fields, and processing you might have added in Tableau. + To access just the data that is currently in the viz, with parameters, + calculated fields, and sorting applied, use the Worksheet.getSummaryDataAsync and + Worksheet.getSummaryDataReaderAsync methods.

    +

    You can use the getUnderlyingDataOptions.maxRows property to request the number of rows of data to return. If unspecified (maxRows == '0'), the call to getUnderlyingTableDataAsync requests all rows in the logical table. Note that the maximum number of rows returned from the getUnderlyingTableDataAsync() method is limited @@ -983,8 +1017,7 @@

    getUnderlyingTableDataAsync

    see

    getUnderlyingTableDataReaderAsync to read more than 10,000 rows.

    -
    var worksheet = tableau.extensions.dashboardContent.dashboard.worksheets.find(w => w.name === "Sale Map");
    -const logicalTables = await worksheet.getUnderlyingTablesAsync();
    +										
    const logicalTables = await worksheet.getUnderlyingTablesAsync();
     const dataTable = await worksheet.getUnderlyingTableDataAsync(logicalTables[0].id)
     // process the dataTable...
    @@ -1019,7 +1052,7 @@

    getUnderlyingTableDataReaderAsync

  • @@ -1028,7 +1061,14 @@

    getUnderlyingTableDataReaderAsync

    Use the getUnderlyingTablesAsync method to identify the logical tables. Only one active DataTableReader per logical table id is supported.

    -

    getUnderlyingTableDataReaderAsync attempts to prepare all the rows of the underlying table to be read as pages. +


    +

    Note: Use the getUnderlyingTableDataReaderAsync method to access the full data, that is + the underlying data without the parameters, calculated fields, and processing you might + have added in Tableau. To access just the data that is currently in the viz, with parameters, + calculated fields, and sorting applied use the Worksheet.getSummaryDataAsync and + Worksheet.getSummaryDataReaderAsync methods.

    +
    +

    The getUnderlyingTableDataReaderAsync method attempts to prepare all the rows of the underlying table to be read as pages. However, there is a limit to the number of rows that can be prepared. The default limit is 1 million rows of data. You can change the default limit with the Tableau Server (Cloud) or Tableau Desktop option: ExtensionsAndEmbeddingReaderRowLimit. If the underlying table has many columns, getUnderlyingTableDataReaderAsync can be sped up by only requesting @@ -1079,7 +1119,7 @@

    getUnderlyingTablesAsync

  • @@ -1108,6 +1148,35 @@

    Returns Promise

  • +
    + +

    getVisualSpecificationAsync

    + +
      +
    • + +
      +
      +

      Returns the visual specification for the worksheet, which can be used to get + the mappings from fields to encodings backing the visual within the worksheet

      +
      +
      +
      since
      +

      1.11.0 and Tableau 2024.1

      +
      +
      +
      +

      Returns Promise<VisualSpecification>

      +

      Promise containing the VisualSpecification

      +
    • +
    +

    removeAnnotationAsync

    @@ -1118,7 +1187,7 @@

    removeAnnotationAsync

  • @@ -1160,7 +1229,7 @@

    removeEventListener

    @@ -1195,7 +1264,7 @@

    selectMarksByValueAsync

  • @@ -1203,6 +1272,19 @@

    selectMarksByValueAsync

    Selects the marks specified by value using the SelectionCriteria interface. This is intended for manual construction of the desired selections.

    +
    +
    since
    +

    1.10.0 Errors will now be thrown for invalid fields or values.

    +
    +

    The following example shows how you might call this method using state names as the SelectionCriteria. + The SelectionUpdateType is replace (tableau.SelectionUpdateType.Replace), so these values replace + the marks that are currently selected.

    +
       worksheet.selectMarksByValueAsync([{
    +        fieldName: 'State',
    +        value: ['Texas', 'Washington', 'California']
    +    }], tableau.SelectionUpdateType.Replace );
    +
    +
  • Parameters

    + + +
    +

    Viz Extensions Methods

    +
    + +

    hoverTupleAsync

    +
      +
    • hoverTupleAsync(hoveredTuple: number, tooltip?: TooltipContext): Promise<void>
    • +
    +
      +
    • + +
      +
      +

      Method to execute hover actions and render tooltip for a given tuple representing a mark in the visualization. + If the tooltip parameter is included it will show the tooltip when the mark is hovered over. If not, no tooltip is shown.

      +
      +

      Passing in an invalid tuple id will not throw and will clear the tooltip. +

      +
      svg.on('mousemove', (mouseEvent) => {
      + const myHoveredTuple = 10;
      + tableau.extensions.worksheetContent.worksheet.hoverTupleAsync(myHoveredTuple, { tooltipAnchorPoint: { x: mouseEvent.pageX, y: mouseEvent.pageY } })
      +   .then(() => console.log('Done'))
      +   .catch((error) => console.log('Failed to hover because of: ', error));
      + });
      +
      +
      experimental
      +
      +
      +
      +

      Parameters

      + +

      Returns Promise<void>

      +

      Returns empty promise that resolves when the extension host has successfully been informed of the request and rejects on error

      +
    • +
    +
    +
    + +

    selectTuplesAsync

    + +
      +
    • + +
      +
      +

      Method to modify selection, execute select actions, and render tooltip for a given list of tuples representing a mark or marks in the visualization. + If the tooltip parameter is included it will show the tooltip when the mark or marks are selected. If not, no tooltip is shown.

      +
      +

      Passing in an invalid tuple id will not throw and will clear the tooltip. +

      +
      svg.on('click', (mouseEvent) => {
      +const myClickedTuples = [10];
      +const ctrlKeyPressed = !!mouseEvent.ctrlKey;
      +const selectOption = ctrlKeyPressed ? tableau.SelectOptions.Toggle : tableau.SelectOptions.Simple;
      +
      +tableau.extensions.worksheetContent.worksheet.selectTuplesAsync(myClickedTuples, selectOption, { tooltipAnchorPoint: { x: mouseEvent.pageX, y: mouseEvent.pageY } })
      +   .then(() => console.log('Done'))
      +   .catch((error) => console.log('Failed to select because of: ', error));
      +});
      +
      +
      experimental
      +
      +
      +
      +

      Parameters

      + +

      Returns Promise<void>

      +

      Returns empty promise that resolves when the extension host has successfully been informed of the request and rejects on error

    @@ -1327,6 +1500,12 @@

    Returns Promise getUnderlyingTablesAsync +
  • + getVisualSpecificationAsync +
  • +
  • + hoverTupleAsync +
  • removeAnnotationAsync
  • @@ -1336,6 +1515,9 @@

    Returns Promise selectMarksByValueAsync +
  • + selectTuplesAsync +
  • diff --git a/docs/interfaces/worksheetcontent.html b/docs/interfaces/worksheetcontent.html new file mode 100644 index 00000000..522623c6 --- /dev/null +++ b/docs/interfaces/worksheetcontent.html @@ -0,0 +1,223 @@ + + + + + + WorksheetContent | Tableau Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface WorksheetContent

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    The WorksheetContent namespace is the namespace associated with Viz Extensions. + The WorksheetContent namespace contains the Worksheet interface. Use the Worksheet Interface to + access worksheet objects and to add or remove event listeners.

    +
    +
    +
    beta
    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + WorksheetContent +
    • +
    +
    +
    +

    Index

    +
    +
    +
    +

    Properties

    + +
    +
    +
    +
    +
    +

    Properties

    +
    + +

    worksheet

    +
    worksheet: Worksheet
    + +
    +
    +
    returns
    +

    The worksheet object representing the Tableau + worksheet where the extension is running.

    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/modules/tableau.html b/docs/modules/tableau.html index 215060be..e1711016 100644 --- a/docs/modules/tableau.html +++ b/docs/modules/tableau.html @@ -3,7 +3,7 @@ - Tableau | Dashboard Extensions + Tableau | Tableau Extensions @@ -22,7 +22,7 @@
  • Preparing search index...
  • The search index is not available
  • - Dashboard Extensions + Tableau Extensions

    @@ -106,6 +106,7 @@

    Enumerations

  • PeriodType
  • QuickTableCalcType
  • ReplaySpeedType
  • +
  • SelectOptions
  • SelectionUpdateType
  • SheetType
  • SortDirection
  • @@ -147,7 +148,7 @@

    ZoneVisibilityType

    ZoneVisibilityType: DashboardObjectVisibilityType
    @@ -183,7 +184,7 @@

    Const ZoneVisibilityTyp
    ZoneVisibilityType: object
    @@ -283,6 +284,9 @@

    Const ZoneVisibilityTyp
  • ReplaySpeedType
  • +
  • + SelectOptions +
  • SelectionUpdateType
  • diff --git a/docs/trex_events.md b/docs/trex_events.md index b885626a..86e858f9 100644 --- a/docs/trex_events.md +++ b/docs/trex_events.md @@ -17,7 +17,7 @@ the method throws an exception. The following table shows the event types suppor | object | eventType | | ------ | ----- | -| Worksheet | `FilterChanged` , `MarkSelectionChanged` | +| Worksheet | `FilterChanged` , `MarkSelectionChanged`, `SummaryDataChanged` | | Parameter | `ParameterChanged` | | Settings | `SettingsChanged` | | Dashboard | `DashboardLayoutChanged` , `WorkbookFormattingChanged` | diff --git a/docs/trex_release-notes.md b/docs/trex_release-notes.md index 04a5d2d5..384f1563 100644 --- a/docs/trex_release-notes.md +++ b/docs/trex_release-notes.md @@ -6,6 +6,46 @@ layout: docs [All Releases](#all-releases) ---- +### Tableau Dashboard Extensions API version 1.11.0 + +*April 2024* + +* Tableau Dashboard Extensions API library: `tableau.extensions.1.11.0.js`
    (download or clone the Extensions API repository on [GitHub](https://github.com/tableau/extensions-api){:target="_blank"}.)
    + +* Certain features in this release are only available in Tableau 2024.1 or later. Download [Tableau Desktop](https://www.tableau.com/support/releases){:target="_blank"} or [Tableau Server](https://www.tableau.com/support/releases/server){:target="_blank"}. + +* To preview new features and test your extension with the latest version of Tableau in the Developer Sandbox, join the [Tableau Developer Program](http://www.tableau.com/developer){:target="_blank"} and request your own {{site.tol}} developer site. + +About this release: + +* Adds the `Environment.uniqueUserId` property. + +* Adds the `SummaryDataChanged` event type. + +* Adds the `Worksheet.getVisualSpecificationAsync` method. + +* Fixes a bug in the `getSelectedMarksAsync` method that would cause `formattedValue` to be incorrect in multi-pane scenarios. + +* Adds experimental features as part of Viz Extensions Pre-Release. See the blog post [Extend Your Visual Analytics with Tableau Viz Extensions](https://www.tableau.com/blog/visual-analytics-tableau-viz-extensions). + + The Viz Extensions API is currently under development. Tableau is working to offer the feature in general availability later in 2024. + + We encourage anyone interested in developing viz extensions to contact Wilson Po at [wpo@salesforce.com](mailto:wpo@salesforce.com). We’re running a program by invitation that focuses on the developer experience for those interested in exploring those tools. An active NDA must be in place to requests access to the preview at this time. + + Sign up to test Tableau Viz Extensions in the [Tableau Beta Preview](https://prerelease.tableau.com/welcome/), as part of the web authoring experience when you register for a Tableau Cloud Beta Site. + +---- +See also: [Known Issues]({{site.baseurl}}/docs/trex_known_issues.html) + +---- + +#### All Releases + +* TOC +{:toc} + +---- + ### Tableau Dashboard Extensions API version 1.10.0 *December 2022* @@ -34,18 +74,6 @@ For more information, see [Get Data from the View]({{site.baseurl}}/docs/trex_ge * Adds support for annotating marks with [Worksheet.annotateMarkAsync]({{site.baseurl}}/docs/interfaces/worksheet.html#annotatemarkasync), [Worksheet.getAnnotationsAsync]({{site.baseurl}}/docs/interfaces/worksheet.html#getannotationsasync), and [Worksheet.removeAnnotationAsync]({{site.baseurl}}/docs/interfaces/worksheet.html#removeannotationasync). See the code sample, [Annotation](https://github.com/tableau/extensions-api/tree/dev/Samples/Annotation) (on GitHub). - - ----- -See also: [Known Issues]({{site.baseurl}}/docs/trex_known_issues.html) - ----- - -#### All Releases - -* TOC -{:toc} - ---- ### Tableau Dashboard Extensions API version 1.9.0 diff --git a/lib/tableau.extensions.1.10.0-pre.29.min.js.map b/lib/previous/tableau.extensions.1.10.0-pre.29.min.js.map similarity index 100% rename from lib/tableau.extensions.1.10.0-pre.29.min.js.map rename to lib/previous/tableau.extensions.1.10.0-pre.29.min.js.map diff --git a/lib/tableau.extensions.1.10.0.js b/lib/previous/tableau.extensions.1.10.0.js similarity index 100% rename from lib/tableau.extensions.1.10.0.js rename to lib/previous/tableau.extensions.1.10.0.js diff --git a/lib/tableau.extensions.1.10.0.min.js b/lib/previous/tableau.extensions.1.10.0.min.js similarity index 100% rename from lib/tableau.extensions.1.10.0.min.js rename to lib/previous/tableau.extensions.1.10.0.min.js diff --git a/lib/tableau.extensions.1.11.0-pre.63.min.js.map b/lib/tableau.extensions.1.11.0-pre.63.min.js.map new file mode 100644 index 00000000..45112b2a --- /dev/null +++ b/lib/tableau.extensions.1.11.0-pre.63.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tableau.extensions.1.11.0-pre.63.min.js","mappings":"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","sources":["webpack://tableau/../../node_modules/core-js/es/array/find.js","webpack://tableau/../../node_modules/core-js/es/array/from.js","webpack://tableau/../../node_modules/core-js/es/map/index.js","webpack://tableau/../../node_modules/core-js/es/number/is-integer.js","webpack://tableau/../../node_modules/core-js/es/number/is-nan.js","webpack://tableau/../../node_modules/core-js/es/number/parse-float.js","webpack://tableau/../../node_modules/core-js/es/number/parse-int.js","webpack://tableau/../../node_modules/core-js/es/object/assign.js","webpack://tableau/../../node_modules/core-js/es/object/entries.js","webpack://tableau/../../node_modules/core-js/es/object/set-prototype-of.js","webpack://tableau/../../node_modules/core-js/es/promise/index.js","webpack://tableau/../../node_modules/core-js/internals/a-callable.js","webpack://tableau/../../node_modules/core-js/internals/a-constructor.js","webpack://tableau/../../node_modules/core-js/internals/a-possible-prototype.js","webpack://tableau/../../node_modules/core-js/internals/add-to-unscopables.js","webpack://tableau/../../node_modules/core-js/internals/an-instance.js","webpack://tableau/../../node_modules/core-js/internals/an-object.js","webpack://tableau/../../node_modules/core-js/internals/array-from.js","webpack://tableau/../../node_modules/core-js/internals/array-includes.js","webpack://tableau/../../node_modules/core-js/internals/array-iteration.js","webpack://tableau/../../node_modules/core-js/internals/array-slice.js","webpack://tableau/../../node_modules/core-js/internals/array-species-constructor.js","webpack://tableau/../../node_modules/core-js/internals/array-species-create.js","webpack://tableau/../../node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://tableau/../../node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://tableau/../../node_modules/core-js/internals/classof-raw.js","webpack://tableau/../../node_modules/core-js/internals/classof.js","webpack://tableau/../../node_modules/core-js/internals/clear-error-stack.js","webpack://tableau/../../node_modules/core-js/internals/collection-strong.js","webpack://tableau/../../node_modules/core-js/internals/collection.js","webpack://tableau/../../node_modules/core-js/internals/copy-constructor-properties.js","webpack://tableau/../../node_modules/core-js/internals/correct-prototype-getter.js","webpack://tableau/../../node_modules/core-js/internals/create-iterator-constructor.js","webpack://tableau/../../node_modules/core-js/internals/create-non-enumerable-property.js","webpack://tableau/../../node_modules/core-js/internals/create-property-descriptor.js","webpack://tableau/../../node_modules/core-js/internals/create-property.js","webpack://tableau/../../node_modules/core-js/internals/define-iterator.js","webpack://tableau/../../node_modules/core-js/internals/descriptors.js","webpack://tableau/../../node_modules/core-js/internals/document-create-element.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-browser.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-ios-pebble.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-ios.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-node.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-webos-webkit.js","webpack://tableau/../../node_modules/core-js/internals/engine-user-agent.js","webpack://tableau/../../node_modules/core-js/internals/engine-v8-version.js","webpack://tableau/../../node_modules/core-js/internals/entry-unbind.js","webpack://tableau/../../node_modules/core-js/internals/enum-bug-keys.js","webpack://tableau/../../node_modules/core-js/internals/error-stack-installable.js","webpack://tableau/../../node_modules/core-js/internals/export.js","webpack://tableau/../../node_modules/core-js/internals/fails.js","webpack://tableau/../../node_modules/core-js/internals/freezing.js","webpack://tableau/../../node_modules/core-js/internals/function-apply.js","webpack://tableau/../../node_modules/core-js/internals/function-bind-context.js","webpack://tableau/../../node_modules/core-js/internals/function-call.js","webpack://tableau/../../node_modules/core-js/internals/function-name.js","webpack://tableau/../../node_modules/core-js/internals/function-uncurry-this.js","webpack://tableau/../../node_modules/core-js/internals/get-built-in.js","webpack://tableau/../../node_modules/core-js/internals/get-iterator-method.js","webpack://tableau/../../node_modules/core-js/internals/get-iterator.js","webpack://tableau/../../node_modules/core-js/internals/get-method.js","webpack://tableau/../../node_modules/core-js/internals/global.js","webpack://tableau/../../node_modules/core-js/internals/has-own-property.js","webpack://tableau/../../node_modules/core-js/internals/hidden-keys.js","webpack://tableau/../../node_modules/core-js/internals/host-report-errors.js","webpack://tableau/../../node_modules/core-js/internals/html.js","webpack://tableau/../../node_modules/core-js/internals/ie8-dom-define.js","webpack://tableau/../../node_modules/core-js/internals/indexed-object.js","webpack://tableau/../../node_modules/core-js/internals/inherit-if-required.js","webpack://tableau/../../node_modules/core-js/internals/inspect-source.js","webpack://tableau/../../node_modules/core-js/internals/install-error-cause.js","webpack://tableau/../../node_modules/core-js/internals/internal-metadata.js","webpack://tableau/../../node_modules/core-js/internals/internal-state.js","webpack://tableau/../../node_modules/core-js/internals/is-array-iterator-method.js","webpack://tableau/../../node_modules/core-js/internals/is-array.js","webpack://tableau/../../node_modules/core-js/internals/is-callable.js","webpack://tableau/../../node_modules/core-js/internals/is-constructor.js","webpack://tableau/../../node_modules/core-js/internals/is-forced.js","webpack://tableau/../../node_modules/core-js/internals/is-integral-number.js","webpack://tableau/../../node_modules/core-js/internals/is-object.js","webpack://tableau/../../node_modules/core-js/internals/is-pure.js","webpack://tableau/../../node_modules/core-js/internals/is-symbol.js","webpack://tableau/../../node_modules/core-js/internals/iterate.js","webpack://tableau/../../node_modules/core-js/internals/iterator-close.js","webpack://tableau/../../node_modules/core-js/internals/iterators-core.js","webpack://tableau/../../node_modules/core-js/internals/iterators.js","webpack://tableau/../../node_modules/core-js/internals/length-of-array-like.js","webpack://tableau/../../node_modules/core-js/internals/microtask.js","webpack://tableau/../../node_modules/core-js/internals/native-promise-constructor.js","webpack://tableau/../../node_modules/core-js/internals/native-symbol.js","webpack://tableau/../../node_modules/core-js/internals/native-weak-map.js","webpack://tableau/../../node_modules/core-js/internals/new-promise-capability.js","webpack://tableau/../../node_modules/core-js/internals/normalize-string-argument.js","webpack://tableau/../../node_modules/core-js/internals/number-parse-float.js","webpack://tableau/../../node_modules/core-js/internals/number-parse-int.js","webpack://tableau/../../node_modules/core-js/internals/object-assign.js","webpack://tableau/../../node_modules/core-js/internals/object-create.js","webpack://tableau/../../node_modules/core-js/internals/object-define-properties.js","webpack://tableau/../../node_modules/core-js/internals/object-define-property.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-names.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://tableau/../../node_modules/core-js/internals/object-get-prototype-of.js","webpack://tableau/../../node_modules/core-js/internals/object-is-prototype-of.js","webpack://tableau/../../node_modules/core-js/internals/object-keys-internal.js","webpack://tableau/../../node_modules/core-js/internals/object-keys.js","webpack://tableau/../../node_modules/core-js/internals/object-property-is-enumerable.js","webpack://tableau/../../node_modules/core-js/internals/object-set-prototype-of.js","webpack://tableau/../../node_modules/core-js/internals/object-to-array.js","webpack://tableau/../../node_modules/core-js/internals/object-to-string.js","webpack://tableau/../../node_modules/core-js/internals/ordinary-to-primitive.js","webpack://tableau/../../node_modules/core-js/internals/own-keys.js","webpack://tableau/../../node_modules/core-js/internals/path.js","webpack://tableau/../../node_modules/core-js/internals/perform.js","webpack://tableau/../../node_modules/core-js/internals/promise-resolve.js","webpack://tableau/../../node_modules/core-js/internals/redefine-all.js","webpack://tableau/../../node_modules/core-js/internals/redefine.js","webpack://tableau/../../node_modules/core-js/internals/require-object-coercible.js","webpack://tableau/../../node_modules/core-js/internals/set-global.js","webpack://tableau/../../node_modules/core-js/internals/set-species.js","webpack://tableau/../../node_modules/core-js/internals/set-to-string-tag.js","webpack://tableau/../../node_modules/core-js/internals/shared-key.js","webpack://tableau/../../node_modules/core-js/internals/shared-store.js","webpack://tableau/../../node_modules/core-js/internals/shared.js","webpack://tableau/../../node_modules/core-js/internals/species-constructor.js","webpack://tableau/../../node_modules/core-js/internals/string-multibyte.js","webpack://tableau/../../node_modules/core-js/internals/string-trim.js","webpack://tableau/../../node_modules/core-js/internals/task.js","webpack://tableau/../../node_modules/core-js/internals/to-absolute-index.js","webpack://tableau/../../node_modules/core-js/internals/to-indexed-object.js","webpack://tableau/../../node_modules/core-js/internals/to-integer-or-infinity.js","webpack://tableau/../../node_modules/core-js/internals/to-length.js","webpack://tableau/../../node_modules/core-js/internals/to-object.js","webpack://tableau/../../node_modules/core-js/internals/to-primitive.js","webpack://tableau/../../node_modules/core-js/internals/to-property-key.js","webpack://tableau/../../node_modules/core-js/internals/to-string-tag-support.js","webpack://tableau/../../node_modules/core-js/internals/to-string.js","webpack://tableau/../../node_modules/core-js/internals/try-to-string.js","webpack://tableau/../../node_modules/core-js/internals/uid.js","webpack://tableau/../../node_modules/core-js/internals/use-symbol-as-uid.js","webpack://tableau/../../node_modules/core-js/internals/well-known-symbol.js","webpack://tableau/../../node_modules/core-js/internals/whitespaces.js","webpack://tableau/../../node_modules/core-js/modules/es.aggregate-error.js","webpack://tableau/../../node_modules/core-js/modules/es.array.find.js","webpack://tableau/../../node_modules/core-js/modules/es.array.from.js","webpack://tableau/../../node_modules/core-js/modules/es.array.iterator.js","webpack://tableau/../../node_modules/core-js/modules/es.map.js","webpack://tableau/../../node_modules/core-js/modules/es.number.is-integer.js","webpack://tableau/../../node_modules/core-js/modules/es.number.is-nan.js","webpack://tableau/../../node_modules/core-js/modules/es.number.parse-float.js","webpack://tableau/../../node_modules/core-js/modules/es.number.parse-int.js","webpack://tableau/../../node_modules/core-js/modules/es.object.assign.js","webpack://tableau/../../node_modules/core-js/modules/es.object.entries.js","webpack://tableau/../../node_modules/core-js/modules/es.object.set-prototype-of.js","webpack://tableau/../../node_modules/core-js/modules/es.object.to-string.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.all-settled.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.any.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.finally.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.js","webpack://tableau/../../node_modules/core-js/modules/es.string.iterator.js","webpack://tableau/../../node_modules/guid/guid.js","webpack://tableau/./lib/src/ExtensionsApi/Events/DashboardLayoutChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/FilterChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/MarksSelectedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/ParameterChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/SummaryDataChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/TableauEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/TableauSheetEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/ConnectedServer.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/SettingsImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/UIImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Dashboard.js","webpack://tableau/./lib/src/ExtensionsApi/Models/DashboardObject.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Parameter.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Sheet.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Workbook.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Worksheet.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/DashboardContent.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/Environment.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/Extensions.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/Settings.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/UI.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/WorksheetContent.js","webpack://tableau/./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js","webpack://tableau/./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js","webpack://tableau/../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js","webpack://tableau/../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/PulseInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js","webpack://tableau/../api-external-contract-js/lib/src/SharedApiExternalContract.js","webpack://tableau/../api-internal-contract-js/lib/src/JsApiInternalContract.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/DataTypeConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Enums.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Notifications.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Parameters.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Verbs.js","webpack://tableau/../api-internal-contract-js/lib/src/interface/AskDataInterface.js","webpack://tableau/../api-internal-contract-js/lib/src/interface/PulseInterface.js","webpack://tableau/../api-internal-contract-js/lib/src/interface/VqlInterface.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/VersionTranslations.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js","webpack://tableau/../api-shared-js/lib/src/ApiShared.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/ApiVersion.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/ConnectionSummary.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/DataSource.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/EventListenerManager.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Field.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/LogicalTable.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/FilterModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Point.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/GetDataService.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ExportServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/VisualModelServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/TableSummary.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/TableauError.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/Deferred.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/ExportHelpers.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/Param.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/VersionNumber.js","webpack://tableau/../api-shared-js/lib/src/VersionedExternalApiDispatcher.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/rng.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/regex.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/v1.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/parse.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/v35.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/md5.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/v3.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/v4.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/sha1.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/v5.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/nil.js","webpack://tableau/../api-shared-js/node_modules/uuid/dist/esm-browser/version.js","webpack://tableau/webpack/bootstrap","webpack://tableau/webpack/runtime/define property getters","webpack://tableau/webpack/runtime/global","webpack://tableau/webpack/runtime/hasOwnProperty shorthand","webpack://tableau/webpack/runtime/make namespace object","webpack://tableau/./lib/src/ExtensionsApi.js"],"sourcesContent":["require('../../modules/es.array.find');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'find');\n","require('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","require('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","require('../../modules/es.number.is-integer');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isInteger;\n","require('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","require('../../modules/es.number.parse-float');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.parseFloat;\n","require('../../modules/es.number.parse-int');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.parseInt;\n","require('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","require('../../modules/es.object.set-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.setPrototypeOf;\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar arraySlice = require('../internals/array-slice');\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (typeof stack != 'string') return stack;\n if (IS_V8_OR_CHAKRA_STACK) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n } return stack;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","module.exports = typeof window == 'object';\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar n$ParseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / n$ParseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { n$ParseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = n$ParseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;\n} : n$ParseFloat;\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/clear-error-stack');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n var options = arguments.length > 2 ? arguments[2] : undefined;\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n","var $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number != number;\n }\n});\n","var $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n// eslint-disable-next-line es/no-number-parsefloat -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {\n parseFloat: parseFloat\n});\n","var $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n// eslint-disable-next-line es/no-number-parseint -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {\n parseInt: parseInt\n});\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromise.prototype['finally'] !== method) {\n redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reactions = state.reactions;\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n reactions[reactions.length] = reaction;\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","(function () {\n var validator = new RegExp(\"^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$\", \"i\");\n\n function gen(count) {\n var out = \"\";\n for (var i=0; i 0) {\n stylesheet.deleteRule(stylesheet.cssRules.length - 1);\n }\n formattingModel.formattingSheets.map(function (currentFormattingSheet) {\n _this.applyFormattingSheetToStyleSheet(currentFormattingSheet, stylesheet);\n });\n };\n ExtensionsImpl.prototype.applyFormattingSheetToStyleSheet = function (currentFormattingSheet, stylesheet) {\n var styleInfo = '';\n var cssProperties = currentFormattingSheet.cssProperties;\n if (cssProperties.fontFamily) {\n styleInfo += 'font-family: ' + cssProperties.fontFamily.toString() + '; ';\n }\n if (cssProperties.fontSize) {\n styleInfo += 'font-size: ' + cssProperties.fontSize.toString() + '; ';\n }\n if (cssProperties.fontWeight) {\n styleInfo += 'font-weight: ' + cssProperties.fontWeight.toString() + '; ';\n }\n if (cssProperties.fontStyle) {\n styleInfo += 'font-style: ' + cssProperties.fontStyle.toString() + '; ';\n }\n if (cssProperties.textDecoration) {\n styleInfo += 'text-decoration: ' + cssProperties.textDecoration.toString() + '; ';\n }\n if (cssProperties.color) {\n styleInfo += 'color: ' + cssProperties.color + '; ';\n }\n var selector = '.' + currentFormattingSheet.classNameKey;\n var rule = selector + ' { ' + styleInfo + ' }';\n stylesheet.insertRule(rule, stylesheet.cssRules.length);\n };\n ExtensionsImpl.prototype.initializeWorkbookFormattingChangedEventCallback = function (dispatcher) {\n var _this = this;\n var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n // Unregister function not used since these notifications should be\n // observed for the full lifetime of the extension.\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) {\n if (eventFormatting) {\n _this.initializeTableauFonts(dispatcher, eventFormatting);\n _this.applyAllFormatting(eventFormatting);\n }\n });\n };\n ExtensionsImpl.prototype.initializeTableauFonts = function (dispatcher, workbookFormatting) {\n var _a;\n var _this = this;\n var fontNames = __spreadArrays(BentonSansFontNameConstants_1.SupportedBentonSansFontFaces, TableauBookFontNameConstants_1.SupportedTableauFontFaces);\n workbookFormatting.formattingSheets.forEach(function (formattingSheet) {\n if (formattingSheet.cssProperties.fontFamily) {\n fontNames.push(formattingSheet.cssProperties.fontFamily);\n }\n });\n if (fontNames.length > 0) {\n var parameters = (_a = {}, _a[api_internal_contract_js_1.ParameterId.FontNameListItems] = fontNames, _a);\n dispatcher\n .execute(api_internal_contract_js_1.VerbId.GetFonts, parameters)\n .then(function (response) {\n _this.loadFonts(response.result);\n })\n .catch();\n }\n };\n ExtensionsImpl.prototype.loadFonts = function (fonts) {\n var _this = this;\n fonts.forEach(function (fontNameAndInfo) {\n if (TableauBookFontNameConstants_1.SupportedTableauFontFaces.includes(fontNameAndInfo.fontName)) {\n _this.loadTableauFonts(fontNameAndInfo);\n }\n else if (BentonSansFontNameConstants_1.SupportedBentonSansFontFaces.includes(fontNameAndInfo.fontName)) {\n _this.loadBentonSansFonts(fontNameAndInfo);\n }\n else {\n document.fonts.add(new FontFace(fontNameAndInfo.fontName, fontNameAndInfo.fontBinaryInfo));\n }\n });\n };\n ExtensionsImpl.prototype.initializeDashboardContent = function (info, sheetPath) {\n // sheets are always active for Extensions\n var sheetInfoImpl = new api_shared_js_1.SheetInfoImpl(info.name, api_external_contract_js_1.SheetType.Dashboard, { width: info.size.w, height: info.size.h }, undefined, true);\n var dashboardImpl = new api_shared_js_1.DashboardImpl(sheetInfoImpl, info.zones, sheetPath, ServiceRegistryUtil_1.ExtensionsRegistryId, null, info.activeDashboardObjectId);\n var dashboard = new Dashboard_1.Dashboard(dashboardImpl);\n return new DashboardContent_1.DashboardContent(dashboard);\n };\n ExtensionsImpl.prototype.initializeWorksheetContent = function (info) {\n var sheetInfoImpl = new api_shared_js_1.SheetInfoImpl(info.visualId.worksheet, api_external_contract_js_1.SheetType.Worksheet, { width: info.size.w, height: info.size.h }, undefined, // index property is embedding specific\n true);\n var worksheetImpl = new api_shared_js_1.WorksheetImpl(sheetInfoImpl, ServiceRegistryUtil_1.ExtensionsRegistryId, info.visualId, null, // parentDashboard is always null for worksheet in WorksheetContent\n null);\n var worksheet = new Worksheet_1.Worksheet(worksheetImpl);\n return new WorksheetContent_1.WorksheetContent(worksheet);\n };\n ExtensionsImpl.prototype.initializeSettings = function (settingsInfo) {\n var settingsImpl = new SettingsImpl_1.SettingsImpl(settingsInfo);\n return new Settings_1.Settings(settingsImpl);\n };\n ExtensionsImpl.prototype.initializeContextMenuCallbacks = function (contextMenuFunctions) {\n var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n // Unregister function not used since these notifications should be\n // observed for the full lifetime of the extension.\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ContextMenuClick, function () {\n // Let through any context menu event, these are already filtered on api-core\n // based on the extension locator.\n return true;\n }, function (event) {\n // Execute the function associated with this context menu ID\n if (contextMenuFunctions) {\n if (!contextMenuFunctions[event.id]) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Received unexpected context menu Id from event: \" + event.id);\n }\n contextMenuFunctions[event.id]();\n }\n });\n };\n ExtensionsImpl.prototype.loadTableauFonts = function (fontNameAndInfo) {\n switch (fontNameAndInfo.fontName) {\n case TableauBookFontNameConstants_1.TableauBookFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauLightFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauRegularFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauSemiBoldFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauBoldFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauMediumFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n default:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"'attempted to load unsupported font: \" + fontNameAndInfo.fontName + \".'\");\n }\n };\n ExtensionsImpl.prototype.loadBentonSansFonts = function (fontNameAndInfo) {\n switch (fontNameAndInfo.fontName) {\n case BentonSansFontNameConstants_1.BentonSansBookFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansLightFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansMediumFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansSemiDemiFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansBookItalicFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansSemiDemiItalicFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' }));\n break;\n default:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"'attempted to load unsupported font: \" + fontNameAndInfo.fontName + \".'\");\n }\n };\n return ExtensionsImpl;\n}());\nexports.ExtensionsImpl = ExtensionsImpl;\n//# sourceMappingURL=ExtensionsImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\n/**\n * LegacyInternalApiDispatcherHolder has been moved (and renamed) from api-internal-contract.\n * It supports running a newer external library against a pre 2019.3 desktop.\n * Starting in 2019.3, we have a merged bootstrap style for both desktop and server.\n * In addition, the alpha checking that is happening here is not necessary in external-api-js\n * after 2019.3 because that checking happens in api-platform-js (ApiDispatcherTest.ts)\n * TFSID: 1091561 tracks an improvement to this system to make it less complex and tie it directly to\n * tableau beta release versions.\n * @deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nvar LegacyInternalApiDispatcherHolder;\n(function (LegacyInternalApiDispatcherHolder) {\n /**\n * @param options\n */\n function getDesktopDispatcherPromise(options) {\n var _a;\n if ((!options || typeof options.isAlpha === 'undefined') && !window.__warningIssued) {\n // tslint:disable-next-line:no-console\n console.warn('This is a beta version of the Extensions API. Please upgrade to an official release.');\n window.__warningIssued = true;\n }\n else if (((_a = options) === null || _a === void 0 ? void 0 : _a.isAlpha) && window.__platformIsOfficialRelease) {\n window.__tableauDesktopDispatcher\n .then(function (dispatcherFactory) {\n var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION);\n dispatcher.execute(api_internal_contract_js_1.VerbId.BlockExtension, {}).catch();\n })\n .catch();\n }\n // this will be undefined if promise is rejected or throws\n return window.__tableauDesktopDispatcher;\n }\n LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise = getDesktopDispatcherPromise;\n /**\n * @param options\n */\n function hasDesktopApiDispatcherPromise(options) {\n return !!getDesktopDispatcherPromise(options);\n }\n LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise = hasDesktopApiDispatcherPromise;\n})(LegacyInternalApiDispatcherHolder = exports.LegacyInternalApiDispatcherHolder || (exports.LegacyInternalApiDispatcherHolder = {}));\n//# sourceMappingURL=LegacyInternalApiDispatcherHolder.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar TableauEvent_1 = require(\"../Events/TableauEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar SettingsChangedEvent = /** @class */ (function (_super) {\n __extends(SettingsChangedEvent, _super);\n function SettingsChangedEvent(_newSettings) {\n var _this = _super.call(this, Contract.TableauEventType.SettingsChanged) || this;\n _this._newSettings = _newSettings;\n return _this;\n }\n Object.defineProperty(SettingsChangedEvent.prototype, \"newSettings\", {\n get: function () {\n return this._newSettings;\n },\n enumerable: true,\n configurable: true\n });\n return SettingsChangedEvent;\n}(TableauEvent_1.TableauEvent));\nvar SettingsImpl = /** @class */ (function () {\n function SettingsImpl(settingsInfo) {\n // Since promises can't be introspected for state, keep a variable that\n // indicates a save is in progress, so that set/erase can't be called during a save.\n this._saveInProgress = false;\n this.initializeSettings(settingsInfo);\n }\n SettingsImpl.prototype.erase = function (key) {\n api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key');\n // Only make a modification if we have the key already\n if (this._currentSettings[key]) {\n this.verifySettingsAreUnlocked();\n delete this._currentSettings[key];\n this._isModified = true;\n }\n };\n SettingsImpl.prototype.get = function (key) {\n api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key');\n return this._currentSettings[key];\n };\n SettingsImpl.prototype.getAll = function () {\n // Returns a mutable copy of the settings\n return Object.assign({}, this._currentSettings);\n };\n Object.defineProperty(SettingsImpl.prototype, \"isModified\", {\n get: function () {\n return this._isModified;\n },\n enumerable: true,\n configurable: true\n });\n SettingsImpl.prototype.saveAsync = function () {\n var _this = this;\n this.verifySettingsAreUnlocked();\n // Just resolve immediately if settings are unchanged\n if (!this._isModified) {\n return Promise.resolve(this._currentSettings);\n }\n this._saveInProgress = true;\n // Use the settings service to save settings to twb\n var settingsService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"SettingsService\" /* SettingsService */);\n return settingsService.saveSettingsAsync(this._currentSettings).then(function (newSettings) {\n _this._saveInProgress = false;\n _this._isModified = false;\n if (_this._currentSettings === undefined) {\n _this._currentSettings = newSettings;\n }\n else {\n Object.assign(_this._currentSettings, newSettings);\n }\n return newSettings;\n }, function (reason) {\n _this._saveInProgress = false;\n return Promise.reject(reason);\n });\n };\n SettingsImpl.prototype.set = function (key, value) {\n api_shared_js_1.ErrorHelpers.verifyStringParameter(key, 'key'); // Key shouldn't be an empty string.\n api_shared_js_1.ErrorHelpers.verifyParameter(value, 'value'); // Empty string value is allowed.\n this.verifySettingsAreUnlocked();\n this._currentSettings[key] = value;\n this._isModified = true;\n };\n /**\n * Initializes all events relevant to settings object. This is only a settingsUpdate event currently.\n *\n * @returns {Array} Collection of event managers to pass to an EventListenerManager.\n */\n SettingsImpl.prototype.initializeEvents = function () {\n var _this = this;\n var results = new Array();\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return\n return results;\n }\n var settingsChangedEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.SettingsChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SettingsChanged, function () { return true; }, function (event) {\n _this._currentSettings = event.newSettings;\n settingsChangedEvent.triggerEvent(function () { return new SettingsChangedEvent(event.newSettings); });\n });\n results.push(settingsChangedEvent);\n return results;\n };\n SettingsImpl.prototype.initializeSettings = function (settingsInfo) {\n api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo, 'settingsInfo');\n api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo.settingsValues, 'settingsInfo.SettingsValues');\n this._currentSettings = settingsInfo.settingsValues;\n // Reset the isModified flag\n this._isModified = false;\n };\n /**\n * This helper should be called before any local update to this.currentSettings.\n * Checks if a current save call is still in progress and throws an error if so.\n */\n SettingsImpl.prototype.verifySettingsAreUnlocked = function () {\n if (this._saveInProgress) {\n throw new api_shared_js_1.TableauError(Contract.ErrorCodes.SettingSaveInProgress, SettingsImpl.ASYNC_SAVE_IN_PROGRESS);\n }\n };\n SettingsImpl.ASYNC_SAVE_IN_PROGRESS = 'Async Save is in progress, updating settings is not allowed.';\n return SettingsImpl;\n}());\nexports.SettingsImpl = SettingsImpl;\n//# sourceMappingURL=SettingsImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableauBookFontFamilyName = 'Tableau Book';\nexports.TableauLightFontFamilyName = 'Tableau Light';\nexports.TableauRegularFontFamilyName = 'Tableau Regular';\nexports.TableauMediumFontFamilyName = 'Tableau Medium';\nexports.TableauSemiboldFontFamilyName = 'Tableau Semibold';\nexports.TableauBoldFontFamilyName = 'Tableau Bold';\nexports.TableauBookFontFaceName = 'Tableau Book';\nexports.TableauBoldFontFaceName = 'Tableau Bold';\nexports.TableauLightFontFaceName = 'Tableau Light';\nexports.TableauMediumFontFaceName = 'Tableau Medium';\nexports.TableauRegularFontFaceName = 'Tableau Regular';\nexports.TableauSemiBoldFontFaceName = 'Tableau Semi Bold';\nexports.SupportedTableauFontFaces = [\n exports.TableauBookFontFaceName,\n exports.TableauBoldFontFaceName,\n exports.TableauLightFontFaceName,\n exports.TableauMediumFontFaceName,\n exports.TableauRegularFontFaceName,\n exports.TableauSemiBoldFontFaceName,\n];\n//# sourceMappingURL=TableauBookFontNameConstants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar UIImpl = /** @class */ (function () {\n function UIImpl() {\n }\n UIImpl.prototype.displayDialogAsync = function (url, payload, options) {\n var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"UIService\" /* UIService */);\n var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n return new Promise(function (resolve, reject) {\n uiService\n .displayDialogAsync(url, payload || '', options)\n .then(function () {\n var unregisterFn = notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ExtensionDialogUpdate, function () {\n // Let through any dialog update event\n return true;\n }, function (event) {\n if (event.isCloseEvent) {\n if (event.closePayload === undefined) {\n throw new api_shared_js_1.TableauError(Contract.ErrorCodes.InternalError, 'closePayload is undefined');\n }\n resolve(event.closePayload);\n }\n else {\n reject(new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogClosedByUser, 'Extension dialog closed by user.'));\n }\n unregisterFn();\n });\n })\n .catch(function (error) {\n reject(error);\n });\n });\n };\n UIImpl.prototype.closeDialog = function (payload) {\n var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"UIService\" /* UIService */);\n uiService.closeDialog(payload);\n };\n return UIImpl;\n}());\nexports.UIImpl = UIImpl;\n//# sourceMappingURL=UIImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar DashboardLayoutChangedEvent_1 = require(\"../Events/DashboardLayoutChangedEvent\");\nvar WorkbookFormattingChangedEvent_1 = require(\"../Events/WorkbookFormattingChangedEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar DashboardObject_1 = require(\"./DashboardObject\");\nvar Sheet_1 = require(\"./Sheet\");\nvar Worksheet_1 = require(\"./Worksheet\");\nvar Dashboard = /** @class */ (function (_super) {\n __extends(Dashboard, _super);\n function Dashboard(_dashboardImpl) {\n var _this = _super.call(this, _dashboardImpl) || this;\n _this._dashboardImpl = _dashboardImpl;\n _dashboardImpl.initializeWithPublicInterfaces();\n _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Object.defineProperty(Dashboard.prototype, \"worksheets\", {\n get: function () {\n return this._dashboardImpl.worksheetsImpl.map(function (worksheetImpl) {\n return new Worksheet_1.Worksheet(worksheetImpl);\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dashboard.prototype, \"objects\", {\n get: function () {\n return this._dashboardImpl.objects.map(function (dashboardObjectImpl) {\n return new DashboardObject_1.DashboardObject(dashboardObjectImpl);\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dashboard.prototype, \"activeDashboardObjectId\", {\n get: function () {\n return this._dashboardImpl.activeDashboardObjectId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dashboard.prototype, \"activeDashboardName\", {\n get: function () {\n return this._dashboardImpl.activeDashboardName;\n },\n enumerable: true,\n configurable: true\n });\n Dashboard.prototype.setZoneVisibilityAsync = function (zoneVisibilityMap) {\n return this._dashboardImpl.setDashboardObjectVisibilityAsync(zoneVisibilityMap);\n };\n Dashboard.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) {\n return this._dashboardImpl.setDashboardObjectVisibilityAsync(dashboardObjectVisibilityMap);\n };\n Dashboard.prototype.getDashboardObjectById = function (dashboardObjectId) {\n var zone = this._dashboardImpl.getDashboardObjectById(dashboardObjectId);\n return zone && new DashboardObject_1.DashboardObject(zone);\n };\n Dashboard.prototype.initializeEvents = function () {\n var _this = this;\n var results = new Array();\n // Initializing events and registering notification service\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return (allows unit testing without NotificationService mock)\n return results;\n }\n var dashboardLayoutChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.DashboardLayoutChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.DashboardLayoutChanged, function () { return true; }, function (event) {\n var dashboardObjectChanges = _this._dashboardImpl.updateZones(event.zones, event.activeZoneId, event.activeDashboardName);\n dashboardLayoutChangedEvent.triggerEvent(function () { return new DashboardLayoutChangedEvent_1.DashboardLayoutChangedEvent(dashboardObjectChanges); });\n });\n results.push(dashboardLayoutChangedEvent);\n var workbookFormattingChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.WorkbookFormattingChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) {\n workbookFormattingChangedEvent.triggerEvent(function () { return new WorkbookFormattingChangedEvent_1.WorkbookFormattingChangedEvent(eventFormatting); });\n });\n results.push(workbookFormattingChangedEvent);\n return results;\n };\n Dashboard.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) {\n return this._dashboardImpl.moveAndResizeDashboardObjectsAsync(dashboardObjectPositionAndSizeUpdateArray);\n };\n Dashboard.prototype.replayAnimationAsync = function (replaySpeed) {\n return this._dashboardImpl.replayAnimationAsync(replaySpeed);\n };\n Dashboard.prototype.getFiltersAsync = function () {\n return this._dashboardImpl.getFiltersAsync();\n };\n Dashboard.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n return this._dashboardImpl.applyFilterAsync(fieldName, values, updateType, options);\n };\n return Dashboard;\n}(Sheet_1.Sheet));\nexports.Dashboard = Dashboard;\n//# sourceMappingURL=Dashboard.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dashboard_1 = require(\"./Dashboard\");\nvar Worksheet_1 = require(\"./Worksheet\");\n/**\n * Implementation of the dashboard objects - the zones in a dashboard.\n */\nvar DashboardObject = /** @class */ (function () {\n function DashboardObject(_dashboardObjectImpl) {\n this._dashboardObjectImpl = _dashboardObjectImpl;\n }\n Object.defineProperty(DashboardObject.prototype, \"dashboard\", {\n get: function () {\n return new Dashboard_1.Dashboard(this._dashboardObjectImpl.dashboardImpl);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"type\", {\n get: function () {\n return this._dashboardObjectImpl.type;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"position\", {\n get: function () {\n return this._dashboardObjectImpl.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"size\", {\n get: function () {\n return this._dashboardObjectImpl.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"worksheet\", {\n get: function () {\n if (this._dashboardObjectImpl.worksheetImpl) {\n return new Worksheet_1.Worksheet(this._dashboardObjectImpl.worksheetImpl);\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"name\", {\n get: function () {\n return this._dashboardObjectImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"isFloating\", {\n get: function () {\n return this._dashboardObjectImpl.isFloating;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"isVisible\", {\n get: function () {\n return this._dashboardObjectImpl.isVisible;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"id\", {\n get: function () {\n return this._dashboardObjectImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardObject;\n}());\nexports.DashboardObject = DashboardObject;\n//# sourceMappingURL=DashboardObject.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ParameterChangedEvent_1 = require(\"../Events/ParameterChangedEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\n/**\n * Implementation of the Parameter contract. Calls down to the impl\n * class for almost all of the work it does.\n */\nvar Parameter = /** @class */ (function (_super) {\n __extends(Parameter, _super);\n function Parameter(parameterImpl, sheet) {\n var _this = _super.call(this) || this;\n _this.parameterImpl = parameterImpl;\n // Initialize our event handling for this class\n _this.initializeEvents(sheet).forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Object.defineProperty(Parameter.prototype, \"name\", {\n get: function () {\n return this.parameterImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"currentValue\", {\n get: function () {\n return this.parameterImpl.currentValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"dataType\", {\n get: function () {\n return this.parameterImpl.dataType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"allowableValues\", {\n get: function () {\n return this.parameterImpl.allowableValues;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"id\", {\n get: function () {\n return this.parameterImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n Parameter.prototype.changeValueAsync = function (newValue) {\n return this.parameterImpl.changeValueAsync(newValue);\n };\n /**\n * Helper method which goes through and registers each event type this impl knows about\n * with the NotificationService. It returns an array of SingleEventManager objects which\n * can then be passed to an EventListenerManager to handle user registration / unregistration.\n *\n * @param sheet The sheet object which will be included with the event notifications\n * @returns {Array} Collection of event managers to pass to an EventListenerManager\n */\n Parameter.prototype.initializeEvents = function (sheet) {\n var _this = this;\n api_shared_js_1.ErrorHelpers.verifyInternalValue(sheet, 'sheet');\n var results = new Array();\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return\n return results;\n }\n // Initialize all of the event managers we'll need (one for each event type)\n var parameterEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.ParameterChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ParameterChanged, function (model) {\n var fieldName = model;\n return fieldName === _this.parameterImpl.id;\n }, function (fieldName) {\n parameterEvent.triggerEvent(function () { return new ParameterChangedEvent_1.ParameterChangedEvent(fieldName, sheet); });\n });\n results.push(parameterEvent);\n return results;\n };\n return Parameter;\n}(api_shared_js_1.EventListenerManager));\nexports.Parameter = Parameter;\n//# sourceMappingURL=Parameter.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar Parameter_1 = require(\"./Parameter\");\nvar Sheet = /** @class */ (function (_super) {\n __extends(Sheet, _super);\n function Sheet(_sheetImpl) {\n var _this = _super.call(this) || this;\n _this._sheetImpl = _sheetImpl;\n return _this;\n }\n Object.defineProperty(Sheet.prototype, \"name\", {\n get: function () {\n return this._sheetImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sheet.prototype, \"sheetType\", {\n get: function () {\n return this._sheetImpl.sheetType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sheet.prototype, \"size\", {\n get: function () {\n if (this.isValidSize(this._sheetImpl.size)) {\n return this._sheetImpl.size;\n }\n throw new api_shared_js_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, 'Size not implemented');\n },\n enumerable: true,\n configurable: true\n });\n Sheet.prototype.isValidSize = function (size) {\n var testSize = size;\n if (testSize.width !== undefined && testSize.height !== undefined) {\n return true;\n }\n return false;\n };\n Sheet.prototype.findParameterAsync = function (parameterName) {\n var _this = this;\n return this._sheetImpl.findParameterAsync(parameterName).then(function (parameterImpl) {\n if (parameterImpl) {\n return new Promise(function (resolve) { return resolve(new Parameter_1.Parameter(parameterImpl, _this)); });\n }\n else {\n return new Promise(function (resolve) { return resolve(undefined); });\n }\n });\n };\n Sheet.prototype.getParametersAsync = function () {\n var _this = this;\n return this._sheetImpl.getParametersAsync().then(function (parametersImpl) {\n return parametersImpl.map(function (parameterImpl) {\n return new Parameter_1.Parameter(parameterImpl, _this);\n });\n });\n };\n return Sheet;\n}(api_shared_js_1.EventListenerManager));\nexports.Sheet = Sheet;\n//# sourceMappingURL=Sheet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Workbook = /** @class */ (function () {\n function Workbook(_workbookImpl) {\n this._workbookImpl = _workbookImpl;\n }\n Workbook.prototype.getAllDataSourcesAsync = function () {\n return this._workbookImpl.getAllDataSourcesAsync();\n };\n return Workbook;\n}());\nexports.Workbook = Workbook;\n//# sourceMappingURL=Workbook.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar FilterChangedEvent_1 = require(\"../Events/FilterChangedEvent\");\nvar MarksSelectedEvent_1 = require(\"../Events/MarksSelectedEvent\");\nvar SummaryDataChangedEvent_1 = require(\"../Events/SummaryDataChangedEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar Dashboard_1 = require(\"./Dashboard\");\nvar Sheet_1 = require(\"./Sheet\");\nvar Worksheet = /** @class */ (function (_super) {\n __extends(Worksheet, _super);\n function Worksheet(_worksheetImpl) {\n var _this = _super.call(this, _worksheetImpl) || this;\n _this._worksheetImpl = _worksheetImpl;\n // Call to initialize events and then call down to the event listener manager to handle things\n _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Object.defineProperty(Worksheet.prototype, \"parentDashboard\", {\n get: function () {\n // This should never happen for Extensions if the DashboardImpls are created correctly\n if (this._worksheetImpl.parentDashboard == null) {\n throw new api_shared_js_1.TableauError(Contract.SharedErrorCodes.ImplementationError, \"Parent dashboard not implemented\");\n }\n return new Dashboard_1.Dashboard(this._worksheetImpl.parentDashboard);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Helper method which goes through and registers each event type this impl knows about\n * with the NotificationService. It returns an array of SingleEventManager objects which\n * can then be passed to an EventListenerManager to handle user registration / unregistration.\n *\n * @param {Worksheet} worksheet The worksheet object which will be included with the event notifications\n * @returns {Array} Collection of event managers to pass to an EventListenerManager\n */\n Worksheet.prototype.initializeEvents = function () {\n var _this = this;\n var results = new Array();\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return\n return results;\n }\n // Initialize all of the event managers we'll need (one for each event type)\n var marksEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.MarkSelectionChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SelectedMarksChanged, function (model) {\n var visualId = model;\n return _this.visualIdsAreEqual(visualId, _this._worksheetImpl.visualId);\n }, function () { return marksEvent.triggerEvent(function () { return new MarksSelectedEvent_1.MarksSelectedEvent(_this); }); });\n var filterEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.FilterChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.FilterChanged, function (model) {\n var filterEventResponse = model;\n return _this._worksheetImpl.visualId.worksheet === filterEventResponse.visualId.worksheet;\n }, function (event) {\n filterEvent.triggerEvent(function () { return new FilterChangedEvent_1.FilterChangedEvent(_this, event.fieldName, event.fieldId); });\n });\n var summaryDataEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.SummaryDataChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SummaryDataChanged, function (model) {\n var summaryDataEventResponse = model;\n return _this._worksheetImpl.visualId.worksheet === summaryDataEventResponse.visualId.worksheet;\n }, function (event) {\n summaryDataEvent.triggerEvent(function () { return new SummaryDataChangedEvent_1.SummaryDataChangedEvent(_this); });\n });\n results.push(marksEvent);\n results.push(filterEvent);\n results.push(summaryDataEvent);\n return results;\n };\n Worksheet.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n return this._worksheetImpl.applyFilterAsync(fieldName, values, updateType, options);\n };\n Worksheet.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) {\n return this._worksheetImpl.applyRangeFilterAsync(fieldName, filterOptions);\n };\n Worksheet.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) {\n return this._worksheetImpl.applyHierarchicalFilterAsync(fieldName, values, updateType, options);\n };\n Worksheet.prototype.applyRelativeDateFilterAsync = function (fieldName, options) {\n return this._worksheetImpl.applyRelativeDateFilterAsync(fieldName, options);\n };\n Worksheet.prototype.clearFilterAsync = function (fieldName) {\n return this._worksheetImpl.clearFilterAsync(fieldName);\n };\n Worksheet.prototype.getDataSourcesAsync = function () {\n return this._worksheetImpl.getDataSourcesAsync();\n };\n Worksheet.prototype.getFiltersAsync = function () {\n return this._worksheetImpl.getFiltersAsync();\n };\n Worksheet.prototype.getSelectedMarksAsync = function () {\n return this._worksheetImpl.getSelectedMarksAsync();\n };\n Worksheet.prototype.getHighlightedMarksAsync = function () {\n return this._worksheetImpl.getHighlightedMarksAsync();\n };\n Worksheet.prototype.getSummaryDataAsync = function (options) {\n return this._worksheetImpl.getSummaryDataAsync(options);\n };\n Worksheet.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) {\n return this._worksheetImpl.getSummaryDataReaderAsync(pageRowCount, options);\n };\n Worksheet.prototype.getSummaryColumnsInfoAsync = function () {\n return this._worksheetImpl.getSummaryColumnsInfoAsync();\n };\n Worksheet.prototype.getUnderlyingDataAsync = function (options) {\n console.warn('Worksheet.getUnderlyingDataAsync is deprecated. Please use ' +\n 'Worksheet.getUnderlyingTablesAsync and Worksheet.getUnderlyingTableDataAsync');\n return this._worksheetImpl.getUnderlyingDataAsync(options);\n };\n Worksheet.prototype.getUnderlyingTablesAsync = function () {\n return this._worksheetImpl.getUnderlyingTablesAsync();\n };\n Worksheet.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) {\n return this._worksheetImpl.getUnderlyingTableDataAsync(logicalTableId, options);\n };\n Worksheet.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n return this._worksheetImpl.getUnderlyingTableDataReaderAsync(logicalTableId, pageRowCount, options);\n };\n Worksheet.prototype.getVisualSpecificationAsync = function () {\n return this._worksheetImpl.getVisualSpecificationAsync();\n };\n Worksheet.prototype.clearSelectedMarksAsync = function () {\n return this._worksheetImpl.clearSelectedMarksAsync();\n };\n Worksheet.prototype.selectMarksByIDAsync = function (marksInfo, updateType) {\n return this._worksheetImpl.selectMarksByIdAsync(marksInfo, updateType);\n };\n Worksheet.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) {\n return this._worksheetImpl.selectMarksByValueAsync(selections, selectionUpdateType);\n };\n Worksheet.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) {\n return this._worksheetImpl.selectMarksByIdAsync(selections, selectionUpdateType);\n };\n Worksheet.prototype.annotateMarkAsync = function (mark, annotationText) {\n return this._worksheetImpl.annotateMarkAsync(mark, annotationText);\n };\n Worksheet.prototype.getAnnotationsAsync = function () {\n return this._worksheetImpl.getAnnotationsAsync();\n };\n Worksheet.prototype.removeAnnotationAsync = function (annotation) {\n return this._worksheetImpl.removeAnnotationAsync(annotation);\n };\n Worksheet.prototype.hoverTupleAsync = function (hoveredTuple, tooltip) {\n return this._worksheetImpl.hoverTupleAsync(hoveredTuple, tooltip);\n };\n Worksheet.prototype.selectTuplesAsync = function (selectedTuples, selectOption, tooltip) {\n return this._worksheetImpl.selectTuplesAsync(selectedTuples, selectOption, tooltip);\n };\n Worksheet.prototype.visualIdsAreEqual = function (a, b) {\n return (a &&\n b &&\n a.worksheet === b.worksheet &&\n a.dashboard === b.dashboard &&\n a.storyboard === b.storyboard &&\n a.storyPointID === b.storyPointID);\n };\n return Worksheet;\n}(Sheet_1.Sheet));\nexports.Worksheet = Worksheet;\n//# sourceMappingURL=Worksheet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external DashboardContent namespace.\n * This does not follow the Impl pattern as DashboardContent is\n * currently just a (single) property bag.\n */\nvar DashboardContent = /** @class */ (function () {\n function DashboardContent(_dashboard) {\n this._dashboard = _dashboard;\n }\n Object.defineProperty(DashboardContent.prototype, \"dashboard\", {\n get: function () {\n return this._dashboard;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardContent;\n}());\nexports.DashboardContent = DashboardContent;\n//# sourceMappingURL=DashboardContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ConnectedServer_1 = require(\"../Impl/ConnectedServer\");\nvar WorkbookFormattingEnvUtil_1 = require(\"./WorkbookFormattingEnvUtil\");\n/**\n * Implementation of the external environment namespace.\n * Environment does not follow the Impl pattern as it is\n * just a property bag.\n * First class extensions can get to ConnectedServer with: environment['connectedServer']\n */\nvar Environment = /** @class */ (function () {\n function Environment(extensionEnvironment) {\n this._apiVersion = api_shared_js_1.ApiVersion.Instance && api_shared_js_1.ApiVersion.Instance.formattedValue; // maj.min.fix (no build)\n this._context = api_shared_js_1.InternalToExternalEnumMappings.extensionContext.convert(extensionEnvironment.extensionContext);\n this._formatting = WorkbookFormattingEnvUtil_1.WorkbookFormattingEnvUtil.convertToWorkbookFormatting(extensionEnvironment.workbookFormatting);\n this._language = extensionEnvironment.extensionLanguage;\n this._country = extensionEnvironment.extensionCountry;\n this._locale = extensionEnvironment.extensionLocale;\n this._mode = api_shared_js_1.InternalToExternalEnumMappings.extensionMode.convert(extensionEnvironment.extensionMode);\n this._operatingSystem = extensionEnvironment.operatingSystem;\n this._tableauVersion = extensionEnvironment.tableauVersion;\n this._uniqueUserId = extensionEnvironment.uniqueUserId;\n // If we have a userId, then we are a first class extension\n if (extensionEnvironment.userId) {\n this.connectedServer = new ConnectedServer_1.ConnectedServer(extensionEnvironment.userId, extensionEnvironment.siteId, extensionEnvironment.siteNamespace, extensionEnvironment.workbookId);\n this.featureFlags = extensionEnvironment.featureFlags;\n }\n }\n Object.defineProperty(Environment.prototype, \"apiVersion\", {\n get: function () {\n return this._apiVersion;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"context\", {\n get: function () {\n return this._context;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"workbookFormatting\", {\n get: function () {\n return this._formatting;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"language\", {\n get: function () {\n return this._language;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"country\", {\n get: function () {\n return this._country;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"locale\", {\n get: function () {\n return this._locale;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"mode\", {\n get: function () {\n return this._mode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"operatingSystem\", {\n get: function () {\n return this._operatingSystem;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"tableauVersion\", {\n get: function () {\n return this._tableauVersion;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"uniqueUserId\", {\n get: function () {\n return this._uniqueUserId;\n },\n enumerable: true,\n configurable: true\n });\n return Environment;\n}());\nexports.Environment = Environment;\n//# sourceMappingURL=Environment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external Extensions namespace.\n */\nvar Extensions = /** @class */ (function () {\n function Extensions(extensionImpl) {\n this.extensionImpl = extensionImpl;\n this.extensionImpl = extensionImpl;\n }\n Object.defineProperty(Extensions.prototype, \"dashboardContent\", {\n get: function () {\n return this.extensionImpl.dashboardContent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"worksheetContent\", {\n get: function () {\n return this.extensionImpl.worksheetContent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"environment\", {\n get: function () {\n return this.extensionImpl.environment;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"settings\", {\n get: function () {\n return this.extensionImpl.settings;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"ui\", {\n get: function () {\n return this.extensionImpl.ui;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"workbook\", {\n get: function () {\n return this.extensionImpl.workbook;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"dashboardObjectId\", {\n get: function () {\n return this.extensionImpl.extensionZoneId;\n },\n enumerable: true,\n configurable: true\n });\n Extensions.prototype.initializeAsync = function (contextMenuCallbacks) {\n return this.extensionImpl.initializeAsync(false, contextMenuCallbacks).then();\n };\n Extensions.prototype.initializeDialogAsync = function () {\n return this.extensionImpl.initializeAsync(true);\n };\n Extensions.prototype.createVizImageAsync = function (inputSpec) {\n return this.extensionImpl.createVizImageAsync(inputSpec);\n };\n Extensions.prototype.setClickThroughAsync = function (clickThroughEnabled) {\n return this.extensionImpl.setClickThroughAsync(clickThroughEnabled);\n };\n return Extensions;\n}());\nexports.Extensions = Extensions;\n//# sourceMappingURL=Extensions.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\n/**\n * Implementation of the external settings namespace.\n */\nvar Settings = /** @class */ (function (_super) {\n __extends(Settings, _super);\n function Settings(_settingsImpl) {\n var _this = _super.call(this) || this;\n _this._settingsImpl = _settingsImpl;\n // Initialize our event handling for this class\n _this._settingsImpl.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Settings.prototype.erase = function (key) {\n this._settingsImpl.erase(key);\n };\n Settings.prototype.get = function (key) {\n return this._settingsImpl.get(key);\n };\n Settings.prototype.getAll = function () {\n return this._settingsImpl.getAll();\n };\n Object.defineProperty(Settings.prototype, \"isModified\", {\n get: function () {\n return this._settingsImpl.isModified;\n },\n enumerable: true,\n configurable: true\n });\n Settings.prototype.saveAsync = function () {\n return this._settingsImpl.saveAsync();\n };\n Settings.prototype.set = function (key, value) {\n this._settingsImpl.set(key, value);\n };\n return Settings;\n}(api_shared_js_1.EventListenerManager));\nexports.Settings = Settings;\n//# sourceMappingURL=Settings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external UI namespace.\n */\nvar UI = /** @class */ (function () {\n function UI(_impl) {\n this._impl = _impl;\n }\n UI.prototype.displayDialogAsync = function (url, payload, options) {\n return this._impl.displayDialogAsync(url, payload, options);\n };\n UI.prototype.closeDialog = function (payload) {\n this._impl.closeDialog(payload);\n };\n return UI;\n}());\nexports.UI = UI;\n//# sourceMappingURL=UI.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar WorkbookFormattingEnvUtil = /** @class */ (function () {\n function WorkbookFormattingEnvUtil() {\n }\n WorkbookFormattingEnvUtil.convertToWorkbookFormatting = function (workbookFormattingModel) {\n if (!workbookFormattingModel) {\n return undefined;\n }\n else {\n var formattingMap = workbookFormattingModel.formattingSheets.map(function (currentFormattingSheet) {\n var formattingSheet = {\n classNameKey: api_shared_js_1.InternalToExternalEnumMappings.classNameKey.convert(currentFormattingSheet.classNameKey),\n cssProperties: {\n fontFamily: currentFormattingSheet.cssProperties.fontFamily,\n fontSize: currentFormattingSheet.cssProperties.fontSize,\n fontWeight: currentFormattingSheet.cssProperties.fontWeight,\n fontStyle: currentFormattingSheet.cssProperties.fontStyle,\n textDecoration: currentFormattingSheet.cssProperties.textDecoration,\n color: currentFormattingSheet.cssProperties.color,\n },\n };\n return formattingSheet;\n });\n var result = {\n formattingSheets: formattingMap,\n };\n return result;\n }\n };\n return WorkbookFormattingEnvUtil;\n}());\nexports.WorkbookFormattingEnvUtil = WorkbookFormattingEnvUtil;\n//# sourceMappingURL=WorkbookFormattingEnvUtil.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external WorksheetContent namespace.\n * This does not follow the Impl pattern as WorksheetContent is\n * currently just a (single) property bag.\n */\nvar WorksheetContent = /** @class */ (function () {\n function WorksheetContent(_worksheet) {\n this._worksheet = _worksheet;\n }\n Object.defineProperty(WorksheetContent.prototype, \"worksheet\", {\n get: function () {\n return this._worksheet;\n },\n enumerable: true,\n configurable: true\n });\n return WorksheetContent;\n}());\nexports.WorksheetContent = WorksheetContent;\n//# sourceMappingURL=WorksheetContent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar InitializationServiceImpl = /** @class */ (function (_super) {\n __extends(InitializationServiceImpl, _super);\n function InitializationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(InitializationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"InitializationService\" /* InitializationService */;\n },\n enumerable: true,\n configurable: true\n });\n InitializationServiceImpl.prototype.initializeDashboardExtensionsAsync = function (isExtensionDialog, contextMenuIds) {\n var _a;\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'initializeDashboardExtensionsAsync',\n _a[api_internal_contract_js_1.ParameterId.ExtensionContextMenuIds] = contextMenuIds,\n _a[api_internal_contract_js_1.ParameterId.IsExtensionDialog] = isExtensionDialog,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.InitializeExtension, params).then(function (response) {\n // TODO - Validate return value\n var result = response.result;\n return result;\n });\n };\n return InitializationServiceImpl;\n}(api_shared_js_1.ServiceImplBase));\nexports.InitializationServiceImpl = InitializationServiceImpl;\n//# sourceMappingURL=InitializationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar SettingsServiceImpl = /** @class */ (function (_super) {\n __extends(SettingsServiceImpl, _super);\n function SettingsServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SettingsServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"SettingsService\" /* SettingsService */;\n },\n enumerable: true,\n configurable: true\n });\n SettingsServiceImpl.prototype.saveSettingsAsync = function (settings) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveSettingsAsync',\n _a[api_internal_contract_js_1.ParameterId.SettingsValues] = settings,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SaveExtensionSettings, parameters).then(function (value) {\n var result = value.result;\n if (!result || !result.settingsValues) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error savings settings.');\n }\n return result.settingsValues;\n });\n };\n return SettingsServiceImpl;\n}(api_shared_js_1.ServiceImplBase));\nexports.SettingsServiceImpl = SettingsServiceImpl;\n//# sourceMappingURL=SettingsServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar DEFAULT_DIALOG_HEIGHT = 400; // in pixels\nvar DEFAULT_DIALOG_WIDTH = 600; // in pixels\nvar DEFAULT_DIALOG_STYLE = api_external_contract_js_1.DialogStyle.Window;\nvar UIServiceImpl = /** @class */ (function (_super) {\n __extends(UIServiceImpl, _super);\n function UIServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(UIServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"UIService\" /* UIService */;\n },\n enumerable: true,\n configurable: true\n });\n UIServiceImpl.prototype.displayDialogAsync = function (url, payload, options) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'displayDialogAsync',\n _a[api_internal_contract_js_1.ParameterId.ExtensionDialogUrl] = url,\n _a[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload,\n _a);\n var h = options && options.height ? options.height : DEFAULT_DIALOG_HEIGHT;\n var w = options && options.width ? options.width : DEFAULT_DIALOG_WIDTH;\n var dialogStyle = options && options.dialogStyle ? options.dialogStyle : DEFAULT_DIALOG_STYLE;\n // On the platform side, we do something reasonable regardess of whether the passed\n // height and width are too large or too small. But this likely indicates a developer error,\n // so we throw an error here to help with debugging.\n if (h <= 0 || w <= 0) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'Size parameters for displayDialogAsync must be positive');\n }\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogH] = h;\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogW] = w;\n api_shared_js_1.ErrorHelpers.verifyEnumValue(dialogStyle, api_external_contract_js_1.DialogStyle, 'DialogStyle');\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogStyle] = api_shared_js_1.ExternalToInternalEnumMappings.dialogStyles.convert(dialogStyle);\n return this.execute(api_internal_contract_js_1.VerbId.DisplayDialog, parameters).then(function (response) {\n var dialogResult = response.result;\n switch (dialogResult) {\n case api_internal_contract_js_1.ExtensionDialogResult.DialogAlreadyOpen:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogAlreadyOpen, 'There already exists an open dialog for this extension.');\n case api_internal_contract_js_1.ExtensionDialogResult.InvalidDomain:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidDomainDialog, 'The url of an extension dialog must match the domain of the parent extension.');\n default:\n // Success case\n return;\n }\n });\n };\n UIServiceImpl.prototype.closeDialog = function (payload) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'closeDialog',\n _a);\n if (payload) {\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload;\n }\n return this.execute(api_internal_contract_js_1.VerbId.CloseDialog, parameters).then(function () {\n return;\n });\n };\n UIServiceImpl.prototype.setClickThroughAsync = function (clickThroughEnabled, extensionZoneId) {\n var _a;\n api_shared_js_1.ErrorHelpers.verifyParameterType(clickThroughEnabled, 'boolean', 'clickThroughEnabled');\n if (extensionZoneId === undefined || extensionZoneId <= 0) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Extension Id is invalid.');\n }\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.ExtensionZoneId] = extensionZoneId,\n _a[api_internal_contract_js_1.ParameterId.ClickThroughEnabled] = clickThroughEnabled,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SetClickThrough, parameters).then(function () {\n return;\n });\n };\n return UIServiceImpl;\n}(api_shared_js_1.ServiceImplBase));\nexports.UIServiceImpl = UIServiceImpl;\n//# sourceMappingURL=UIServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar InitializationServiceImpl_1 = require(\"./Impl/InitializationServiceImpl\");\nvar SettingsServiceImpl_1 = require(\"./Impl/SettingsServiceImpl\");\nvar UIServiceImpl_1 = require(\"./Impl/UIServiceImpl\");\nvar ServiceRegistryUtil_1 = require(\"./ServiceRegistryUtil\");\nfunction registerAllExtensionsServices(dispatcher) {\n api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new SettingsServiceImpl_1.SettingsServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId));\n api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new UIServiceImpl_1.UIServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId));\n}\nexports.registerAllExtensionsServices = registerAllExtensionsServices;\nfunction registerInitializationExtensionsServices(dispatcher) {\n api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new InitializationServiceImpl_1.InitializationServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId));\n}\nexports.registerInitializationExtensionsServices = registerInitializationExtensionsServices;\n//# sourceMappingURL=RegisterAllExtensionsServices.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExtensionsRegistryId = 0;\n//# sourceMappingURL=ServiceRegistryUtil.js.map","\"use strict\";\n// This file re-exports everything which is part of the extensions api public interface\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./ExternalContract/Embedding/AskDataInterfaces\"));\nvar Enums_1 = require(\"./ExternalContract/Embedding/Enums\");\nexports.ApiMenuType = Enums_1.ApiMenuType;\nexports.CrosstabFileFormat = Enums_1.CrosstabFileFormat;\nexports.DeviceType = Enums_1.DeviceType;\nexports.EmbeddingErrorCodes = Enums_1.EmbeddingErrorCodes;\nexports.EmbeddingTableauEventType = Enums_1.TableauEventType;\nexports.FileFormats = Enums_1.FileFormats;\nexports.PrintOrientation = Enums_1.PrintOrientation;\nexports.PrintPageSize = Enums_1.PrintPageSize;\nexports.PrintScaling = Enums_1.PrintScaling;\nexports.SheetSizeBehavior = Enums_1.SheetSizeBehavior;\nexports.TableauDialogType = Enums_1.TableauDialogType;\nexports.Toolbar = Enums_1.Toolbar;\n__export(require(\"./ExternalContract/Embedding/PulseInterfaces\"));\n__export(require(\"./ExternalContract/Embedding/VizInterfaces\"));\n__export(require(\"./ExternalContract/Embedding/WebComponentInterfaces\"));\n__export(require(\"./SharedApiExternalContract\"));\n//# sourceMappingURL=EmbeddingApiExternalContract.js.map","\"use strict\";\n// This file re-exports everything which is part of the extensions api public interface\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Tableau_1 = require(\"./ExternalContract/Extensions/Namespaces/Tableau\");\nexports.ErrorCodes = Tableau_1.ErrorCodes;\nexports.ExtensionContext = Tableau_1.ExtensionContext;\nexports.ExtensionMode = Tableau_1.ExtensionMode;\nexports.TableauEventType = Tableau_1.TableauEventType;\nexports.VizImageEncodingType = Tableau_1.VizImageEncodingType;\nexports.VizImagePaletteType = Tableau_1.VizImagePaletteType;\nexports.VizImageSizeSettingAlignmentType = Tableau_1.VizImageSizeSettingAlignmentType;\nexports.VizImageSizeSettingType = Tableau_1.VizImageSizeSettingType;\nexports.VizImageSortDirectionType = Tableau_1.VizImageSortDirectionType;\n__export(require(\"./SharedApiExternalContract\"));\n//# sourceMappingURL=ExtensionsApiExternalContract.js.map","\"use strict\";\n/**\n * This is your main. This is where you re-export everything you want to be publicly available.\n *\n * The build enforces that the file has the same name as the global variable that is exported.\n */\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./EmbeddingApiExternalContract\"));\n__export(require(\"./ExtensionsApiExternalContract\"));\n//# sourceMappingURL=ExternalContract.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n * @deprecated\n */\nvar AskDataAttributes;\n(function (AskDataAttributes) {\n AskDataAttributes[\"Origin\"] = \"origin\";\n AskDataAttributes[\"ShowEmbed\"] = \"show-embed\";\n AskDataAttributes[\"ShowPin\"] = \"show-pin\";\n AskDataAttributes[\"ShowSave\"] = \"show-save\";\n AskDataAttributes[\"ShowShare\"] = \"show-share\";\n})(AskDataAttributes = exports.AskDataAttributes || (exports.AskDataAttributes = {}));\n//# sourceMappingURL=AskDataInterfaces.js.map","\"use strict\";\n// All enum values made available to Embedding developers.\n// Enums should be kept in alphabetical order.\n// Most of them should match an enum on the server defined at\n// workgroup/vqlweb/scriptsharp/src/ApiShared/PublicEnums.cs#L398:17\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Crosstab file formats available to use with {@link Viz.exportCrosstabAsync}\n */\nvar CrosstabFileFormat;\n(function (CrosstabFileFormat) {\n CrosstabFileFormat[\"CSV\"] = \"csv\";\n CrosstabFileFormat[\"Excel\"] = \"xlsx\";\n})(CrosstabFileFormat = exports.CrosstabFileFormat || (exports.CrosstabFileFormat = {}));\n/**\n * Device types available to use with {@link Viz.device}\n */\nvar DeviceType;\n(function (DeviceType) {\n DeviceType[\"Default\"] = \"default\";\n DeviceType[\"Desktop\"] = \"desktop\";\n DeviceType[\"Tablet\"] = \"tablet\";\n DeviceType[\"Phone\"] = \"phone\";\n})(DeviceType = exports.DeviceType || (exports.DeviceType = {}));\n/**\n * All error codes used by the Embedding API.\n */\nvar EmbeddingErrorCodes;\n(function (EmbeddingErrorCodes) {\n /**\n * Raised when a request to the auth endpoint fails.\n */\n EmbeddingErrorCodes[\"AuthFailed\"] = \"auth-failed\";\n /**\n * The browser is not capable of supporting the Tableau Embedding API\n */\n EmbeddingErrorCodes[\"BrowserNotCapable\"] = \"browser-not-capable\";\n /**\n * The permissions on a workbook or a view do not allow downloading the workbook.\n */\n EmbeddingErrorCodes[\"DownloadWorkbookNotAllowed\"] = \"download-workbook-not-allowed\";\n /**\n * Thrown when an error occurs while attempting to perform a filter operation.\n */\n EmbeddingErrorCodes[\"FilterCannotBePerformed\"] = \"filter-cannot-be-performed\";\n /**\n * Thrown when attempting to switch to a sheet by index that does not exist in the workbook.\n */\n EmbeddingErrorCodes[\"IndexOutOfRange\"] = \"index-out-of-range\";\n /**\n * Thrown when an error occurs within the Tableau Embedding API. Contact Tableau Support.\n */\n EmbeddingErrorCodes[\"InternalError\"] = \"internal-error\";\n /**\n * An operation was attempted on a custom view that does not exist.\n */\n EmbeddingErrorCodes[\"InvalidCustomViewName\"] = \"invalid-custom-view-name\";\n /**\n * An invalid date was specified in a method that required a date parameter.\n */\n EmbeddingErrorCodes[\"InvalidDateParameter\"] = \"invalid-date-parameter\";\n /**\n * Either a filter operation was attempted on a field that does not exist in the data source, or the value supplied\n * in the filter operation is the wrong data type or format.\n */\n EmbeddingErrorCodes[\"invalidFilterFieldNameOrValue\"] = \"invalid-filter-field-name\";\n /**\n * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message\n * field.\n */\n EmbeddingErrorCodes[\"InvalidParameter\"] = \"invalid-parameter\";\n /**\n * A negative size was specified or the maxSize value is less than minSize in Sheet.changeSizeAsync().\n */\n EmbeddingErrorCodes[\"InvalidSize\"] = \"invalid-size\";\n /**\n * Attempted to get an authoring worksheet when the current sheet is not a worksheet.\n * @ignore\n */\n EmbeddingErrorCodes[\"InvalidSheetType\"] = \"invalid-sheet-type\";\n /**\n * A behavior value was found that is not included in the SheetSizeBehavior enum.\n */\n EmbeddingErrorCodes[\"InvalidSizeBehavior\"] = \"invalid-size-behavior\";\n /**\n * A behavior other than SheetSizeBehavior.Automatic was specified in Sheet.changeSizeAsync() when the sheet is a\n * Worksheet instance.\n */\n EmbeddingErrorCodes[\"InvalidSizeBehaviorOnWorksheet\"] = \"invalid-size-behavior-on-worksheet\";\n /**\n * The URL specified in the Viz class constructor is not valid.\n */\n EmbeddingErrorCodes[\"InvalidUrl\"] = \"invalid-url\";\n /**\n * The maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtMost.\n */\n EmbeddingErrorCodes[\"MissingMaxSize\"] = \"missing-max-size\";\n /**\n * The minSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtLeast.\n */\n EmbeddingErrorCodes[\"MissingMinSize\"] = \"missing-min-size\";\n /**\n * The minSize or maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.Range.\n */\n EmbeddingErrorCodes[\"MissingMinMaxSize\"] = \"missing-min-max-size\";\n /**\n * Can occur if the embedding app interacts with a parameter that has been removed from the worksheet.\n */\n EmbeddingErrorCodes[\"MissingParameter\"] = \"missing-parameter\";\n /**\n * The rangeN field is missing for a relative date filter of type LASTN or NEXTN.\n */\n EmbeddingErrorCodes[\"MissingRangeNForRelativeDateFilters\"] = \"missing-range-n-for-relative-date-filters\";\n /**\n * An attempt was made to access Sheet.getUrl() on a hidden sheet. Hidden sheets do not have URLs.\n */\n EmbeddingErrorCodes[\"NoUrlForHiddenWorksheet\"] = \"no-url-for-hidden-worksheet\";\n /**\n * One or both of the parentElement or the URL parameters is not specified in the Viz constructor.\n */\n EmbeddingErrorCodes[\"NoUrlOrParentElementNotFound\"] = \"no-url-or-parent-element-not-found\";\n /**\n * An operation was attempted on a sheet that is not active or embedded within the active dashboard.\n */\n EmbeddingErrorCodes[\"NotActiveSheet\"] = \"not-active-sheet\";\n /**\n * A required parameter was not specified, null, or an empty string/array.\n */\n EmbeddingErrorCodes[\"NullOrEmptyParameter\"] = \"null-or-empty-parameter\";\n /**\n * An operation was attempted on a sheet that does not exist in the workbook.\n */\n EmbeddingErrorCodes[\"SheetNotInWorkbook\"] = \"sheet-not-in-workbook\";\n /**\n * An operation is performed on a CustomView object that is no longer valid (it has been removed).\n */\n EmbeddingErrorCodes[\"StaleDataReference\"] = \"stale-data-reference\";\n /**\n * Unknown error triggered during the auth flow.\n */\n EmbeddingErrorCodes[\"UnknownAuthError\"] = \"unknown-auth-error\";\n /**\n * An unknown event name was specified in the call to Viz.addEventListener or Viz.removeEventListener.\n */\n EmbeddingErrorCodes[\"UnsupportedEventName\"] = \"unsupported-event-name\";\n /**\n * A Viz object has already been created as a child of the parentElement specified in the Viz constructor.\n */\n EmbeddingErrorCodes[\"VizAlreadyInManager\"] = \"viz-already-in-manager\";\n /**\n * Function is not supported in the embedding api.\n */\n EmbeddingErrorCodes[\"ImplementationError\"] = \"wrong-implementation\";\n /**\n * @NotImplemented\n */\n EmbeddingErrorCodes[\"NotImplemented\"] = \"not-implemented\";\n /**\n * Unknown error during event initialization\n */\n EmbeddingErrorCodes[\"EventInitializationError\"] = \"event-initialization-error\";\n /**\n * Version of the embedding api not supported by the version of tableau\n */\n EmbeddingErrorCodes[\"IncompatibleVersionError\"] = \"incompatible-version-error\";\n /**\n * Unknown {@link TableauDialogType} passed in to Viz.displayDialogAsync.\n */\n EmbeddingErrorCodes[\"UnknownDialogType\"] = \"unknown-dialog-type\";\n /**\n * Can occur if the API interacts with a filter that has been removed from the worksheet.\n * Can also occurs if a {@link FilterType} has not been implemented.\n */\n EmbeddingErrorCodes[\"FilterMissingOrNotImplemented\"] = \"filter-missing-not-implemented\";\n /**\n * Can occur if story point ids no longer match.\n */\n EmbeddingErrorCodes[\"StoryPointIdMismatch\"] = \"storypoint-id-mismatch\";\n})(EmbeddingErrorCodes = exports.EmbeddingErrorCodes || (exports.EmbeddingErrorCodes = {}));\n/**\n * Formats available to use with displayStaticImage in @VizInterfaces\n */\nvar FileFormats;\n(function (FileFormats) {\n FileFormats[\"PDF\"] = \"pdf\";\n FileFormats[\"PNG\"] = \"png\";\n})(FileFormats = exports.FileFormats || (exports.FileFormats = {}));\nvar PrintOrientation;\n(function (PrintOrientation) {\n PrintOrientation[\"Portrait\"] = \"portrait\";\n PrintOrientation[\"Landscape\"] = \"landscape\";\n})(PrintOrientation = exports.PrintOrientation || (exports.PrintOrientation = {}));\nvar PrintPageSize;\n(function (PrintPageSize) {\n PrintPageSize[\"Letter\"] = \"letter\";\n PrintPageSize[\"Legal\"] = \"legal\";\n PrintPageSize[\"Note\"] = \"note\";\n PrintPageSize[\"Folio\"] = \"folio\";\n PrintPageSize[\"Tabloid\"] = \"tabloid\";\n PrintPageSize[\"Ledger\"] = \"ledger\";\n PrintPageSize[\"Statement\"] = \"statement\";\n PrintPageSize[\"Executive\"] = \"executive\";\n PrintPageSize[\"A3\"] = \"A3\";\n PrintPageSize[\"A4\"] = \"A4\";\n PrintPageSize[\"A5\"] = \"A5\";\n PrintPageSize[\"B4\"] = \"B4\";\n PrintPageSize[\"B5\"] = \"B5\";\n PrintPageSize[\"Quarto\"] = \"quarto\";\n PrintPageSize[\"Unspecified\"] = \"unspecified\";\n})(PrintPageSize = exports.PrintPageSize || (exports.PrintPageSize = {}));\nvar PrintScaling;\n(function (PrintScaling) {\n PrintScaling[\"Automatic\"] = \"automatic\";\n PrintScaling[\"Perc25\"] = \"25%\";\n PrintScaling[\"Perc50\"] = \"50%\";\n PrintScaling[\"Perc60\"] = \"60%\";\n PrintScaling[\"Perc75\"] = \"75%\";\n PrintScaling[\"Perc80\"] = \"80%\";\n PrintScaling[\"Perc90\"] = \"90%\";\n PrintScaling[\"Perc100\"] = \"100%\";\n PrintScaling[\"Perc200\"] = \"200%\";\n PrintScaling[\"Perc400\"] = \"400%\";\n PrintScaling[\"AtMost1PageHigh\"] = \"at-most-1-page-high\";\n PrintScaling[\"AtMost2PagesHigh\"] = \"at-most-2-pages-high\";\n PrintScaling[\"AtMost1PageWide\"] = \"at-most-1-page-wide\";\n PrintScaling[\"AtMost2PagesWide\"] = \"at-most-2-pages-wide\";\n})(PrintScaling = exports.PrintScaling || (exports.PrintScaling = {}));\nvar RevertVizSelection;\n(function (RevertVizSelection) {\n RevertVizSelection[\"All\"] = \"all\";\n RevertVizSelection[\"Axes\"] = \"axes\";\n RevertVizSelection[\"Filters\"] = \"filters\";\n RevertVizSelection[\"Sorts\"] = \"sorts\";\n RevertVizSelection[\"Shelves\"] = \"shelves\";\n})(RevertVizSelection = exports.RevertVizSelection || (exports.RevertVizSelection = {}));\nvar ToolbarButtons;\n(function (ToolbarButtons) {\n ToolbarButtons[\"Alerts\"] = \"alerts\";\n ToolbarButtons[\"AskData\"] = \"askData\";\n ToolbarButtons[\"CustomViews\"] = \"customViews\";\n ToolbarButtons[\"DataDetails\"] = \"dataDetails\";\n ToolbarButtons[\"Share\"] = \"share\";\n ToolbarButtons[\"Subscribe\"] = \"subscribe\";\n})(ToolbarButtons = exports.ToolbarButtons || (exports.ToolbarButtons = {}));\nvar Toolbar;\n(function (Toolbar) {\n Toolbar[\"Top\"] = \"top\";\n Toolbar[\"Bottom\"] = \"bottom\";\n Toolbar[\"Hidden\"] = \"hidden\";\n})(Toolbar = exports.Toolbar || (exports.Toolbar = {}));\nvar SheetSizeBehavior;\n(function (SheetSizeBehavior) {\n SheetSizeBehavior[\"Automatic\"] = \"automatic\";\n SheetSizeBehavior[\"Exactly\"] = \"exactly\";\n SheetSizeBehavior[\"Range\"] = \"range\";\n SheetSizeBehavior[\"AtLeast\"] = \"atleast\";\n SheetSizeBehavior[\"AtMost\"] = \"atmost\";\n})(SheetSizeBehavior = exports.SheetSizeBehavior || (exports.SheetSizeBehavior = {}));\n/**\n * Be careful when adding new event types. Extensions and embedding follow two different patterns on how events are named.\n * Events should be all lower case and without hyphens or underscores.\n */\n/**\n * Represents the type of tableau embedding event that can be listened for.\n */\nvar TableauEventType;\n(function (TableauEventType) {\n /**\n * Raised when a custom view has finished loading. This event is raised after the callback function for {@link FirstInteractive} (if any) has been called.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewLoaded\"] = \"customviewloaded\";\n /**\n * Raised when a custom view has been removed.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewRemoved\"] = \"customviewremoved\";\n /**\n * Raised when a custom view has been saved (newly created or updated).\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewSaved\"] = \"customviewsaved\";\n /**\n * Raised when a custom view has been set as the default view for a workbook.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewSetDefault\"] = \"customviewsetdefault\";\n /** Raised when the user clicks on the Edit Button.\n *\n * @category Viewing\n */\n TableauEventType[\"EditButtonClicked\"] = \"editbuttonclicked\";\n /** Raised when the user clicks on the Edit In Desktop Button.\n *\n * @category Authoring, Viewing\n */\n TableauEventType[\"EditInDesktopButtonClicked\"] = \"editindesktopbuttonclicked\";\n /** Raised when any filter has changed state. You can use this event type with TableauViz objects.\n *\n * @category Viewing\n */\n TableauEventType[\"FilterChanged\"] = \"filterchanged\";\n /** Fired when viz size is known\n *\n * @category Authoring, Viewing\n */\n TableauEventType[\"FirstVizSizeKnown\"] = \"firstvizsizeknown\";\n /** Fired when a viz first becomes interactive\n *\n * @category Authoring, Viewing\n */\n TableauEventType[\"FirstInteractive\"] = \"firstinteractive\";\n /** Raised when a custom mark context menu is clicked.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomMarkContextMenuEvent\"] = \"custommarkcontextmenu\";\n /** The selected marks on a visualization have changed. You can use this event type with TableauViz objects.\n *\n * @category Viewing\n */\n TableauEventType[\"MarkSelectionChanged\"] = \"markselectionchanged\";\n /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects.\n *\n * @category Viewing\n */\n TableauEventType[\"ParameterChanged\"] = \"parameterchanged\";\n /** Raised when a toolbar button or control becomes available or becomes unavailable.\n *\n * @category Viewing\n */\n TableauEventType[\"ToolbarStateChanged\"] = \"toolbarstatechanged\";\n /** Raised when the workbook is ready to close. This notification is sent when using embedded web authoring functionality.\n *\n * @category Authoring\n */\n TableauEventType[\"WorkbookReadyToClose\"] = \"workbookreadytoclose\";\n /** Raised when the workbook has been published. This notification is sent when using embedded web authoring functionality.\n *\n * @category Authoring\n */\n TableauEventType[\"WorkbookPublished\"] = \"workbookpublished\";\n /** Raised when \"publish as\" is successful. This notification is sent when using embedded web authoring functionality.\n *\n * @category Authoring\n */\n TableauEventType[\"WorkbookPublishedAs\"] = \"workbookpublishedas\";\n /**\n * Raised when a URL action occurs. See the {@link UrlActionEvent} class.\n *\n * @category Viewing\n */\n TableauEventType[\"UrlAction\"] = \"urlaction\";\n /**\n * Raised after a tab switch occurs (the active sheet has changed). Guarantees the viz object will be interactive after this.\n *\n * @category Viewing\n */\n TableauEventType[\"TabSwitched\"] = \"tabswitched\";\n /**\n *\n * Raised after a new story point becomes active.\n *\n * @category Viewing\n */\n TableauEventType[\"StoryPointSwitched\"] = \"storypointswitched\";\n /**\n *\n * Raised when an error occurs while loading the contents of the webcomponent.\n *\n * @category Authoring, Viewing, AskData\n */\n TableauEventType[\"VizLoadError\"] = \"vizloaderror\";\n /**\n * Raised after the iframe src attribute has been updated\n *\n * @category Authoring, Viewing, AskData\n */\n TableauEventType[\"IframeSrcUpdated\"] = \"iframesrcupdated\";\n /**\n * Raised when changes are made to summary data.\n *\n * @category Viewing\n */\n TableauEventType[\"SummaryDataChanged\"] = \"summarydatachanged\";\n /**\n * Raised when tableau (viz-client) is ready to receive an auth token.\n * Used for authentication in salesforce native mode.\n *\n * @hidden\n * @category Authoring, Viewing,\n */\n TableauEventType[\"ReadyToReceiveAuthToken\"] = \"readytoreceiveauthtoken\";\n})(TableauEventType = exports.TableauEventType || (exports.TableauEventType = {}));\n/**\n * Represents the location of a context menu where users can add external menu items.\n */\nvar ApiMenuType;\n(function (ApiMenuType) {\n /** External menu item will be injected in ubertip dialog */\n ApiMenuType[\"Ubertip\"] = \"ubertip\";\n})(ApiMenuType = exports.ApiMenuType || (exports.ApiMenuType = {}));\n/** You can use this type with a {@link Viz} object. */\nvar TableauDialogType;\n(function (TableauDialogType) {\n /**\n * Used to display the download PDF dialog.\n */\n TableauDialogType[\"ExportPDF\"] = \"export-pdf\";\n /**\n * Used to display the download PowerPoint dialog.\n */\n TableauDialogType[\"ExportPowerPoint\"] = \"export-powerpoint\";\n /**\n * Used to display the download Data dialog.\n */\n TableauDialogType[\"ExportData\"] = \"export-data\";\n /**\n * Used to display the download CrossTab dialog.\n */\n TableauDialogType[\"ExportCrossTab\"] = \"export-cross-tab\";\n /**\n * Used to display the download Workbook dialog.\n */\n TableauDialogType[\"ExportWorkbook\"] = \"export-workbook\";\n /**\n * Used to display the Share dialog.\n */\n TableauDialogType[\"Share\"] = \"share\";\n})(TableauDialogType = exports.TableauDialogType || (exports.TableauDialogType = {}));\n//# sourceMappingURL=Enums.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n */\nvar PulseAttributes;\n(function (PulseAttributes) {\n PulseAttributes[\"DisableExploreFilter\"] = \"disable-explore-filter\";\n})(PulseAttributes = exports.PulseAttributes || (exports.PulseAttributes = {}));\n//# sourceMappingURL=PulseInterfaces.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The shared string constants you can use as HTML attributes for the and web component.\n * @ignore\n */\nvar VizSharedAttributes;\n(function (VizSharedAttributes) {\n VizSharedAttributes[\"TouchOptimize\"] = \"touch-optimize\";\n VizSharedAttributes[\"HideEditInDesktopButton\"] = \"hide-edit-in-desktop-button\";\n VizSharedAttributes[\"SuppressDefaultEditBehavior\"] = \"suppress-default-edit-behavior\";\n VizSharedAttributes[\"DisableVersionCheck\"] = \"disable-version-check\";\n VizSharedAttributes[\"OnEditInDesktopButtonClicked\"] = \"onEditInDesktopButtonClicked\";\n VizSharedAttributes[\"OnFirstVizSizeKnown\"] = \"onFirstVizSizeKnown\";\n VizSharedAttributes[\"OnFirstInteractive\"] = \"onFirstInteractive\";\n})(VizSharedAttributes = exports.VizSharedAttributes || (exports.VizSharedAttributes = {}));\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n */\nvar VizAttributes;\n(function (VizAttributes) {\n VizAttributes[\"DisableUrlActionsPopups\"] = \"disable-url-actions\";\n VizAttributes[\"HideTabs\"] = \"hide-tabs\";\n VizAttributes[\"Toolbar\"] = \"toolbar\";\n VizAttributes[\"InstanceIdToClone\"] = \"instance-id-to-clone\";\n VizAttributes[\"Device\"] = \"device\";\n VizAttributes[\"HideEditButton\"] = \"hide-edit-button\";\n VizAttributes[\"OnEditButtonClicked\"] = \"onEditButtonClicked\";\n VizAttributes[\"OnFilterChanged\"] = \"onFilterChanged\";\n VizAttributes[\"OnCustomMarkContextMenuEvent\"] = \"onCustomMarkContextMenuEvent\";\n VizAttributes[\"OnMarkSelectionChanged\"] = \"onMarkSelectionChanged\";\n VizAttributes[\"OnParameterChanged\"] = \"onParameterChanged\";\n VizAttributes[\"OnToolbarStateChanged\"] = \"onToolbarStateChanged\";\n VizAttributes[\"OnUrlAction\"] = \"onUrlAction\";\n VizAttributes[\"OnTabSwitched\"] = \"onTabSwitched\";\n VizAttributes[\"OnCustomViewLoaded\"] = \"onCustomViewLoaded\";\n VizAttributes[\"OnCustomViewRemoved\"] = \"onCustomViewRemoved\";\n VizAttributes[\"OnCustomViewSaved\"] = \"onCustomViewSaved\";\n VizAttributes[\"OnCustomViewSetDefault\"] = \"onCustomViewSetDefault\";\n VizAttributes[\"OnStoryPointSwitched\"] = \"onStoryPointSwitched\";\n VizAttributes[\"OnSummaryDataChanged\"] = \"onSummaryDataChanged\";\n VizAttributes[\"OnReadyToReceiveAuthToken\"] = \"onReadyToReceiveAuthToken\";\n})(VizAttributes = exports.VizAttributes || (exports.VizAttributes = {}));\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n */\nvar VizAuthoringAttributes;\n(function (VizAuthoringAttributes) {\n VizAuthoringAttributes[\"OnWorkbookPublished\"] = \"onWorkbookPublished\";\n VizAuthoringAttributes[\"OnWorkbookPublishedAs\"] = \"onWorkbookPublishedAs\";\n VizAuthoringAttributes[\"OnWorkbookReadyToClose\"] = \"onWorkbookReadyToClose\";\n VizAuthoringAttributes[\"HideCloseButton\"] = \"hide-close-button\";\n})(VizAuthoringAttributes = exports.VizAuthoringAttributes || (exports.VizAuthoringAttributes = {}));\n/**\n * The names of the string constants you can use as child tags for TableauViz and TableauAuthoringViz custom elements.\n */\nvar VizChildElements;\n(function (VizChildElements) {\n /**\n * Contains a list of filter parameters. Available only in viewing mode.\n */\n VizChildElements[\"VizFilter\"] = \"viz-filter\";\n /**\n * Contains a name and value for a parameter. Available only in viewing mode.\n */\n VizChildElements[\"VizParameter\"] = \"viz-parameter\";\n /**\n * Contains a list of custom parameters. Available in both viewing and authoring modes.\n */\n VizChildElements[\"CustomParameter\"] = \"custom-parameter\";\n})(VizChildElements = exports.VizChildElements || (exports.VizChildElements = {}));\nvar VizChildElementAttributes;\n(function (VizChildElementAttributes) {\n VizChildElementAttributes[\"Field\"] = \"field\";\n VizChildElementAttributes[\"Value\"] = \"value\";\n VizChildElementAttributes[\"Name\"] = \"name\";\n})(VizChildElementAttributes = exports.VizChildElementAttributes || (exports.VizChildElementAttributes = {}));\n//# sourceMappingURL=VizInterfaces.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The names of the common string constants you can use as HTML attributes for the tableau web component.\n * @ignore\n */\nvar WebComponentAttributes;\n(function (WebComponentAttributes) {\n WebComponentAttributes[\"Src\"] = \"src\";\n WebComponentAttributes[\"Width\"] = \"width\";\n WebComponentAttributes[\"Height\"] = \"height\";\n WebComponentAttributes[\"Token\"] = \"token\";\n WebComponentAttributes[\"Debug\"] = \"debug\";\n WebComponentAttributes[\"IframeAuth\"] = \"iframe-auth\";\n WebComponentAttributes[\"OnVizLoadError\"] = \"onvizloaderror\";\n WebComponentAttributes[\"ForceTokenSync\"] = \"force-token-sync\";\n})(WebComponentAttributes = exports.WebComponentAttributes || (exports.WebComponentAttributes = {}));\n/**\n * The names of the string constants you can use as child tags for TableauViz, TableauAuthoringViz and TableauAskData custom elements.\n * @ignore\n */\nvar WebComponentChildElements;\n(function (WebComponentChildElements) {\n /**\n * Contains a list of custom parameters. Available in viz viewing, viz authoring and askdata.\n */\n WebComponentChildElements[\"CustomParameter\"] = \"custom-parameter\";\n})(WebComponentChildElements = exports.WebComponentChildElements || (exports.WebComponentChildElements = {}));\nvar WebComponentChildElementAttributes;\n(function (WebComponentChildElementAttributes) {\n WebComponentChildElementAttributes[\"Field\"] = \"field\";\n WebComponentChildElementAttributes[\"Value\"] = \"value\";\n WebComponentChildElementAttributes[\"Name\"] = \"name\";\n})(WebComponentChildElementAttributes = exports.WebComponentChildElementAttributes || (exports.WebComponentChildElementAttributes = {}));\n//# sourceMappingURL=WebComponentInterfaces.js.map","\"use strict\";\n// All enum values made available to Extensions developers.\n// Enums should be kept in alphabetical order.\nvar Tableau;\n(function (Tableau) {\n /**\n * All error codes used by the Extensions API.\n */\n var ErrorCodes;\n (function (ErrorCodes) {\n /**\n * Thrown when caller attempts to execute command before initialization has completed.\n */\n ErrorCodes[\"APINotInitialized\"] = \"api-not-initialized\";\n /**\n * Thrown when caller attempts to execute command while extension is not visible.\n */\n ErrorCodes[\"VisibilityError\"] = \"visibility-error\";\n /**\n * Only one dialog can be opened at time with the UI namespace functionality.\n */\n ErrorCodes[\"DialogAlreadyOpen\"] = \"dialog-already-open\";\n /**\n * The open dialog was closed by the user.\n */\n ErrorCodes[\"DialogClosedByUser\"] = \"dialog-closed-by-user\";\n /**\n * An error occurred within the Tableau Extensions API. Contact Tableau Support.\n */\n ErrorCodes[\"InternalError\"] = \"internal-error\";\n /**\n * A dialog must start on the same domain as the parent extenion.\n */\n ErrorCodes[\"InvalidDomainDialog\"] = \"invalid-dialog-domain\";\n /**\n * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field.\n */\n ErrorCodes[\"InvalidParameter\"] = \"invalid-parameter\";\n /**\n * Can occur if the extension interacts with a filter that has been removed from the worksheet.\n */\n ErrorCodes[\"MissingFilter\"] = \"missing-filter\";\n /**\n * Can occur if the extension interacts with a parameter that has been removed from the worksheet.\n */\n ErrorCodes[\"MissingParameter\"] = \"missing-parameter\";\n /**\n * Internal Server Error\n */\n ErrorCodes[\"ServerError\"] = \"server-error\";\n /**\n * Developer cannot save settings while another save is still in progress.\n */\n ErrorCodes[\"SettingSaveInProgress\"] = \"setting-save-in-progress\";\n /**\n * An unknown event name was specified in the call to `addEventListener` or `removeEventListener`.\n */\n ErrorCodes[\"UnsupportedEventName\"] = \"unsupported-event-name\";\n /**\n * A method was used for a type of data source that doesn't support that method (see getActiveTablesAsync for an example)\n */\n ErrorCodes[\"UnsupportedMethodForDataSourceType\"] = \"unsupported-method-for-data-source-type\";\n })(ErrorCodes = Tableau.ErrorCodes || (Tableau.ErrorCodes = {}));\n /**\n * The context in which the Extensions is currently running.\n */\n var ExtensionContext;\n (function (ExtensionContext) {\n ExtensionContext[\"Desktop\"] = \"desktop\";\n ExtensionContext[\"Server\"] = \"server\";\n })(ExtensionContext = Tableau.ExtensionContext || (Tableau.ExtensionContext = {}));\n /**\n * The mode in which the Extensions is currently running.\n */\n var ExtensionMode;\n (function (ExtensionMode) {\n ExtensionMode[\"Authoring\"] = \"authoring\";\n ExtensionMode[\"Viewing\"] = \"viewing\";\n })(ExtensionMode = Tableau.ExtensionMode || (Tableau.ExtensionMode = {}));\n /**\n * Represents the type of event that can be listened for.\n */\n var TableauEventType;\n (function (TableauEventType) {\n /** Raised when any filter has changed state. You can use this event type with [Worksheet](../interfaces/worksheet.html) objects.*/\n TableauEventType[\"FilterChanged\"] = \"filter-changed\";\n /** The selected marks on a visualization has changed.\n * You can use this event type with [Worksheet](../interfaces/worksheet.html) objects. */\n TableauEventType[\"MarkSelectionChanged\"] = \"mark-selection-changed\";\n /** The summary data backing a worksheet has changed\n * You can use this event type with [Worksheet](../interfaces/worksheet.html) objects.*/\n TableauEventType[\"SummaryDataChanged\"] = \"summary-data-changed\";\n /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects. */\n TableauEventType[\"ParameterChanged\"] = \"parameter-changed\";\n /** Settings have been changed for this extension. You can use this event type with [[Settings]] objects. */\n TableauEventType[\"SettingsChanged\"] = \"settings-changed\";\n /** The dashboard layout has changed\n * @category Dashboard Extensions\n */\n TableauEventType[\"DashboardLayoutChanged\"] = \"dashboard-layout-changed\";\n /** The workbook formatting has changed\n * @category Dashboard Extensions\n */\n TableauEventType[\"WorkbookFormattingChanged\"] = \"workbook-formatting-changed\";\n })(TableauEventType = Tableau.TableauEventType || (Tableau.TableauEventType = {}));\n /**\n * Enum that represents the data type of encodings for createVizImageAsync.\n * @since 1.6.0\n */\n var VizImageEncodingType;\n (function (VizImageEncodingType) {\n VizImageEncodingType[\"Discrete\"] = \"discrete\";\n VizImageEncodingType[\"Continuous\"] = \"continuous\";\n })(VizImageEncodingType = Tableau.VizImageEncodingType || (Tableau.VizImageEncodingType = {}));\n /**\n * Enum that represents the sort direction for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImageSortDirectionType;\n (function (VizImageSortDirectionType) {\n VizImageSortDirectionType[\"Ascending\"] = \"ascending\";\n VizImageSortDirectionType[\"Descending\"] = \"descending\";\n })(VizImageSortDirectionType = Tableau.VizImageSortDirectionType || (Tableau.VizImageSortDirectionType = {}));\n /**\n * Enum that represents the palette type for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImagePaletteType;\n (function (VizImagePaletteType) {\n VizImagePaletteType[\"CustomDiverging\"] = \"custom-diverging\";\n VizImagePaletteType[\"CustomSequential\"] = \"custom-sequential\";\n })(VizImagePaletteType = Tableau.VizImagePaletteType || (Tableau.VizImagePaletteType = {}));\n /**\n * Enum that represents the Size Setting type for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImageSizeSettingType;\n (function (VizImageSizeSettingType) {\n VizImageSizeSettingType[\"Fixed\"] = \"fixed\";\n VizImageSizeSettingType[\"Manual\"] = \"manual\";\n })(VizImageSizeSettingType = Tableau.VizImageSizeSettingType || (Tableau.VizImageSizeSettingType = {}));\n /**\n * Enum that represents the Size Setting alignment type for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImageSizeSettingAlignmentType;\n (function (VizImageSizeSettingAlignmentType) {\n VizImageSizeSettingAlignmentType[\"Right\"] = \"right\";\n VizImageSizeSettingAlignmentType[\"Left\"] = \"left\";\n VizImageSizeSettingAlignmentType[\"Center\"] = \"center\";\n })(VizImageSizeSettingAlignmentType = Tableau.VizImageSizeSettingAlignmentType || (Tableau.VizImageSizeSettingAlignmentType = {}));\n})(Tableau || (Tableau = {}));\nmodule.exports = Tableau;\n//# sourceMappingURL=Tableau.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar SharedErrorCodes;\n(function (SharedErrorCodes) {\n /**\n * A CSV or Excel file failed to be created in Viz.exportCrosstabAsync().\n */\n SharedErrorCodes[\"CrosstabCreationError\"] = \"crosstab-creation-error\";\n /**\n * A CSV file failed to be created in Viz.exportDataAsync().\n */\n SharedErrorCodes[\"DataCreationError\"] = \"data-creation-error\";\n /**\n * An invalid aggregation was specified for the filter, such as setting a range filter to \"SUM(Sales)\" instead of\n * \"Sales\".\n */\n SharedErrorCodes[\"InvalidAggregationFieldName\"] = \"invalid-aggregation-field-name\";\n /**\n * A filter operation was attempted on a field that does not exist in the data source.\n */\n SharedErrorCodes[\"InvalidFilterFieldName\"] = \"invalid-filter-name\";\n /**\n * A filter operation was attempted using a value that is the wrong data type or format.\n */\n SharedErrorCodes[\"InvalidFilterFieldValue\"] = \"invalid-filter-fieldValue\";\n /**\n * An invalid date value was specified in a Sheet.selectMarksAsync() call for a date field.\n */\n SharedErrorCodes[\"InvalidSelectionDate\"] = \"invalid-selection-date\";\n /**\n * A field was specified in a Sheet.selectMarksAsync() call that does not exist in the data source.\n */\n SharedErrorCodes[\"InvalidSelectionFieldName\"] = \"invalid-selection-fieldName\";\n /**\n * An invalid value was specified in a Sheet.selectMarksAsync() call.\n */\n SharedErrorCodes[\"InvalidSelectionValue\"] = \"invalid-selection-value\";\n /**\n * A parameter did not include a valid sheet selection for exporting.\n */\n SharedErrorCodes[\"InvalidSelectionSheet\"] = \"invalid-selection-sheet\";\n /**\n * An error occurred within the Tableau API. Contact Tableau Support.\n */\n SharedErrorCodes[\"InternalError\"] = \"internal-error\";\n /**\n * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field.\n */\n SharedErrorCodes[\"InvalidParameter\"] = \"invalid-parameter\";\n /**\n * A PDF file failed to be created in Viz.exportPDFAsync().\n */\n SharedErrorCodes[\"PDFCreationError\"] = \"pdf-creation-error\";\n /**\n * A PowerPoint file failed to be created in Viz.exportPowerPointAsync().\n */\n SharedErrorCodes[\"PowerPointCreationError\"] = \"powerpoint-creation-error\";\n /**\n * An operation was attempted on a sheet that is not active or embedded within the active dashboard.\n */\n SharedErrorCodes[\"NotActiveSheet\"] = \"not-active-sheet\";\n /**\n * Property or Function is not supported within the Tableau API.\n */\n SharedErrorCodes[\"ImplementationError\"] = \"wrong-implementation\";\n /**\n * Can occur when two incompatible calls are triggered together.\n */\n SharedErrorCodes[\"ApiExecutionError\"] = \"api-execution-error\";\n /**\n * A general-purpose server error occurred. Details are contained in the Error object.\n */\n SharedErrorCodes[\"ServerError\"] = \"server-error\";\n /**\n * Can occur when an api call times out.\n */\n SharedErrorCodes[\"Timeout\"] = \"timeout\";\n})(SharedErrorCodes = exports.SharedErrorCodes || (exports.SharedErrorCodes = {}));\n//# sourceMappingURL=Enums.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/**\n * The tableau namespace exists for organization and to avoid polluting\n * the global namespace. It contains no constructs other than sub-namespaces and the Tableau enumerations.\n */\nvar Tableau;\n(function (Tableau) {\n var AnalyticsObjectType;\n (function (AnalyticsObjectType) {\n AnalyticsObjectType[\"Cluster\"] = \"cluster\";\n AnalyticsObjectType[\"Forecast\"] = \"forecast\";\n AnalyticsObjectType[\"TrendLine\"] = \"trend-line\";\n })(AnalyticsObjectType = Tableau.AnalyticsObjectType || (Tableau.AnalyticsObjectType = {}));\n var AnnotationType;\n (function (AnnotationType) {\n AnnotationType[\"Mark\"] = \"mark\";\n AnnotationType[\"Point\"] = \"point\";\n AnnotationType[\"Area\"] = \"area\";\n })(AnnotationType = Tableau.AnnotationType || (Tableau.AnnotationType = {}));\n var ColumnType;\n (function (ColumnType) {\n ColumnType[\"Discrete\"] = \"discrete\";\n ColumnType[\"Continuous\"] = \"continuous\";\n })(ColumnType = Tableau.ColumnType || (Tableau.ColumnType = {}));\n var ClassNameKey;\n (function (ClassNameKey) {\n ClassNameKey[\"WorksheetTitle\"] = \"tableau-worksheet-title\";\n ClassNameKey[\"Worksheet\"] = \"tableau-worksheet\";\n ClassNameKey[\"Tooltip\"] = \"tableau-tooltip\";\n ClassNameKey[\"StoryTitle\"] = \"tableau-story-title\";\n ClassNameKey[\"DashboardTitle\"] = \"tableau-dashboard-title\";\n })(ClassNameKey = Tableau.ClassNameKey || (Tableau.ClassNameKey = {}));\n /**\n * What the object represents in a dashboard.\n */\n var DashboardObjectType;\n (function (DashboardObjectType) {\n DashboardObjectType[\"Blank\"] = \"blank\";\n DashboardObjectType[\"Worksheet\"] = \"worksheet\";\n DashboardObjectType[\"QuickFilter\"] = \"quick-filter\";\n DashboardObjectType[\"ParameterControl\"] = \"parameter-control\";\n DashboardObjectType[\"PageFilter\"] = \"page-filter\";\n DashboardObjectType[\"Legend\"] = \"legend\";\n DashboardObjectType[\"Title\"] = \"title\";\n DashboardObjectType[\"Text\"] = \"text\";\n DashboardObjectType[\"Image\"] = \"image\";\n DashboardObjectType[\"WebPage\"] = \"web-page\";\n DashboardObjectType[\"Extension\"] = \"extension\";\n })(DashboardObjectType = Tableau.DashboardObjectType || (Tableau.DashboardObjectType = {}));\n /**\n * Enum that represents the visibility state of a dashboard object.\n * @since 1.7.0\n */\n var DashboardObjectVisibilityType;\n (function (DashboardObjectVisibilityType) {\n /** Used for turning on the visibility of a dashboard object.*/\n DashboardObjectVisibilityType[\"Show\"] = \"show\";\n /** Used for turning off the visibility of a dashboard object.*/\n DashboardObjectVisibilityType[\"Hide\"] = \"hide\";\n })(DashboardObjectVisibilityType = Tableau.DashboardObjectVisibilityType || (Tableau.DashboardObjectVisibilityType = {}));\n /**\n * The different types of data a value can have\n */\n var DataType;\n (function (DataType) {\n DataType[\"String\"] = \"string\";\n DataType[\"Int\"] = \"int\";\n DataType[\"Float\"] = \"float\";\n DataType[\"Bool\"] = \"bool\";\n DataType[\"Date\"] = \"date\";\n DataType[\"DateTime\"] = \"date-time\";\n DataType[\"Spatial\"] = \"spatial\";\n DataType[\"Unknown\"] = \"unknown\";\n })(DataType = Tableau.DataType || (Tableau.DataType = {}));\n /**\n * Enum that represents the changes that occur to a dashboard object.\n */\n var DashboardLayoutChange;\n (function (DashboardLayoutChange) {\n /** A dashboard object was added */\n DashboardLayoutChange[\"Added\"] = \"added\";\n /** A dashboard object was removed */\n DashboardLayoutChange[\"Removed\"] = \"removed\";\n /** A dashboard object's floating state changed */\n DashboardLayoutChange[\"IsFloatingChanged\"] = \"is-floating-changed\";\n /** A dashboard object's visibility changed */\n DashboardLayoutChange[\"IsVisibleChanged\"] = \"is-visible-changed\";\n /** A dashboard object's position changed */\n DashboardLayoutChange[\"PositionChanged\"] = \"position-changed\";\n /** A dashboard object's size changed */\n DashboardLayoutChange[\"SizeChanged\"] = \"size-changed\";\n /** A dashboard object was renamed */\n DashboardLayoutChange[\"NameChanged\"] = \"name-changed\";\n /** A dashboard object is selected */\n DashboardLayoutChange[\"Selected\"] = \"selected\";\n /** A dashboard object is deselected */\n DashboardLayoutChange[\"Deselected\"] = \"deselected\";\n /** Navigate to another dashboard */\n DashboardLayoutChange[\"DashboardChanged\"] = \"dashboard-changed\";\n })(DashboardLayoutChange = Tableau.DashboardLayoutChange || (Tableau.DashboardLayoutChange = {}));\n /**\n * Valid date ranges for a relative date filter.\n */\n var DateRangeType;\n (function (DateRangeType) {\n DateRangeType[\"Last\"] = \"last\";\n DateRangeType[\"LastN\"] = \"last-n\";\n DateRangeType[\"Next\"] = \"next\";\n DateRangeType[\"NextN\"] = \"next-n\";\n DateRangeType[\"Current\"] = \"current\";\n DateRangeType[\"ToDate\"] = \"to-date\";\n })(DateRangeType = Tableau.DateRangeType || (Tableau.DateRangeType = {}));\n /**\n * Enum that represents the types of dialog popup styles.\n */\n var DialogStyle;\n (function (DialogStyle) {\n DialogStyle[\"Window\"] = \"window\";\n DialogStyle[\"Modal\"] = \"modal\";\n DialogStyle[\"Modeless\"] = \"modeless\";\n })(DialogStyle = Tableau.DialogStyle || (Tableau.DialogStyle = {}));\n var EncodingType;\n (function (EncodingType) {\n EncodingType[\"Column\"] = \"column\";\n EncodingType[\"Row\"] = \"row\";\n EncodingType[\"Page\"] = \"page\";\n EncodingType[\"Filter\"] = \"filter\";\n EncodingType[\"MarksType\"] = \"marks-type\";\n EncodingType[\"MeasureValues\"] = \"measure-values\";\n EncodingType[\"Color\"] = \"color\";\n EncodingType[\"Size\"] = \"size\";\n EncodingType[\"Label\"] = \"label\";\n EncodingType[\"Detail\"] = \"detail\";\n EncodingType[\"Tooltip\"] = \"tooltip\";\n EncodingType[\"Shape\"] = \"shape\";\n EncodingType[\"Path\"] = \"path\";\n EncodingType[\"Angle\"] = \"angle\";\n EncodingType[\"Geometry\"] = \"geometry\";\n EncodingType[\"Custom\"] = \"custom\";\n })(EncodingType = Tableau.EncodingType || (Tableau.EncodingType = {}));\n /**\n * Type of aggregation on a field.\n */\n var FieldAggregationType;\n (function (FieldAggregationType) {\n FieldAggregationType[\"Sum\"] = \"sum\";\n FieldAggregationType[\"Avg\"] = \"avg\";\n FieldAggregationType[\"Min\"] = \"min\";\n FieldAggregationType[\"Max\"] = \"max\";\n FieldAggregationType[\"Stdev\"] = \"stdev\";\n FieldAggregationType[\"Stdevp\"] = \"stdevp\";\n FieldAggregationType[\"Var\"] = \"var\";\n FieldAggregationType[\"Varp\"] = \"varp\";\n FieldAggregationType[\"Collect\"] = \"collect\";\n FieldAggregationType[\"Count\"] = \"count\";\n FieldAggregationType[\"Countd\"] = \"countd\";\n FieldAggregationType[\"Median\"] = \"median\";\n FieldAggregationType[\"Attr\"] = \"attr\";\n FieldAggregationType[\"None\"] = \"none\";\n FieldAggregationType[\"Year\"] = \"year\";\n FieldAggregationType[\"Qtr\"] = \"qtr\";\n FieldAggregationType[\"Month\"] = \"month\";\n FieldAggregationType[\"Day\"] = \"day\";\n FieldAggregationType[\"Hour\"] = \"hour\";\n FieldAggregationType[\"Minute\"] = \"minute\";\n FieldAggregationType[\"Second\"] = \"second\";\n FieldAggregationType[\"Week\"] = \"week\";\n FieldAggregationType[\"Weekday\"] = \"weekday\";\n FieldAggregationType[\"MonthYear\"] = \"month-year\";\n FieldAggregationType[\"Mdy\"] = \"mdy\";\n FieldAggregationType[\"End\"] = \"end\";\n FieldAggregationType[\"TruncYear\"] = \"trunc-year\";\n FieldAggregationType[\"TruncQtr\"] = \"trunc-qtr\";\n FieldAggregationType[\"TruncMonth\"] = \"trunc-month\";\n FieldAggregationType[\"TruncWeek\"] = \"trunc-week\";\n FieldAggregationType[\"TruncDay\"] = \"trunc-day\";\n FieldAggregationType[\"TruncHour\"] = \"trunc-hour\";\n FieldAggregationType[\"TruncMinute\"] = \"trunc-minute\";\n FieldAggregationType[\"TruncSecond\"] = \"trunc-second\";\n FieldAggregationType[\"Quart1\"] = \"quart1\";\n FieldAggregationType[\"Quart3\"] = \"quart3\";\n FieldAggregationType[\"Skewness\"] = \"skewness\";\n FieldAggregationType[\"Kurtosis\"] = \"kurtosis\";\n FieldAggregationType[\"InOut\"] = \"in-out\";\n FieldAggregationType[\"User\"] = \"user\";\n })(FieldAggregationType = Tableau.FieldAggregationType || (Tableau.FieldAggregationType = {}));\n /**\n * Role of a field.\n */\n var FieldRoleType;\n (function (FieldRoleType) {\n FieldRoleType[\"Dimension\"] = \"dimension\";\n FieldRoleType[\"Measure\"] = \"measure\";\n FieldRoleType[\"Unknown\"] = \"unknown\";\n })(FieldRoleType = Tableau.FieldRoleType || (Tableau.FieldRoleType = {}));\n /**\n * An enumeration of the valid types of filters that can be applied.\n */\n var FilterType;\n (function (FilterType) {\n FilterType[\"Categorical\"] = \"categorical\";\n FilterType[\"Range\"] = \"range\";\n FilterType[\"Hierarchical\"] = \"hierarchical\";\n FilterType[\"RelativeDate\"] = \"relative-date\";\n })(FilterType = Tableau.FilterType || (Tableau.FilterType = {}));\n /**\n * The different update types for applying filter\n */\n var FilterUpdateType;\n (function (FilterUpdateType) {\n FilterUpdateType[\"Add\"] = \"add\";\n FilterUpdateType[\"All\"] = \"all\";\n FilterUpdateType[\"Replace\"] = \"replace\";\n FilterUpdateType[\"Remove\"] = \"remove\";\n })(FilterUpdateType = Tableau.FilterUpdateType || (Tableau.FilterUpdateType = {}));\n /**\n * The domain type for a filter\n */\n var FilterDomainType;\n (function (FilterDomainType) {\n /**\n * The domain values that are relevant to the specified filter\n * i.e. the domain is restricted by a previous filter\n */\n FilterDomainType[\"Relevant\"] = \"relevant\";\n /**\n * list of all possible domain values from database\n */\n FilterDomainType[\"Database\"] = \"database\";\n })(FilterDomainType = Tableau.FilterDomainType || (Tableau.FilterDomainType = {}));\n /**\n * The option for specifying which values to include for filtering\n * Indicates what to do with null values for a given filter or mark selection call.\n */\n var FilterNullOption;\n (function (FilterNullOption) {\n FilterNullOption[\"NullValues\"] = \"null-values\";\n FilterNullOption[\"NonNullValues\"] = \"non-null-values\";\n FilterNullOption[\"AllValues\"] = \"all-values\";\n })(FilterNullOption = Tableau.FilterNullOption || (Tableau.FilterNullOption = {}));\n /**\n * Enum that serves as a filter on the DataValues returned from `getSummaryDataReaderAsync`,\n * `getUnderlyingTableDataReaderAsync` and `getLogicalTableDataReaderAsync`.\n * This is an optimization of returned data values only. Tableau versions prior to 2021.2\n * will pass the data across and populate the DataValue properties.\n * Please note that all properties not requested will be `undefined` in the DataValue results.\n * @since 1.5.0\n */\n var IncludeDataValuesOption;\n (function (IncludeDataValuesOption) {\n /** DataValues will include all properties.*/\n IncludeDataValuesOption[\"AllValues\"] = \"all-values\";\n /** DataValues will only include value and nativeValue properties.*/\n IncludeDataValuesOption[\"OnlyNativeValues\"] = \"only-native-values\";\n /** DataValues will only include formattedValue properties. */\n IncludeDataValuesOption[\"OnlyFormattedValues\"] = \"only-formatted-values\";\n })(IncludeDataValuesOption = Tableau.IncludeDataValuesOption || (Tableau.IncludeDataValuesOption = {}));\n /**\n * Type of mark for a given marks card in a viz.\n */\n var MarkType;\n (function (MarkType) {\n MarkType[\"Bar\"] = \"bar\";\n MarkType[\"Line\"] = \"line\";\n MarkType[\"Area\"] = \"area\";\n MarkType[\"Square\"] = \"square\";\n MarkType[\"Circle\"] = \"circle\";\n MarkType[\"Shape\"] = \"shape\";\n MarkType[\"Text\"] = \"text\";\n MarkType[\"Map\"] = \"map\";\n MarkType[\"Pie\"] = \"pie\";\n MarkType[\"GanttBar\"] = \"gantt-bar\";\n MarkType[\"Polygon\"] = \"polygon\";\n MarkType[\"Heatmap\"] = \"heatmap\";\n MarkType[\"VizExtension\"] = \"viz-extension\";\n })(MarkType = Tableau.MarkType || (Tableau.MarkType = {}));\n /**\n * An enumeration describing the different types of allowable values.\n * This is used for restricting the domain of a parameter\n */\n var ParameterValueType;\n (function (ParameterValueType) {\n ParameterValueType[\"All\"] = \"all\";\n ParameterValueType[\"List\"] = \"list\";\n ParameterValueType[\"Range\"] = \"range\";\n })(ParameterValueType = Tableau.ParameterValueType || (Tableau.ParameterValueType = {}));\n /**\n * Date period used in filters and in parameters.\n */\n var PeriodType;\n (function (PeriodType) {\n PeriodType[\"Years\"] = \"years\";\n PeriodType[\"Quarters\"] = \"quarters\";\n PeriodType[\"Months\"] = \"months\";\n PeriodType[\"Weeks\"] = \"weeks\";\n PeriodType[\"Days\"] = \"days\";\n PeriodType[\"Hours\"] = \"hours\";\n PeriodType[\"Minutes\"] = \"minutes\";\n PeriodType[\"Seconds\"] = \"seconds\";\n })(PeriodType = Tableau.PeriodType || (Tableau.PeriodType = {}));\n var QuickTableCalcType;\n (function (QuickTableCalcType) {\n QuickTableCalcType[\"RunningTotal\"] = \"running-total\";\n QuickTableCalcType[\"Difference\"] = \"difference\";\n QuickTableCalcType[\"PercentDifference\"] = \"percent-difference\";\n QuickTableCalcType[\"PercentOfTotal\"] = \"percent-of-total\";\n QuickTableCalcType[\"Rank\"] = \"rank\";\n QuickTableCalcType[\"Percentile\"] = \"percentile\";\n QuickTableCalcType[\"MovingAverage\"] = \"moving-average\";\n QuickTableCalcType[\"YTDTotal\"] = \"ytd-total\";\n QuickTableCalcType[\"CompoundGrowthRate\"] = \"compound-growth-rate\";\n QuickTableCalcType[\"YearOverYearGrowth\"] = \"year-over-year-growth\";\n QuickTableCalcType[\"YTDGrowth\"] = \"ytd-growth\";\n QuickTableCalcType[\"Undefined\"] = \"undefined\";\n })(QuickTableCalcType = Tableau.QuickTableCalcType || (Tableau.QuickTableCalcType = {}));\n /**\n * Enum for specifying the selection type for select marks api.\n */\n var SelectionUpdateType;\n (function (SelectionUpdateType) {\n SelectionUpdateType[\"Replace\"] = \"select-replace\";\n SelectionUpdateType[\"Add\"] = \"select-add\";\n SelectionUpdateType[\"Remove\"] = \"select-remove\";\n })(SelectionUpdateType = Tableau.SelectionUpdateType || (Tableau.SelectionUpdateType = {}));\n /**\n * Enum for specifying the select option for the {@link Worksheet.selectTuplesAsync} method.\n */\n var SelectOptions;\n (function (SelectOptions) {\n /**\n * Clears existing selection before selecting the tuples specified\n */\n SelectOptions[\"Simple\"] = \"select-options-simple\";\n /**\n * Adds specified tuples to the existing selection\n */\n SelectOptions[\"Toggle\"] = \"select-options-toggle\";\n })(SelectOptions = Tableau.SelectOptions || (Tableau.SelectOptions = {}));\n /**\n * The type of sheet a [[Sheet]] object represents\n */\n var SheetType;\n (function (SheetType) {\n SheetType[\"Dashboard\"] = \"dashboard\";\n SheetType[\"Story\"] = \"story\";\n SheetType[\"Worksheet\"] = \"worksheet\";\n })(SheetType = Tableau.SheetType || (Tableau.SheetType = {}));\n var SortDirection;\n (function (SortDirection) {\n SortDirection[\"Increasing\"] = \"increasing\";\n SortDirection[\"Decreasing\"] = \"decreasing\";\n })(SortDirection = Tableau.SortDirection || (Tableau.SortDirection = {}));\n var TrendLineModelType;\n (function (TrendLineModelType) {\n TrendLineModelType[\"Linear\"] = \"linear\";\n TrendLineModelType[\"Logarithmic\"] = \"logarithmic\";\n TrendLineModelType[\"Exponential\"] = \"exponential\";\n TrendLineModelType[\"Polynomial\"] = \"polynomial\";\n })(TrendLineModelType = Tableau.TrendLineModelType || (Tableau.TrendLineModelType = {}));\n /**\n * Enum that represents the replay speed of an animation.\n * @since 1.7.0\n */\n var ReplaySpeedType;\n (function (ReplaySpeedType) {\n /** Used for setting the replay speed of an animation to 0.5x.*/\n ReplaySpeedType[\"Slow\"] = \"slow\";\n /** Used for setting the replay speed of an animation to 1.0x.*/\n ReplaySpeedType[\"Normal\"] = \"normal\";\n /** Used for setting the replay speed of an animation to 2.0x.*/\n ReplaySpeedType[\"Fast\"] = \"fast\";\n })(ReplaySpeedType = Tableau.ReplaySpeedType || (Tableau.ReplaySpeedType = {}));\n /**\n * Enum that represents the selection state of a level in a hierarchical filter\n * @since Extensions 1.10.0\n */\n var HierarchicalLevelSelectionState;\n (function (HierarchicalLevelSelectionState) {\n HierarchicalLevelSelectionState[\"AllSelected\"] = \"all-selected\";\n HierarchicalLevelSelectionState[\"NoneSelected\"] = \"none-selected\";\n HierarchicalLevelSelectionState[\"SomeSelected\"] = \"some-selected\";\n HierarchicalLevelSelectionState[\"UnknownSelected\"] = \"unknown-selected\";\n })(HierarchicalLevelSelectionState = Tableau.HierarchicalLevelSelectionState || (Tableau.HierarchicalLevelSelectionState = {}));\n Tableau.ZoneVisibilityType = __assign({}, DashboardObjectVisibilityType);\n})(Tableau || (Tableau = {}));\nmodule.exports = Tableau;\n//# sourceMappingURL=Tableau.js.map","\"use strict\";\n// This file re-exports everything which is part of the shared api public interface\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./ExternalContract/Shared/Enums\"));\nvar Tableau_1 = require(\"./ExternalContract/Shared/Namespaces/Tableau\");\nexports.AnalyticsObjectType = Tableau_1.AnalyticsObjectType;\nexports.AnnotationType = Tableau_1.AnnotationType;\nexports.ClassNameKey = Tableau_1.ClassNameKey;\nexports.ColumnType = Tableau_1.ColumnType;\nexports.DashboardLayoutChange = Tableau_1.DashboardLayoutChange;\nexports.DashboardObjectType = Tableau_1.DashboardObjectType;\nexports.DashboardObjectVisibilityType = Tableau_1.DashboardObjectVisibilityType;\nexports.DataType = Tableau_1.DataType;\nexports.DateRangeType = Tableau_1.DateRangeType;\nexports.DialogStyle = Tableau_1.DialogStyle;\nexports.EncodingType = Tableau_1.EncodingType;\nexports.FieldAggregationType = Tableau_1.FieldAggregationType;\nexports.FieldRoleType = Tableau_1.FieldRoleType;\nexports.FilterDomainType = Tableau_1.FilterDomainType;\nexports.FilterNullOption = Tableau_1.FilterNullOption;\nexports.FilterType = Tableau_1.FilterType;\nexports.FilterUpdateType = Tableau_1.FilterUpdateType;\nexports.HierarchicalLevelSelectionState = Tableau_1.HierarchicalLevelSelectionState;\nexports.IncludeDataValuesOption = Tableau_1.IncludeDataValuesOption;\nexports.MarkType = Tableau_1.MarkType;\nexports.ParameterValueType = Tableau_1.ParameterValueType;\nexports.PeriodType = Tableau_1.PeriodType;\nexports.QuickTableCalcType = Tableau_1.QuickTableCalcType;\nexports.ReplaySpeedType = Tableau_1.ReplaySpeedType;\nexports.SelectOptions = Tableau_1.SelectOptions;\nexports.SelectionUpdateType = Tableau_1.SelectionUpdateType;\nexports.SheetType = Tableau_1.SheetType;\nexports.SortDirection = Tableau_1.SortDirection;\nexports.TrendLineModelType = Tableau_1.TrendLineModelType;\nexports.ZoneVisibilityType = Tableau_1.ZoneVisibilityType;\n//# sourceMappingURL=SharedApiExternalContract.js.map","\"use strict\";\n/**\n * This is your main. This is where you re-export everything you want to be publicly available.\n *\n * The build enforces that the file has the same name as the global variable that is exported.\n */\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// The following polyfills are needed for IE11\nrequire(\"core-js/es/number/is-integer\");\nrequire(\"core-js/es/number/is-nan\");\nrequire(\"core-js/es/object/assign\");\n// Export the version of the internal contract to be available at runtime\n// This file is generated by yarn publish:bump via scripts/publish-check.ts\n// updateInternalContractRuntimeVersion in the monorepo root.\nvar internalContractVersion = require(\"../internal-contract-version.json\");\nexports.INTERNAL_CONTRACT_VERSION = internalContractVersion;\n__export(require(\"./contract/DataTypeConverter\"));\n__export(require(\"./contract/Enums\"));\n__export(require(\"./contract/Notifications\"));\n__export(require(\"./contract/Parameters\"));\n__export(require(\"./contract/Verbs\"));\n__export(require(\"./interface/AskDataInterface\"));\n__export(require(\"./interface/PulseInterface\"));\n__export(require(\"./interface/VqlInterface\"));\n__export(require(\"./messaging/CrossFrameMessenger\"));\n__export(require(\"./messaging/interface/MessageTypes\"));\n__export(require(\"./versioning/VersionConverterFactory\"));\n__export(require(\"./versioning/external/ExternalIdentityVersionConverter\"));\n__export(require(\"./versioning/external/ExternalVersionConverterFactory\"));\n// Export the version number of messaging for consumers to use.\n// Be very careful making any updates to this contract which break version compatibility.\nexports.MESSAGING_VERSION = {\n major: 1,\n minor: 0,\n fix: 0,\n};\n//# sourceMappingURL=JsApiInternalContract.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Enums_1 = require(\"./Enums\");\nvar DataTypeConverter = /** @class */ (function () {\n function DataTypeConverter() {\n }\n DataTypeConverter.isSpecial = function (valueAsString) {\n // Prior to ShowDataTablePresModel, special values come to us as\n // '%null%', '%all%', '%wildcard%', '%missing%'...\n // While this function will never return true for ShowDataTablePresModel conversion,\n // it is as cheap as passing around a version and checking that.\n // (See DataValueFormatter.cpp)\n if (valueAsString.length > 2 && valueAsString[0] === '%' && valueAsString[valueAsString.length - 1] === '%') {\n return true;\n }\n return false;\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.parseBoolean = function (booleanString) {\n // boolean values come to us as 'true'|'false'\n var normalizedBoolean = booleanString.toLowerCase();\n return normalizedBoolean !== 'true' && normalizedBoolean !== 'false' ? this.specialValueIndicator : normalizedBoolean === 'true';\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.parseNumber = function (valueAsString) {\n var value = Number(valueAsString);\n return isNaN(value) ? this.specialValueIndicator : value;\n };\n DataTypeConverter.parseDate = function (dateAsString) {\n // Note that without a time, the date is assumed to be UTC\n // Input of 2020-03-25 is printed as: Mar 24 2020 17:00:00 GMT-0700\n // This matches style used in existing convertFilterValuePresModel\n var value = new Date(dateAsString);\n return Number.isNaN(value.getTime()) ? null : value;\n };\n DataTypeConverter.parseDateTime = function (dateAsString) {\n // With a time, the date is assumed to be UTC.\n // Our date format is always: yyyy-mm-dd hh:mm:ss\n // Unfortunately, IE11 can't parse that format so we add a T between the day and time.\n // We also add a Z so that it is UTC. (Without the Z, some browsers assume local, and others UTC)\n var formattedDateString = dateAsString.replace(' ', 'T').concat('Z');\n var value = new Date(formattedDateString);\n return Number.isNaN(value.getTime()) ? null : value;\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.convertValueAsStringToValue = function (valueAsString, type) {\n // This is both DataDictionary and ShowDataTablePresModel compatible.\n // In the DataDictionary, valueAsString can be '%null%' or '%missing%', while in\n // ShowDataTablePresModel, we can get 'null' or 'missing', or '%null%' for string special values.\n // For either of these cases, we return specialValueIndicator (or the original special string).\n // To maintain backwards compatibilty, this converter:\n // 1. returns a string for any special values\n // 2. returns a string for any date\n // Parameter min/max values can be undefined, so result is also undefined\n if (valueAsString === undefined || valueAsString === null) {\n return undefined;\n }\n if (this.isSpecial(valueAsString)) {\n return valueAsString;\n }\n switch (type) {\n case Enums_1.DataType.Bool:\n return this.parseBoolean(valueAsString);\n case Enums_1.DataType.Int:\n case Enums_1.DataType.Float:\n // Return special value '%null%' for any failure in parsing.\n // We need to do that because ShowDataTablePresModel will give us strings like 'null'\n // for special values.\n return this.parseNumber(valueAsString);\n case Enums_1.DataType.Date:\n // For ShowDataTablePresModel, special values will be \"null\" which will fail to parse.\n // In that case, we return '%null%'.\n return this.parseDate(valueAsString) === null ? this.specialValueIndicator : valueAsString;\n case Enums_1.DataType.DateTime:\n // For ShowDataTablePresModel, special values will be \"null\" which will fail to parse.\n // In that case, we return '%null%'\n return this.parseDateTime(valueAsString) === null ? this.specialValueIndicator : valueAsString;\n case Enums_1.DataType.Spatial:\n case Enums_1.DataType.String:\n default:\n return valueAsString;\n }\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.convertValueToNativeValue = function (value, type) {\n // This converts from our 1.2 API that returns strings for specials, and dates as strings.\n // It takes the special case of '%null%' and returns a null.\n // For dates, it returns a Date object rather than a string.\n // convertValueToNativeValue should be used to build a DataValue.nativeValue field.\n // Parameter min/max can be undefined. If that is the case, nativeValue is treated like a special\n if (value === undefined || value === null) {\n return null;\n }\n switch (type) {\n case Enums_1.DataType.Bool:\n return typeof value === 'string' ? null : value;\n case Enums_1.DataType.Int:\n case Enums_1.DataType.Float:\n return typeof value === 'string' ? null : value;\n case Enums_1.DataType.Date:\n // Convert the string to Date object (or null if parsing fails ... we assume special)\n return this.parseDate(value);\n case Enums_1.DataType.DateTime:\n // Convert the string to Date object (or null if parsing fails ... we assume special)\n return this.parseDateTime(value);\n case Enums_1.DataType.String:\n return this.isSpecial(value) ? null : value;\n case Enums_1.DataType.Spatial:\n default:\n return value;\n }\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.convertStringValueToNativeValue = function (value, type) {\n // This handles the conversion from string directly to native value for all types\n return this.convertValueToNativeValue(this.convertValueAsStringToValue(value, type), type);\n };\n DataTypeConverter.specialValueIndicator = '%null%';\n return DataTypeConverter;\n}());\nexports.DataTypeConverter = DataTypeConverter;\n//# sourceMappingURL=DataTypeConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ExtensionContext;\n(function (ExtensionContext) {\n ExtensionContext[\"Desktop\"] = \"desktop\";\n ExtensionContext[\"Server\"] = \"server\";\n ExtensionContext[\"Unknown\"] = \"unknown\";\n})(ExtensionContext = exports.ExtensionContext || (exports.ExtensionContext = {}));\nvar ExtensionMode;\n(function (ExtensionMode) {\n ExtensionMode[\"Authoring\"] = \"authoring\";\n ExtensionMode[\"Viewing\"] = \"viewing\";\n ExtensionMode[\"Unknown\"] = \"unknown\";\n})(ExtensionMode = exports.ExtensionMode || (exports.ExtensionMode = {}));\nvar AnnotateEnum;\n(function (AnnotateEnum) {\n AnnotateEnum[\"Mark\"] = \"mark\";\n AnnotateEnum[\"Point\"] = \"point\";\n AnnotateEnum[\"Area\"] = \"area\";\n})(AnnotateEnum = exports.AnnotateEnum || (exports.AnnotateEnum = {}));\nvar ColumnType;\n(function (ColumnType) {\n ColumnType[\"Discrete\"] = \"discrete\";\n ColumnType[\"Continuous\"] = \"continuous\";\n})(ColumnType = exports.ColumnType || (exports.ColumnType = {}));\nvar DashboardObjectType;\n(function (DashboardObjectType) {\n DashboardObjectType[\"Blank\"] = \"blank\";\n DashboardObjectType[\"Worksheet\"] = \"worksheet\";\n DashboardObjectType[\"QuickFilter\"] = \"quick-filter\";\n DashboardObjectType[\"ParameterControl\"] = \"parameter-control\";\n DashboardObjectType[\"PageFilter\"] = \"page-filter\";\n DashboardObjectType[\"Legend\"] = \"legend\";\n DashboardObjectType[\"Title\"] = \"title\";\n DashboardObjectType[\"Text\"] = \"text\";\n DashboardObjectType[\"Image\"] = \"image\";\n DashboardObjectType[\"WebPage\"] = \"web-page\";\n DashboardObjectType[\"Extension\"] = \"extension\";\n})(DashboardObjectType = exports.DashboardObjectType || (exports.DashboardObjectType = {}));\nvar DataType;\n(function (DataType) {\n DataType[\"String\"] = \"string\";\n DataType[\"Int\"] = \"int\";\n DataType[\"Float\"] = \"float\";\n DataType[\"Bool\"] = \"bool\";\n DataType[\"Date\"] = \"date\";\n DataType[\"DateTime\"] = \"date-time\";\n DataType[\"Spatial\"] = \"spatial\";\n DataType[\"Unknown\"] = \"unknown\";\n})(DataType = exports.DataType || (exports.DataType = {}));\nvar DialogStyle;\n(function (DialogStyle) {\n DialogStyle[\"Window\"] = \"window\";\n DialogStyle[\"Modal\"] = \"modal\";\n DialogStyle[\"Modeless\"] = \"modeless\";\n})(DialogStyle = exports.DialogStyle || (exports.DialogStyle = {}));\nvar EncodedDataType;\n(function (EncodedDataType) {\n EncodedDataType[\"Number\"] = \"number\";\n EncodedDataType[\"String\"] = \"string\";\n EncodedDataType[\"Date\"] = \"date\";\n EncodedDataType[\"Boolean\"] = \"boolean\";\n})(EncodedDataType = exports.EncodedDataType || (exports.EncodedDataType = {}));\nvar ErrorCodes;\n(function (ErrorCodes) {\n ErrorCodes[\"INITIALIZATION_ERROR\"] = \"initialization-error\";\n ErrorCodes[\"INTERNAL_ERROR\"] = \"internal-error\";\n ErrorCodes[\"MISSING_ENUM_MAPPING\"] = \"missing-enum-mapping\";\n ErrorCodes[\"MISSING_PARAMETER\"] = \"missing-parameter\";\n ErrorCodes[\"PERMISSION_DENIED\"] = \"permission-denied\";\n ErrorCodes[\"PRES_MODEL_PARSING_ERROR\"] = \"pres-model-parsing-error\";\n ErrorCodes[\"VERSION_NOT_CONFIGURED\"] = \"version-not-configured\";\n ErrorCodes[\"VISIBILITY_ERROR\"] = \"visibility-error\";\n ErrorCodes[\"UNKNOWN_VERB_ID\"] = \"unknown-verb-id\";\n})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));\nvar FieldAggregationType;\n(function (FieldAggregationType) {\n FieldAggregationType[\"Sum\"] = \"sum\";\n FieldAggregationType[\"Avg\"] = \"avg\";\n FieldAggregationType[\"Min\"] = \"min\";\n FieldAggregationType[\"Max\"] = \"max\";\n FieldAggregationType[\"Stdev\"] = \"stdev\";\n FieldAggregationType[\"Stdevp\"] = \"stdevp\";\n FieldAggregationType[\"Var\"] = \"var\";\n FieldAggregationType[\"Varp\"] = \"varp\";\n FieldAggregationType[\"Collect\"] = \"collect\";\n FieldAggregationType[\"Count\"] = \"count\";\n FieldAggregationType[\"Countd\"] = \"countd\";\n FieldAggregationType[\"Median\"] = \"median\";\n FieldAggregationType[\"Attr\"] = \"attr\";\n FieldAggregationType[\"None\"] = \"none\";\n FieldAggregationType[\"Year\"] = \"year\";\n FieldAggregationType[\"Qtr\"] = \"qtr\";\n FieldAggregationType[\"Month\"] = \"month\";\n FieldAggregationType[\"Day\"] = \"day\";\n FieldAggregationType[\"Hour\"] = \"hour\";\n FieldAggregationType[\"Minute\"] = \"minute\";\n FieldAggregationType[\"Second\"] = \"second\";\n FieldAggregationType[\"Week\"] = \"week\";\n FieldAggregationType[\"Weekday\"] = \"weekday\";\n FieldAggregationType[\"MonthYear\"] = \"month-year\";\n FieldAggregationType[\"Mdy\"] = \"mdy\";\n FieldAggregationType[\"End\"] = \"end\";\n FieldAggregationType[\"TruncYear\"] = \"trunc-year\";\n FieldAggregationType[\"TruncQtr\"] = \"trunc-qtr\";\n FieldAggregationType[\"TruncMonth\"] = \"trunc-month\";\n FieldAggregationType[\"TruncWeek\"] = \"trunc-week\";\n FieldAggregationType[\"TruncDay\"] = \"trunc-day\";\n FieldAggregationType[\"TruncHour\"] = \"trunc-hour\";\n FieldAggregationType[\"TruncMinute\"] = \"trunc-minute\";\n FieldAggregationType[\"TruncSecond\"] = \"trunc-second\";\n FieldAggregationType[\"Quart1\"] = \"quart1\";\n FieldAggregationType[\"Quart3\"] = \"quart3\";\n FieldAggregationType[\"Skewness\"] = \"skewness\";\n FieldAggregationType[\"Kurtosis\"] = \"kurtosis\";\n FieldAggregationType[\"InOut\"] = \"in-out\";\n FieldAggregationType[\"User\"] = \"user\";\n})(FieldAggregationType = exports.FieldAggregationType || (exports.FieldAggregationType = {}));\nvar FieldRoleType;\n(function (FieldRoleType) {\n FieldRoleType[\"Dimension\"] = \"dimension\";\n FieldRoleType[\"Measure\"] = \"measure\";\n FieldRoleType[\"Unknown\"] = \"unknown\";\n})(FieldRoleType = exports.FieldRoleType || (exports.FieldRoleType = {}));\n/**\n * The different update types for applying filter.\n */\nvar FilterUpdateType;\n(function (FilterUpdateType) {\n FilterUpdateType[\"Add\"] = \"add\";\n FilterUpdateType[\"All\"] = \"all\";\n FilterUpdateType[\"Replace\"] = \"replace\";\n FilterUpdateType[\"Remove\"] = \"remove\";\n})(FilterUpdateType = exports.FilterUpdateType || (exports.FilterUpdateType = {}));\nvar SheetType;\n(function (SheetType) {\n SheetType[\"Dashboard\"] = \"dashboard\";\n SheetType[\"Story\"] = \"story\";\n SheetType[\"Worksheet\"] = \"worksheet\";\n})(SheetType = exports.SheetType || (exports.SheetType = {}));\nvar DomainRestrictionType;\n(function (DomainRestrictionType) {\n DomainRestrictionType[\"All\"] = \"all\";\n DomainRestrictionType[\"List\"] = \"list\";\n DomainRestrictionType[\"Range\"] = \"range\";\n})(DomainRestrictionType = exports.DomainRestrictionType || (exports.DomainRestrictionType = {}));\nvar DateStepPeriod;\n(function (DateStepPeriod) {\n DateStepPeriod[\"Years\"] = \"years\";\n DateStepPeriod[\"Quarters\"] = \"quarters\";\n DateStepPeriod[\"Months\"] = \"months\";\n DateStepPeriod[\"Weeks\"] = \"weeks\";\n DateStepPeriod[\"Days\"] = \"days\";\n DateStepPeriod[\"Hours\"] = \"hours\";\n DateStepPeriod[\"Minutes\"] = \"minutes\";\n DateStepPeriod[\"Seconds\"] = \"seconds\";\n})(DateStepPeriod = exports.DateStepPeriod || (exports.DateStepPeriod = {}));\n/**\n * The option for specifying which values to include for filtering.\n */\nvar FilterNullOption;\n(function (FilterNullOption) {\n FilterNullOption[\"NullValues\"] = \"nullvalues\";\n FilterNullOption[\"NonNullValues\"] = \"nonnullvalues\";\n FilterNullOption[\"AllValues\"] = \"allvalues\";\n})(FilterNullOption = exports.FilterNullOption || (exports.FilterNullOption = {}));\n/**\n * The type of filter domain\n */\nvar FilterDomainType;\n(function (FilterDomainType) {\n FilterDomainType[\"Relevant\"] = \"relevant\";\n FilterDomainType[\"Database\"] = \"database\";\n})(FilterDomainType = exports.FilterDomainType || (exports.FilterDomainType = {}));\n/**\n * Internal enum for specifying the selection type for select marks api.\n */\nvar SelectionUpdateType;\n(function (SelectionUpdateType) {\n SelectionUpdateType[\"Replace\"] = \"select-replace\";\n SelectionUpdateType[\"Add\"] = \"select-add\";\n SelectionUpdateType[\"Remove\"] = \"select-remove\";\n})(SelectionUpdateType = exports.SelectionUpdateType || (exports.SelectionUpdateType = {}));\n/**\n * Internal enum for specifying the select option for the select tuples api.\n */\nvar SelectOptions;\n(function (SelectOptions) {\n SelectOptions[\"Simple\"] = \"select-options-simple\";\n SelectOptions[\"Toggle\"] = \"select-options-toggle\";\n SelectOptions[\"Menu\"] = \"select-options-menu\";\n SelectOptions[\"Range\"] = \"select-options-range\";\n SelectOptions[\"Search\"] = \"select-options-search\";\n})(SelectOptions = exports.SelectOptions || (exports.SelectOptions = {}));\n/**\n * Internal enum for specifying the included values type for range selection.\n */\nvar QuantitativeIncludedValues;\n(function (QuantitativeIncludedValues) {\n QuantitativeIncludedValues[\"IncludeNull\"] = \"include-null\";\n QuantitativeIncludedValues[\"IncludeNonNull\"] = \"include-non-null\";\n QuantitativeIncludedValues[\"IncludeAll\"] = \"include-all\";\n})(QuantitativeIncludedValues = exports.QuantitativeIncludedValues || (exports.QuantitativeIncludedValues = {}));\n/**\n * Internal enum for specifying a hierarchical level selection state.\n */\nvar HierarchicalLevelSelectionState;\n(function (HierarchicalLevelSelectionState) {\n HierarchicalLevelSelectionState[\"AllSelected\"] = \"all-selected\";\n HierarchicalLevelSelectionState[\"NoneSelected\"] = \"none-selected\";\n HierarchicalLevelSelectionState[\"SomeSelected\"] = \"some-selected\";\n HierarchicalLevelSelectionState[\"UnknownSelected\"] = \"unknown-selected\";\n})(HierarchicalLevelSelectionState = exports.HierarchicalLevelSelectionState || (exports.HierarchicalLevelSelectionState = {}));\n/**\n * Type of mark for a given marks card in a viz.\n */\nvar MarkType;\n(function (MarkType) {\n MarkType[\"Bar\"] = \"bar\";\n MarkType[\"Line\"] = \"line\";\n MarkType[\"Area\"] = \"area\";\n MarkType[\"Square\"] = \"square\";\n MarkType[\"Circle\"] = \"circle\";\n MarkType[\"Shape\"] = \"shape\";\n MarkType[\"Text\"] = \"text\";\n MarkType[\"Map\"] = \"map\";\n MarkType[\"Pie\"] = \"pie\";\n MarkType[\"GanttBar\"] = \"gantt-bar\";\n MarkType[\"Polygon\"] = \"polygon\";\n MarkType[\"Heatmap\"] = \"heatmap\";\n MarkType[\"VizExtension\"] = \"viz-extension\";\n})(MarkType = exports.MarkType || (exports.MarkType = {}));\n/**\n * Internal enum for specifying the type of filter\n */\nvar FilterType;\n(function (FilterType) {\n FilterType[\"Categorical\"] = \"categorical\";\n FilterType[\"Range\"] = \"range\";\n FilterType[\"RelativeDate\"] = \"relativeDate\";\n FilterType[\"Hierarchical\"] = \"hierarchical\";\n})(FilterType = exports.FilterType || (exports.FilterType = {}));\n/**\n * Internal enum for specifying the DateRangeType of a relative date filter\n */\nvar DateRangeType;\n(function (DateRangeType) {\n /**\n * Refers to the last day, week, month, etc. of the date period.\n */\n DateRangeType[\"Last\"] = \"last\";\n /**\n * Refers to the last N days, weeks, months, etc. of the date period.\n */\n DateRangeType[\"LastN\"] = \"lastN\";\n /**\n * Refers to the next day, week, month, etc. of the date period.\n */\n DateRangeType[\"Next\"] = \"next\";\n /**\n * Refers to the next N days, weeks, months, etc. of the date period.\n */\n DateRangeType[\"NextN\"] = \"nextN\";\n /**\n * Refers to the current day, week, month, etc. of the date period.\n */\n DateRangeType[\"Current\"] = \"current\";\n /**\n * Refers to everything up to and including the current day, week, month, etc. of the date period.\n */\n DateRangeType[\"ToDate\"] = \"toDate\";\n})(DateRangeType = exports.DateRangeType || (exports.DateRangeType = {}));\n/**\n * Used to determine if the launching of an extension dialog succeeded or failed.\n */\nvar ExtensionDialogResult;\n(function (ExtensionDialogResult) {\n ExtensionDialogResult[\"DialogAlreadyOpen\"] = \"dialog-already-open\";\n ExtensionDialogResult[\"InvalidDomain\"] = \"invalid-domain\";\n ExtensionDialogResult[\"Success\"] = \"success\";\n})(ExtensionDialogResult = exports.ExtensionDialogResult || (exports.ExtensionDialogResult = {}));\n// Enumeration for ApiShowData table id sentinels.\nvar ApiShowDataTableSentinel;\n(function (ApiShowDataTableSentinel) {\n // find the one logical table - used in version compatibility check for getUnderlyingDataTable and getLogicalDataTable commands\n ApiShowDataTableSentinel[\"SingleTableId\"] = \"single-table-id-sentinel\";\n ApiShowDataTableSentinel[\"SingleTableCaption\"] = \"Single table id sentinel\";\n})(ApiShowDataTableSentinel = exports.ApiShowDataTableSentinel || (exports.ApiShowDataTableSentinel = {}));\n/**\n * Used to optimize the getSummaryData/getUnderlyingTableData results\n * Mapped from external IncludeDataValuesOption\n */\nvar ApiShowDataTableFormat;\n(function (ApiShowDataTableFormat) {\n ApiShowDataTableFormat[\"NativeValuesOnly\"] = \"native-values-only\";\n ApiShowDataTableFormat[\"FormattedValuesOnly\"] = \"formatted-values-only\";\n ApiShowDataTableFormat[\"NativeAndFormattedValues\"] = \"native-and-formatted-values\";\n})(ApiShowDataTableFormat = exports.ApiShowDataTableFormat || (exports.ApiShowDataTableFormat = {}));\n/**\n * Used to set page size for export layout options.\n */\nvar PageSizeOption;\n(function (PageSizeOption) {\n PageSizeOption[\"Letter\"] = \"letter\";\n PageSizeOption[\"Legal\"] = \"legal\";\n PageSizeOption[\"Note\"] = \"note\";\n PageSizeOption[\"Folio\"] = \"folio\";\n PageSizeOption[\"Tabloid\"] = \"tabloid\";\n PageSizeOption[\"Ledger\"] = \"ledger\";\n PageSizeOption[\"Statement\"] = \"statement\";\n PageSizeOption[\"Executive\"] = \"executive\";\n PageSizeOption[\"A3\"] = \"a3\";\n PageSizeOption[\"A4\"] = \"a4\";\n PageSizeOption[\"A5\"] = \"a5\";\n PageSizeOption[\"B4\"] = \"b4\";\n PageSizeOption[\"B5\"] = \"b5\";\n PageSizeOption[\"Quarto\"] = \"quarto\";\n PageSizeOption[\"Unspecified\"] = \"unspecified\";\n})(PageSizeOption = exports.PageSizeOption || (exports.PageSizeOption = {}));\n/**\n * Used to set the page orientation mode for export layout options.\n */\nvar PageOrientation;\n(function (PageOrientation) {\n PageOrientation[\"Printer\"] = \"printer\";\n PageOrientation[\"Portrait\"] = \"portrait\";\n PageOrientation[\"Landscape\"] = \"landscape\";\n})(PageOrientation = exports.PageOrientation || (exports.PageOrientation = {}));\n/**\n * Used to set scale mode for export layout options.\n */\nvar ScaleMode;\n(function (ScaleMode) {\n ScaleMode[\"ScaleAuto\"] = \"auto\";\n ScaleMode[\"ScalePercentage\"] = \"percent\";\n ScaleMode[\"ScaleFitPages\"] = \"fit-pages\";\n})(ScaleMode = exports.ScaleMode || (exports.ScaleMode = {}));\n/**\n * Used by setFitAndScaleValues to scale percent values\n */\nvar PageScalingOption;\n(function (PageScalingOption) {\n PageScalingOption[\"ScalePctAuto\"] = \"auto\";\n PageScalingOption[\"ScalePct400\"] = \"pct400\";\n PageScalingOption[\"ScalePct200\"] = \"pct200\";\n PageScalingOption[\"ScalePct100\"] = \"pct100\";\n PageScalingOption[\"ScalePct90\"] = \"pct90\";\n PageScalingOption[\"ScalePct80\"] = \"pct80\";\n PageScalingOption[\"ScalePct75\"] = \"pct75\";\n PageScalingOption[\"ScalePct60\"] = \"pct60\";\n PageScalingOption[\"ScalePct50\"] = \"pct50\";\n PageScalingOption[\"ScalePct25\"] = \"pct25\";\n})(PageScalingOption = exports.PageScalingOption || (exports.PageScalingOption = {}));\n/**\n * Used by setFitAndScaleValues to scale fit page values\n */\nvar FitPages;\n(function (FitPages) {\n FitPages[\"FitOneHigh\"] = \"fit0x1\";\n FitPages[\"FitTwoHigh\"] = \"fit0x2\";\n FitPages[\"FitOneWide\"] = \"fit1x0\";\n FitPages[\"FitTwoWide\"] = \"fit2x0\";\n})(FitPages = exports.FitPages || (exports.FitPages = {}));\n/**\n * Used by getVisualSpecificationAsync\n */\nvar EncodingType;\n(function (EncodingType) {\n EncodingType[\"Color\"] = \"color\";\n EncodingType[\"Size\"] = \"size\";\n EncodingType[\"Label\"] = \"label\";\n EncodingType[\"Detail\"] = \"detail\";\n EncodingType[\"Tooltip\"] = \"tooltip\";\n EncodingType[\"Shape\"] = \"shape\";\n EncodingType[\"Path\"] = \"path\";\n EncodingType[\"Angle\"] = \"angle\";\n EncodingType[\"Geometry\"] = \"geometry\";\n EncodingType[\"Custom\"] = \"custom\";\n})(EncodingType = exports.EncodingType || (exports.EncodingType = {}));\n//# sourceMappingURL=Enums.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NotificationId;\n(function (NotificationId) {\n NotificationId[\"CustomMarkContextMenuClicked\"] = \"custom-mark-context-menu-clicked\";\n NotificationId[\"ContextMenuClick\"] = \"context-menu-click\";\n NotificationId[\"CustomViewRemoved\"] = \"custom-view-removed\";\n NotificationId[\"CustomViewSaved\"] = \"custom-view-saved\";\n NotificationId[\"CustomViewSetDefault\"] = \"custom-view-set-default\";\n NotificationId[\"CustomViewsLoaded\"] = \"custom-views-loaded\";\n NotificationId[\"DashboardLayoutChanged\"] = \"dashboard-layout-changed\";\n NotificationId[\"EditButtonClicked\"] = \"edit-button-clicked\";\n NotificationId[\"EditInDesktopButtonClicked\"] = \"edit-in-desktop-button-clicked\";\n NotificationId[\"ExtensionDialogUpdate\"] = \"extension-dialog-update\";\n NotificationId[\"FilterChanged\"] = \"filter-changed\";\n NotificationId[\"FirstVizSizeKnown\"] = \"first-viz-size-known\";\n NotificationId[\"ParameterChanged\"] = \"parameter-changed\";\n NotificationId[\"SelectedMarksChanged\"] = \"selected-marks-changed\";\n NotificationId[\"SettingsChanged\"] = \"settings-changed\";\n NotificationId[\"SummaryDataChanged\"] = \"summary-data-changed\";\n NotificationId[\"TestConversionNotification\"] = \"test-conversion-notification\";\n NotificationId[\"ToolbarStateChanged\"] = \"toolbar-state-changed\";\n NotificationId[\"VizInteractive\"] = \"viz-interactive\";\n NotificationId[\"AskDataInteractive\"] = \"ask-data-interactive\";\n NotificationId[\"WorkbookReadyToClose\"] = \"workbook-ready-to-close\";\n NotificationId[\"WorkbookFormattingChanged\"] = \"workbook-formatting-changed\";\n NotificationId[\"WorkbookPublished\"] = \"workbook-published\";\n NotificationId[\"WorkbookPublishedAs\"] = \"workbook-published-as\";\n NotificationId[\"UrlAction\"] = \"url-action\";\n NotificationId[\"TabSwitched\"] = \"tab-switched\";\n NotificationId[\"StoryPointSwitched\"] = \"story-point-switched\";\n NotificationId[\"ReadyToReceiveAuthToken\"] = \"ready-to-receive-auth-token\";\n})(NotificationId = exports.NotificationId || (exports.NotificationId = {}));\n//# sourceMappingURL=Notifications.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put\n// new ones, and merge conflicts.\nvar ParameterId;\n(function (ParameterId) {\n ParameterId[\"ActiveTablesInfo\"] = \"active-tables-info\";\n ParameterId[\"AnchorDate\"] = \"anchor-date\";\n ParameterId[\"AnnotateEnum\"] = \"annotate-enum\";\n ParameterId[\"AnnotationList\"] = \"annotation-list\";\n ParameterId[\"CategoricalDomain\"] = \"categorical-domain\";\n ParameterId[\"ClickThroughEnabled\"] = \"click-through-enabled\";\n ParameterId[\"ColumnsToInclude\"] = \"columns-to-include\";\n ParameterId[\"ColumnsToIncludeById\"] = \"columns-to-include-by-id\";\n ParameterId[\"ConnectionDescriptionSummaries\"] = \"connection-description-summaries\";\n ParameterId[\"CurrentSheetType\"] = \"current-sheet-type\";\n ParameterId[\"CustomView\"] = \"custom-view\";\n ParameterId[\"CustomViewIsDefault\"] = \"custom-view-is-default\";\n ParameterId[\"CustomViewIsPublic\"] = \"custom-view-is-public\";\n ParameterId[\"CustomViewLuid\"] = \"custom-view-luid\";\n ParameterId[\"CustomViewName\"] = \"custom-view-name\";\n ParameterId[\"CustomViews\"] = \"custom-views\";\n ParameterId[\"Dashboard\"] = \"dashboard\";\n ParameterId[\"DashboardFilters\"] = \"dashboard-filters\";\n ParameterId[\"DashboardName\"] = \"dashboard\";\n ParameterId[\"DashboardObjectPositionAndSizeUpdate\"] = \"dashboard-object-position-and-size-update\";\n ParameterId[\"DashboardObjectPositionAndSizeUpdateList\"] = \"dashboard-object-position-and-size-update-list\";\n ParameterId[\"DataRowIndex\"] = \"data-row-index\";\n ParameterId[\"DataSchema\"] = \"data-schema\";\n ParameterId[\"DataSource\"] = \"data-source\";\n ParameterId[\"DataSourceDataTable\"] = \"data-source-data-table\";\n ParameterId[\"DataSourceId\"] = \"data-source-id\";\n ParameterId[\"DataSourceName\"] = \"data-source-name\";\n ParameterId[\"DataTable\"] = \"data-table\";\n ParameterId[\"DataTableReader\"] = \"data-table-reader\";\n ParameterId[\"DateRangeType\"] = \"date-range-type\";\n ParameterId[\"DeltaTimeMs\"] = \"delta-time-ms\";\n ParameterId[\"DimValSelectionModels\"] = \"dimensionValueSelectionModels\";\n ParameterId[\"DomainType\"] = \"domain-type\";\n ParameterId[\"EmbeddingAbstractQuery\"] = \"embedding-abstract-query\";\n ParameterId[\"EmbeddingBootstrapInfo\"] = \"embedding-bootstrap-info\";\n ParameterId[\"ExportCrosstabSheetMap\"] = \"export-crosstab-sheet-map\";\n ParameterId[\"ExportFile\"] = \"export-file\";\n ParameterId[\"ExportOriginUrl\"] = \"export-origin-url\";\n ParameterId[\"ExportPdfOptions\"] = \"export-pdf-options\";\n ParameterId[\"ExtensionBootstrapInfo\"] = \"extension-bootstrap-info\";\n ParameterId[\"ExtensionContextMenuIds\"] = \"extension-context-menu-ids\";\n ParameterId[\"ExtensionDialogH\"] = \"extension-dialog-height\";\n ParameterId[\"ExtensionDialogPayload\"] = \"extension-dialog-payload\";\n ParameterId[\"ExtensionDialogResult\"] = \"extension-dialog-result\";\n ParameterId[\"ExtensionDialogStyle\"] = \"extension-dialog-style\";\n ParameterId[\"ExtensionDialogUrl\"] = \"extension-dialog-url\";\n ParameterId[\"ExtensionDialogW\"] = \"extension-dialog-width\";\n ParameterId[\"ExtensionLocator\"] = \"extension-locator\";\n ParameterId[\"ExtensionSettingsInfo\"] = \"extension-settings-info\";\n ParameterId[\"ExtensionZoneId\"] = \"extension-zone-id\";\n ParameterId[\"ExternalMenuDescription\"] = \"external-menu-description\";\n ParameterId[\"ExternalMenuHeader\"] = \"external-menu-header\";\n ParameterId[\"ExternalMenuItemDisplayName\"] = \"external-menu-item-display-name\";\n ParameterId[\"ExternalMenuItemId\"] = \"external-menu-item-id\";\n ParameterId[\"Field\"] = \"field\";\n ParameterId[\"FieldId\"] = \"field-id\";\n ParameterId[\"FieldName\"] = \"field-name\";\n ParameterId[\"FilterLevels\"] = \"filter-levels\";\n ParameterId[\"FilterRangeMax\"] = \"filter-range-max\";\n ParameterId[\"FilterRangeMin\"] = \"filter-range-min\";\n ParameterId[\"FilterRangeNullOption\"] = \"filter-range-null-option\";\n ParameterId[\"FilterUpdateType\"] = \"filter-update-type\";\n ParameterId[\"FilterValues\"] = \"filter-values\";\n ParameterId[\"FontNameListItems\"] = \"font-name-list-items\";\n ParameterId[\"FormattedText\"] = \"formatted-text\";\n ParameterId[\"FunctionName\"] = \"function-name\";\n ParameterId[\"HierValSelectionModels\"] = \"hierarchicalValueSelectionModels\";\n ParameterId[\"HighlightedData\"] = \"highlighted-data\";\n ParameterId[\"HoverTupleInteraction\"] = \"hover-tuple-interaction\";\n ParameterId[\"IgnoreAliases\"] = \"ignore-aliases\";\n ParameterId[\"IgnoreSelection\"] = \"ignore-selection\";\n ParameterId[\"IncludeAllColumns\"] = \"include-all-columns\";\n ParameterId[\"InvalidAggFieldName\"] = \"invalid-agg-field-name\";\n ParameterId[\"InvalidDates\"] = \"invalid-dates\";\n ParameterId[\"InvalidFieldCaption\"] = \"invalid-field-caption\";\n ParameterId[\"InvalidFields\"] = \"invalid-fields\";\n ParameterId[\"InvalidValues\"] = \"invalid-values\";\n ParameterId[\"IsExcludeMode\"] = \"is-exclude\";\n ParameterId[\"IsExtensionDialog\"] = \"is-extension-dialog\";\n ParameterId[\"JoinDescription\"] = \"join-description\";\n ParameterId[\"LogicalTableId\"] = \"logical-table-id\";\n ParameterId[\"LogicalTableInfoList\"] = \"logical-table-info-list\";\n ParameterId[\"MaxHeight\"] = \"max-height\";\n ParameterId[\"MaxRows\"] = \"max-rows\";\n ParameterId[\"MaxWidth\"] = \"max-width\";\n ParameterId[\"MinHeight\"] = \"min-height\";\n ParameterId[\"MinWidth\"] = \"min-width\";\n ParameterId[\"PageRowCount\"] = \"page-row-count\";\n ParameterId[\"ParameterCaption\"] = \"paremeter-caption\";\n ParameterId[\"ParameterError\"] = \"parameter-error\";\n ParameterId[\"ParameterFieldName\"] = \"parameter-field-name\";\n ParameterId[\"ParameterInfo\"] = \"parameter-info\";\n ParameterId[\"ParameterInfos\"] = \"parameter-infos\";\n ParameterId[\"ParameterValue\"] = \"parameter-value\";\n ParameterId[\"PeriodType\"] = \"period-type\";\n ParameterId[\"QuantitativeDomain\"] = \"quantitative-dmain\";\n ParameterId[\"QuantRangeSelectionModels\"] = \"quantativeRangeSelectionModels\";\n ParameterId[\"RangeN\"] = \"range-n\";\n ParameterId[\"ReplaySpeed\"] = \"replay-speed\";\n ParameterId[\"SelectedData\"] = \"selected-data\";\n ParameterId[\"SelectedSheetNames\"] = \"selected-sheet-names\";\n ParameterId[\"Selection\"] = \"selection\";\n ParameterId[\"SelectionList\"] = \"selection-list\";\n ParameterId[\"SelectionUpdateType\"] = \"selectionUpdateType\";\n ParameterId[\"SelectTuplesInteraction\"] = \"select-tuples-interaction\";\n ParameterId[\"SendNotifications\"] = \"send-notifications\";\n ParameterId[\"SettingsValues\"] = \"settings-values\";\n ParameterId[\"SharedFilterSheets\"] = \"shared-filter-sheets\";\n ParameterId[\"SharedFiltersInfo\"] = \"shared-filters-info\";\n ParameterId[\"SheetIdentifier\"] = \"sheet-identifier\";\n ParameterId[\"SheetName\"] = \"sheet-name\";\n ParameterId[\"SheetPath\"] = \"sheet-path\";\n ParameterId[\"ShouldRefreshDS\"] = \"should-refresh-ds\";\n ParameterId[\"ShowDataTableFormat\"] = \"show-data-table-format\";\n ParameterId[\"State\"] = \"state\";\n ParameterId[\"StoryPointIndex\"] = \"story-point-index\";\n ParameterId[\"StoryPointInfo\"] = \"story-point-info\";\n ParameterId[\"SwitchToSheetName\"] = \"switch-to-sheet-name\";\n ParameterId[\"TargetPoint\"] = \"target-point\";\n ParameterId[\"TestConversionParameter\"] = \"test-conversion-parameter\";\n ParameterId[\"Text\"] = \"formatted-text\";\n ParameterId[\"TooltipContext\"] = \"tooltip-context\";\n ParameterId[\"UnderlyingDataTable\"] = \"underlying-data-table\";\n ParameterId[\"UnderlyingSummaryDataTable\"] = \"underlying-summary-data-table\";\n ParameterId[\"Url\"] = \"url\";\n ParameterId[\"UseTabDelimiters\"] = \"use-tab-delimiters\";\n ParameterId[\"ViewDataTableCacheId\"] = \"view-data-table-cache-id\";\n ParameterId[\"ViewDataTableId\"] = \"view-data-table-id\";\n ParameterId[\"VisualId\"] = \"visual-id\";\n ParameterId[\"VisualSpecification\"] = \"visual-specification\";\n ParameterId[\"VizAPIInputJson\"] = \"vizapi-input-json\";\n ParameterId[\"VizAPIStateWithDataModel\"] = \"vizapi-state-with-data-model\";\n ParameterId[\"VizAPIStateWarningMsg\"] = \"vizapi-state-warning-msg\";\n ParameterId[\"VizAPISVG\"] = \"vizapi-svg\";\n ParameterId[\"WorksheetName\"] = \"worksheet-name\";\n ParameterId[\"WorksheetFilters\"] = \"worksheet-filters\";\n ParameterId[\"ZoneIdsVisibilityMap\"] = \"zone-ids-visibility-map\";\n})(ParameterId = exports.ParameterId || (exports.ParameterId = {}));\n//# sourceMappingURL=Parameters.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Declare this key type and export the NotificationId to make this behave like a string enum.\n//\n// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put\n// new ones, and merge conflicts.\nvar VerbId;\n(function (VerbId) {\n VerbId[\"ActivateNextStoryPoint\"] = \"activate-next-story-point\";\n VerbId[\"ActivatePreviousStoryPoint\"] = \"activate-previous-story-point\";\n VerbId[\"ActivateSheet\"] = \"activateSheet\";\n VerbId[\"ActivateStoryPoint\"] = \"activate-story-point\";\n VerbId[\"AppendExternalMenuItem\"] = \"append-external-menu-item\";\n VerbId[\"ApplyCategoricalFilter\"] = \"categorical-filter\";\n VerbId[\"ApplyRangeFilter\"] = \"range-filter\";\n VerbId[\"ApplyRelativeDateFilter\"] = \"apply-relative-date-Filter\";\n VerbId[\"Authenticate\"] = \"authenticate\";\n VerbId[\"BlockExtension\"] = \"block-extension\";\n VerbId[\"ChangeParameterValue\"] = \"change-parameter-value\";\n VerbId[\"ChangeSharedFilter\"] = \"change-shared-filter\";\n VerbId[\"ClearFilter\"] = \"clear-filter\";\n VerbId[\"ClearSelectedMarks\"] = \"clear-selected-marks\";\n VerbId[\"CloseDialog\"] = \"close-dialog\";\n VerbId[\"CreateAnnotation\"] = \"create-annotation\";\n VerbId[\"DashboardCategoricalFilter\"] = \"dashboard-categorical-filter\";\n VerbId[\"DisplayDialog\"] = \"display-dialog\";\n VerbId[\"DownloadWorkbook\"] = \"download-workbook\";\n VerbId[\"ExecuteExternalMenuItem\"] = \"execute-external-menu-item\";\n VerbId[\"ExportCrosstab\"] = \"export-crosstab\";\n VerbId[\"ExportCrosstabCsvDownload\"] = \"export-crosstab-csv-download\";\n VerbId[\"ExportCrosstabExcelDownload\"] = \"export-crosstab-excel-download\";\n VerbId[\"ExportData\"] = \"export-data\";\n VerbId[\"ExportDataDownload\"] = \"export-data-download\";\n VerbId[\"ExportImage\"] = \"export-image\";\n VerbId[\"ExportPdf\"] = \"export-pdf\";\n VerbId[\"ExportPdfDownload\"] = \"export-pdf-download\";\n VerbId[\"ExportPowerpoint\"] = \"export-powerpoint\";\n VerbId[\"ExportPowerpointDownload\"] = \"export-powerpoint-download\";\n VerbId[\"FindParameter\"] = \"find-parameter\";\n VerbId[\"GetActiveTables\"] = \"get-active-tables\";\n VerbId[\"GetAllDataSources\"] = \"get-all-data-sources\";\n VerbId[\"GetAnnotations\"] = \"get-annotations\";\n VerbId[\"GetCategoricalDomain\"] = \"get-categorical-domain\";\n VerbId[\"GetConnectionDescriptionSummaries\"] = \"get-connection-description-summaries\";\n VerbId[\"GetCurrentSrc\"] = \"get-current-src\";\n VerbId[\"GetCustomViews\"] = \"get-custom-views\";\n VerbId[\"GetDashboardFilters\"] = \"get-dashboard-filters\";\n VerbId[\"GetDataSource\"] = \"get-datasource\";\n VerbId[\"GetDataSourceData\"] = \"get-datasource-data\";\n VerbId[\"GetDataSources\"] = \"get-data-sources\";\n VerbId[\"GetDataSummaryData\"] = \"get-summary-data\";\n VerbId[\"GetDataSummaryDataReader\"] = \"get-summary-data-reader\";\n VerbId[\"GetDataTableReaderPage\"] = \"get-data-table-reader-page\";\n VerbId[\"GetEmbeddingAbstractQueryWithDataModel\"] = \"get-embedding-abstract-query-with-data-model\";\n VerbId[\"GetEmbeddingClientInfo\"] = \"get-embedding-client-info\";\n VerbId[\"GetVizStateWithDataModel\"] = \"get-viz-state-with-data-model\";\n VerbId[\"GetExportCrosstabSheetMap\"] = \"get-export-crosstab-sheet-map\";\n VerbId[\"GetExportPdfOptions\"] = \"get-export-pdf-options\";\n VerbId[\"GetField\"] = \"get-field\";\n VerbId[\"GetFieldAndDataSource\"] = \"get-field-and-datasource\";\n VerbId[\"GetVisualSpecification\"] = \"get-visual-specification\";\n VerbId[\"GetFilters\"] = \"get-filters\";\n VerbId[\"GetFonts\"] = \"get-fonts\";\n VerbId[\"GetHighlightedMarks\"] = \"get-highlighted-marks\";\n VerbId[\"GetJoinDescription\"] = \"get-join-description\";\n VerbId[\"GetLogicalTableData\"] = \"get-logical-table-data\";\n VerbId[\"GetLogicalTableDataReader\"] = \"get-logical-table-data-reader\";\n VerbId[\"GetLogicalTables\"] = \"get-logical-tables\";\n VerbId[\"GetParametersForSheet\"] = \"get-parameters-for-sheet\";\n VerbId[\"GetRangeDomain\"] = \"get-range-domain\";\n VerbId[\"GetSelectedMarks\"] = \"get-selected-marks\";\n VerbId[\"GetSharedFilter\"] = \"get-shared-filter\";\n VerbId[\"GetUnderlyingData\"] = \"get-underlying-data\";\n VerbId[\"GetUnderlyingTableData\"] = \"get-underlying-table-data\";\n VerbId[\"GetUnderlyingTableDataReader\"] = \"get-underlying-table-data-reader\";\n VerbId[\"GetUnderlyingTables\"] = \"get-underlying-tables\";\n VerbId[\"HierarchicalFilter\"] = \"hierachical-filter\";\n VerbId[\"InitializeExtension\"] = \"initialize-extension\";\n VerbId[\"MoveAndResizeZones\"] = \"move-and-resize-zones\";\n VerbId[\"RaiseHoverTupleNotification\"] = \"raise-hover-tuple-notification\";\n VerbId[\"RaiseSelectTuplesNotification\"] = \"raise-select-tuples-notification\";\n VerbId[\"Redo\"] = \"redo\";\n VerbId[\"RefreshDataSource\"] = \"refresh-data-source\";\n VerbId[\"ReleaseDataTableReader\"] = \"release-data-table-reader\";\n VerbId[\"RemoveAnnotation\"] = \"remove-annotation\";\n VerbId[\"RemoveCustomView\"] = \"remove-custom-view\";\n VerbId[\"RemoveExternalMenuItem\"] = \"remove-external-menu-item\";\n VerbId[\"RenameExternalMenu\"] = \"rename-external-menu\";\n VerbId[\"ReplayAnimation\"] = \"replay-animation\";\n VerbId[\"RevertStoryPoint\"] = \"revert-story-point\";\n VerbId[\"RevertWorkbook\"] = \"revert-workbook\";\n VerbId[\"SaveExtensionSettings\"] = \"save-extension-settings\";\n VerbId[\"SaveWorkbookAsCustomView\"] = \"save-workbook-as-custom-view\";\n VerbId[\"SelectByValue\"] = \"select-by-value\";\n VerbId[\"SetActiveCustomViewAsDefault\"] = \"set-active-custom-view-as-default\";\n VerbId[\"SetAutoUpdate\"] = \"set-auto-update\";\n VerbId[\"SetClickThrough\"] = \"set-click-through\";\n VerbId[\"SetVizStateWithDataModel\"] = \"set-viz-state-with-data-model\";\n VerbId[\"SetSheetSize\"] = \"set-sheet-size\";\n VerbId[\"SetZoneVisibility\"] = \"set-zone-visibility\";\n VerbId[\"Share\"] = \"share\";\n VerbId[\"ShowCustomView\"] = \"show-custom-view\";\n VerbId[\"TestConversionVerb\"] = \"test-conversion-verb\";\n VerbId[\"Undo\"] = \"undo\";\n VerbId[\"UpdateCustomView\"] = \"update-custom-view\";\n VerbId[\"VizAPI\"] = \"viz-api\";\n})(VerbId = exports.VerbId || (exports.VerbId = {}));\n//# sourceMappingURL=Verbs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar AskDataOptionNames;\n(function (AskDataOptionNames) {\n AskDataOptionNames[\"token\"] = \"token\";\n AskDataOptionNames[\"origin\"] = \"origin\";\n AskDataOptionNames[\"showEmbed\"] = \"showEmbed\";\n AskDataOptionNames[\"showPin\"] = \"showPin\";\n AskDataOptionNames[\"showSave\"] = \"showSave\";\n AskDataOptionNames[\"showShare\"] = \"showShare\";\n AskDataOptionNames[\"debug\"] = \":jsdebug\";\n AskDataOptionNames[\"ApiID\"] = \":apiID\";\n AskDataOptionNames[\"ApiExternalVersion\"] = \":apiExternalVersion\";\n AskDataOptionNames[\"ApiInternalVersion\"] = \":apiInternalVersion\";\n AskDataOptionNames[\"AskDataWebComponent\"] = \":askDataWebComponent\";\n})(AskDataOptionNames = exports.AskDataOptionNames || (exports.AskDataOptionNames = {}));\n//# sourceMappingURL=AskDataInterface.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar PulseOptionNames;\n(function (PulseOptionNames) {\n PulseOptionNames[\"embed\"] = \"embed\";\n PulseOptionNames[\"token\"] = \"token\";\n PulseOptionNames[\"disableExploreFilter\"] = \"disableExploreFilter\";\n PulseOptionNames[\"ApiExternalVersion\"] = \":apiExternalVersion\";\n PulseOptionNames[\"ApiInternalVersion\"] = \":apiInternalVersion\";\n PulseOptionNames[\"PulseWebComponent\"] = \":pulseWebComponent\";\n})(PulseOptionNames = exports.PulseOptionNames || (exports.PulseOptionNames = {}));\n//# sourceMappingURL=PulseInterface.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * These strings were *manually copied* from the server,\n * workgroup/src/silos/tableau-server/libraries/tab-controller-vizql/src/com/tableausoftware/\n * controller/vizql/constants/ParameterKeys.java#L9\n * should be exported instead\n * parameters that vizql will accept in an embedding URL\n **/\nvar VqlParameterNames;\n(function (VqlParameterNames) {\n VqlParameterNames[\"ONE\"] = \"1\";\n VqlParameterNames[\"ALERTS\"] = \":alerts\";\n VqlParameterNames[\"ALIAS\"] = \"alias\";\n VqlParameterNames[\"ALLOW_DEFERRED_BOOTSTRAP\"] = \":allowDeferredBootstrap\";\n VqlParameterNames[\"ALLOW_AUTOGEN_WORKSHEET_PHONE_LAYOUTS\"] = \"allowAutogenWorksheetPhoneLayouts\";\n VqlParameterNames[\"API_ID\"] = \":apiID\";\n VqlParameterNames[\"APP\"] = \":app\";\n VqlParameterNames[\"ATTACHMENT\"] = \"attachment\";\n VqlParameterNames[\"IS_IPAD_APP\"] = \"app\";\n VqlParameterNames[\"ANIMATE_TRANSITION\"] = \":animate_transition\";\n VqlParameterNames[\"ASCENDING\"] = \"ascending\";\n VqlParameterNames[\"AUTHENTICATION\"] = \"authentication\";\n VqlParameterNames[\"ATTRIBUTES\"] = \"attributes\";\n VqlParameterNames[\"AUTHORING_SHEET\"] = \":authSheet\";\n VqlParameterNames[\"AXIS\"] = \"axis\";\n VqlParameterNames[\"BOOTSTRAP_WHEN_NOTIFIED\"] = \":bootstrapWhenNotified\";\n VqlParameterNames[\"BROWSER_BACK_BUTTON_UNDO\"] = \":browserBackButtonUndo\";\n VqlParameterNames[\"BROWSER_RENDERING_ON\"] = \"isBrowserRendering\";\n VqlParameterNames[\"BROWSER_RENDERING_THRESHOLD\"] = \"browserRenderingThreshold\";\n VqlParameterNames[\"CHARSET\"] = \"charset\";\n VqlParameterNames[\"CLIENT_DIMENSION\"] = \"clientDimension\";\n VqlParameterNames[\"CLIENT_IP\"] = \"client_ip\";\n VqlParameterNames[\"CLIENT_NUM\"] = \"clientNum\";\n VqlParameterNames[\"COLON_EMBEDDED\"] = \":embedded\";\n VqlParameterNames[\"COLON_MOBILE\"] = \":mobile\";\n VqlParameterNames[\"COLON_DEEP_LINKING_DISABLED\"] = \":deepLinkingDisabled\";\n VqlParameterNames[\"COLON_WATERMARK\"] = \":watermark\";\n VqlParameterNames[\"COMMENTS\"] = \":comments\";\n VqlParameterNames[\"COMMENTING_ENABLED\"] = \":commentingEnabled\";\n VqlParameterNames[\"COMMENTING_MENTIONS_ENABLED\"] = \":commentingMentions\";\n VqlParameterNames[\"CONNECTION\"] = \"connection\";\n VqlParameterNames[\"CREATED_BY_FEATURE\"] = \"createdByFeature\";\n VqlParameterNames[\"CRYPTED_PASSWORD\"] = \"crypted\";\n VqlParameterNames[\"CSSDEBUG\"] = \":cssdebug\";\n VqlParameterNames[\"CSV\"] = \"csv\";\n VqlParameterNames[\"CUSTOM_VIEWS\"] = \":customViews\";\n VqlParameterNames[\"CV\"] = \":cv\";\n VqlParameterNames[\"CV_ID\"] = \"cvId\";\n VqlParameterNames[\"DASHBOARD_PORT_SIZE\"] = \"dashboardPortSize\";\n VqlParameterNames[\"DATA_DETAILS\"] = \":dataDetails\";\n VqlParameterNames[\"DATASOURCE\"] = \"datasource\";\n VqlParameterNames[\"DEBUG\"] = \":debug\";\n VqlParameterNames[\"DELAY\"] = \":delay\";\n VqlParameterNames[\"DEPTH\"] = \"depth\";\n VqlParameterNames[\"DEVICE_TYPE\"] = \":device\";\n VqlParameterNames[\"DEVICE_PIXEL_RATIO\"] = \"devicePixelRatio\";\n VqlParameterNames[\"DEVICE_PREVIEW_MODE\"] = \":devicepreviewmode\";\n VqlParameterNames[\"DIMENSIONS\"] = \":dimensions\";\n VqlParameterNames[\"DISABLE_SHARED_SESSIONS\"] = \":disable_shared_sessions\";\n VqlParameterNames[\"DISABLE_URL_ACTIONS_POPUPS\"] = \":disableUrlActionsPopups\";\n VqlParameterNames[\"DIRECTION\"] = \"direction\";\n VqlParameterNames[\"DISPLAY_OVERLAY\"] = \":display_overlay\";\n VqlParameterNames[\"DISPLAY_SHARE\"] = \":display_share\";\n VqlParameterNames[\"DISPLAY_SPINNER\"] = \":display_spinner\";\n VqlParameterNames[\"DISPLAY_STATIC_IMAGE\"] = \":display_static_image\";\n VqlParameterNames[\"DISPLAY_TABS\"] = \"display_tabs\";\n VqlParameterNames[\"DISPLAY_VIEW_COUNT\"] = \":display_count\";\n VqlParameterNames[\"IGNORE_STICKY_SESSION\"] = \":ignore_sticky_session\";\n VqlParameterNames[\"INCREMENT_VIEW_COUNT\"] = \":increment_view_count\";\n VqlParameterNames[\"DOCMODE\"] = \"docmode\";\n VqlParameterNames[\"DOMAIN\"] = \"domain\";\n VqlParameterNames[\"DO_WORK\"] = \"do_work\";\n VqlParameterNames[\"DX\"] = \"dx\";\n VqlParameterNames[\"DY\"] = \"dy\";\n VqlParameterNames[\"EDIT_DATA_ALERT\"] = \":editDataAlert\";\n VqlParameterNames[\"EMBED\"] = \":embed\";\n VqlParameterNames[\"EMBEDDED\"] = \"embedded\";\n VqlParameterNames[\"ENCRYPTED\"] = \"encrypted\";\n VqlParameterNames[\"API_EXTERNAL_VERSION\"] = \":apiExternalVersion\";\n VqlParameterNames[\"API_INTERNAL_VERSION\"] = \":apiInternalVersion\";\n VqlParameterNames[\"EXCLUDE\"] = \"exclude\";\n VqlParameterNames[\"EXPORT_FORMAT\"] = \":export_format\";\n VqlParameterNames[\"FIELDNAME\"] = \"fieldname\";\n VqlParameterNames[\"FIELD_NAME\"] = \"field_name\";\n VqlParameterNames[\"FIELD_SEP\"] = \"field_sep\";\n VqlParameterNames[\"FILE\"] = \"file\";\n VqlParameterNames[\"FILTER_TILE_SIZE\"] = \"filterTileSize\";\n VqlParameterNames[\"FN\"] = \"fn\";\n VqlParameterNames[\"FOCUS\"] = \"focus\";\n VqlParameterNames[\"FORCE_CACHE\"] = \"force_cache\";\n VqlParameterNames[\"FORMAT\"] = \"format\";\n VqlParameterNames[\"FORMAT_DATA_VALUE_LOCALLY\"] = \"formatDataValueLocally\";\n VqlParameterNames[\"FROM_WG\"] = \":from_wg\";\n VqlParameterNames[\"GRAPHQL_DATABASE_ID\"] = \":graphQLDatabaseId\";\n VqlParameterNames[\"GRAPHQL_TABLE_ID\"] = \":graphQLTableId\";\n VqlParameterNames[\"GUID\"] = \":guid\";\n VqlParameterNames[\"H\"] = \"h\";\n VqlParameterNames[\"HIDDEN\"] = \"hidden\";\n VqlParameterNames[\"HIDE_CLOSE_BUTTON\"] = \":hideCloseButton\";\n VqlParameterNames[\"HIDE_EDIT_BUTTON\"] = \":hideEditButton\";\n VqlParameterNames[\"HIDE_EDIT_IN_DESKTOP_BUTTON\"] = \":hideEditInDesktopButton\";\n VqlParameterNames[\"HIGH_DPI\"] = \":highdpi\";\n VqlParameterNames[\"IMAGE_SIZE_LIMIT\"] = \"imageSizeLimit\";\n VqlParameterNames[\"TRANSPARENT_LINE_MARKS_LIMIT\"] = \"transparentLineMarkLimit\";\n VqlParameterNames[\"CLIENT_RENDER_PIXEL_LIMIT\"] = \"clientRenderPixelLimit\";\n VqlParameterNames[\"IN\"] = \"in\";\n VqlParameterNames[\"INSTANCE_ID\"] = \":iid\";\n VqlParameterNames[\"IS_GUEST_REDIRECT_FROM_VIZPORTAL\"] = \":isGuestRedirectFromVizportal\";\n VqlParameterNames[\"IS_MARK_ANIMATION_ENABLED\"] = \"isMarkAnimationEnabled\";\n VqlParameterNames[\"IS_VIZPORTAL\"] = \":isVizPortal\";\n VqlParameterNames[\"INPUT_\"] = \"input_string\";\n VqlParameterNames[\"JSDEBUG\"] = \":jsdebug\";\n VqlParameterNames[\"JSON\"] = \"json\";\n VqlParameterNames[\"JSON_ONLY\"] = \":jsonOnly\";\n VqlParameterNames[\"KEEPFILE\"] = \"keepfile\";\n VqlParameterNames[\"KEY\"] = \"key\";\n VqlParameterNames[\"LANGUAGE\"] = \"language\";\n VqlParameterNames[\"LANGUAGE_REQUESTED\"] = \":language\";\n VqlParameterNames[\"LINKTARGET\"] = \":linktarget\";\n VqlParameterNames[\"LOAD_ORDER_ID\"] = \":loadOrderID\";\n VqlParameterNames[\"LOAD_NEWEST_REVISION\"] = \":loadNewestRevision\";\n VqlParameterNames[\"LOCAL_PATHS\"] = \":localPaths\";\n VqlParameterNames[\"LOCALE\"] = \"locale\";\n VqlParameterNames[\"LOCATION_ID\"] = \"locationid\";\n VqlParameterNames[\"LOCATION_TYPE\"] = \"locationtype\";\n VqlParameterNames[\"WORKBOOK_LOCALE\"] = \"workbookLocale\";\n VqlParameterNames[\"MAXROWS\"] = \"maxrows\";\n VqlParameterNames[\"MAX_AGE\"] = \"maxAge\";\n VqlParameterNames[\"MAX_ROWS\"] = \"maxRows\";\n VqlParameterNames[\"METHOD\"] = \"method\";\n VqlParameterNames[\"MOBILE\"] = \"mobile\";\n VqlParameterNames[\"MODIFIER\"] = \"modifier\";\n VqlParameterNames[\"NAME\"] = \"name\";\n VqlParameterNames[\"NAV_TYPE\"] = \"navType\";\n VqlParameterNames[\"NAV_SRC\"] = \"navSrc\";\n VqlParameterNames[\"NOATTACHMENT\"] = \"no-attachment\";\n VqlParameterNames[\"NO_OVERWRITE\"] = \"no_overwrite\";\n VqlParameterNames[\"OPEN_AUTHORING_IN_TOP_WINDOW\"] = \":openAuthoringInTopWindow\";\n VqlParameterNames[\"OPENID_HD\"] = \":openid_hd\";\n VqlParameterNames[\"OPENID_LOGIN_HINT\"] = \":openid_login_hint\";\n VqlParameterNames[\"OAUTHREQUEST\"] = \"oauthrequest\";\n VqlParameterNames[\"OAUTH_CREDENTIAL_IDS\"] = \"oauth_credential_ids\";\n VqlParameterNames[\"OFFLINE_MODE\"] = \":offlinemode\";\n VqlParameterNames[\"ORIGIN\"] = \":origin\";\n VqlParameterNames[\"OVERLAY\"] = \":overlay\";\n VqlParameterNames[\"P\"] = \"p\";\n VqlParameterNames[\"PATH\"] = \"path\";\n VqlParameterNames[\"PANE_RESOLVER_X\"] = \"paneResolverX\";\n VqlParameterNames[\"PANE_RESOLVER_Y\"] = \"paneResolverY\";\n VqlParameterNames[\"PARAM\"] = \"param\";\n VqlParameterNames[\"PARENT_ID\"] = \"parent_id\";\n VqlParameterNames[\"PASSWORD\"] = \"password\";\n VqlParameterNames[\"PATTERN\"] = \"pattern\";\n VqlParameterNames[\"PIXEL_RATIO\"] = \":pixelratio\";\n VqlParameterNames[\"PREFIX\"] = \":prefix\";\n VqlParameterNames[\"PREVIEW\"] = \":preview\";\n VqlParameterNames[\"PRIMARY_CONTENT_URL\"] = \"primary_content_url\";\n VqlParameterNames[\"PROJECT\"] = \"project\";\n VqlParameterNames[\"PROTOCOL\"] = \"protocol\";\n VqlParameterNames[\"PSEUDO\"] = \":pseudo\";\n VqlParameterNames[\"QUERY\"] = \"query\";\n VqlParameterNames[\"R\"] = \"r\";\n VqlParameterNames[\"RANGE_TYPE\"] = \"range_type\";\n VqlParameterNames[\"RECORD_SEP\"] = \"record_sep\";\n VqlParameterNames[\"RECORD_CLIENT_PERFORMANCE\"] = \":record_client_performance\";\n VqlParameterNames[\"RECORD_PERFORMANCE\"] = \":record_performance\";\n VqlParameterNames[\"RECOVER_OLD_SESSION_ID\"] = \":recover_old_session_id\";\n VqlParameterNames[\"RECOVER_SESSION_STATE_TICKETS\"] = \":recover_session_state_tickets\";\n VqlParameterNames[\"REFRESH\"] = \":refresh\";\n VqlParameterNames[\"REFRESHUNMODIFIED\"] = \":refreshunmodified\";\n VqlParameterNames[\"REGION\"] = \"region\";\n VqlParameterNames[\"RELOAD_ON_CUSTOM_VIEW_SAVE\"] = \":reloadOnCustomViewSave\";\n VqlParameterNames[\"RENDER\"] = \":render\";\n VqlParameterNames[\"RENDER_MAPS_CLIENT_SIDE\"] = \"renderMapsClientSide\";\n VqlParameterNames[\"RETRY\"] = \":retry\";\n VqlParameterNames[\"REUSE\"] = \"reuse\";\n VqlParameterNames[\"REUSE_FOREVER\"] = \"reuse_forever\";\n VqlParameterNames[\"REVERT\"] = \":revert\";\n VqlParameterNames[\"SAVE_DB_PASSWORDS\"] = \"save_db_passwords\";\n VqlParameterNames[\"SELECT_X\"] = \"select_x\";\n VqlParameterNames[\"SELECT_Y\"] = \"select_y\";\n VqlParameterNames[\"SESSION_FEATURE_PREFIX\"] = \":ff_\";\n VqlParameterNames[\"SESSION_FLAGS\"] = \":session_feature_flags\";\n VqlParameterNames[\"SHARE_BUTTON\"] = \"share_button\";\n VqlParameterNames[\"SHEET_ID\"] = \"sheet_id\";\n VqlParameterNames[\"SHARED\"] = \"shared\";\n VqlParameterNames[\"SHOWALL\"] = \"showall\";\n VqlParameterNames[\"SHOW_APP_BANNER\"] = \":showAppBanner\";\n VqlParameterNames[\"SHOW_ASK_DATA\"] = \":showAskData\";\n VqlParameterNames[\"SHOW_PARAMS\"] = \"showParams\";\n VqlParameterNames[\"SHOW_SHARE_OPTIONS\"] = \":showShareOptions\";\n VqlParameterNames[\"SIZE\"] = \":size\";\n VqlParameterNames[\"SOURCE\"] = \"source\";\n VqlParameterNames[\"STATE\"] = \"state\";\n VqlParameterNames[\"STICKY_SESSION_KEY\"] = \"stickySessionKey\";\n VqlParameterNames[\"SUBSCRIPTIONS\"] = \":subscriptions\";\n VqlParameterNames[\"SUMMARY\"] = \"summary\";\n VqlParameterNames[\"SUPPRESS_DEFAULT_EDIT_BEHAVIOR\"] = \":suppressDefaultEditBehavior\";\n VqlParameterNames[\"SYNC_SESSION\"] = \":sync_session\";\n VqlParameterNames[\"SYNC_SESSION_STATE\"] = \"sync_session_state\";\n VqlParameterNames[\"TABS\"] = \":tabs\";\n VqlParameterNames[\"TARGET\"] = \"target\";\n VqlParameterNames[\"TARGET_SITE\"] = \"target_site\";\n VqlParameterNames[\"TOOLBAR\"] = \":toolbar\";\n VqlParameterNames[\"TOOLTIP\"] = \":tooltip\";\n VqlParameterNames[\"TS\"] = \"ts\";\n VqlParameterNames[\"UNDERLYING_TABLE_ID\"] = \"underlying_table_id\";\n VqlParameterNames[\"UNDERLYING_TABLE_CAPTION\"] = \"underlying_table_caption\";\n VqlParameterNames[\"UPDATE_TYPE\"] = \"update_type\";\n VqlParameterNames[\"USE_GUEST\"] = \":useGuest\";\n VqlParameterNames[\"USE_INLINE_IMAGES\"] = \"use_inline_images\";\n VqlParameterNames[\"USERAGENT\"] = \"useragent\";\n VqlParameterNames[\"USERNAME\"] = \"username\";\n VqlParameterNames[\"VALUE\"] = \"value\";\n VqlParameterNames[\"VERBOSE_MODE\"] = \"verboseMode\";\n VqlParameterNames[\"VIEW_ID\"] = \"views_id\";\n VqlParameterNames[\"VIZ_SNAPSHOT_ID\"] = \"viz_snapshot_id\";\n VqlParameterNames[\"VW\"] = \":vw\";\n VqlParameterNames[\"W\"] = \"w\";\n VqlParameterNames[\"WORKSHEET_PORT_SIZE\"] = \"worksheetPortSize\";\n VqlParameterNames[\"WATERMARK\"] = \"watermark\";\n VqlParameterNames[\"WATERMARK_MARGIN\"] = \":watermark_margin\";\n VqlParameterNames[\"WB\"] = \":wb\";\n VqlParameterNames[\"WHICH\"] = \"which\";\n VqlParameterNames[\"X\"] = \"x\";\n VqlParameterNames[\"Y\"] = \"y\";\n VqlParameterNames[\"ZID\"] = \"zid\";\n VqlParameterNames[\"ZONE_ID\"] = \"zone_id\";\n VqlParameterNames[\"KEYCHAIN_VERSION\"] = \"keychain_version\";\n VqlParameterNames[\"DATASOURCE_ID\"] = \"datasource_id\";\n VqlParameterNames[\"DATASOURCE_NAME\"] = \"datasource_name\";\n VqlParameterNames[\"LENS_ID\"] = \"lens_id\";\n VqlParameterNames[\"WIDTH\"] = \"width\";\n VqlParameterNames[\"HEIGHT\"] = \"height\";\n // Default Layout params\n VqlParameterNames[\"LAYOUT_VIEWS\"] = \"views\";\n VqlParameterNames[\"LAYOUT_MENUS\"] = \"menus\";\n VqlParameterNames[\"LAYOUT_GEOMETRY\"] = \"geometry\";\n VqlParameterNames[\"LAYOUT_PAGES\"] = \"pages\";\n VqlParameterNames[\"LAYOUT_CACHEURL\"] = \"cacheurl\";\n VqlParameterNames[\"LAYOUT_SHEET\"] = \"sheet\";\n VqlParameterNames[\"LAYOUT_DEPTH\"] = \"depth\";\n})(VqlParameterNames || (VqlParameterNames = {}));\n/**\n * parameters that are only relevant when working with Tableau Public\n * maybe not really necessry to split them out\n */\nvar PublicParameterNames;\n(function (PublicParameterNames) {\n PublicParameterNames[\"SHOW_VIZ_HOME\"] = \":showVizHome\";\n // display view count\n})(PublicParameterNames || (PublicParameterNames = {}));\n/**\n * Map the parameter names as used in the url to what we call them publicly in the embedding library.\n * The only parameters listed here should be the ones that get sent to vizql\n * - this should match the interface at external-contract:VizInterfaces:VizSettings\n */\nvar VizOptionNames;\n(function (VizOptionNames) {\n // publicName = internalStringValue\n VizOptionNames[\"Size\"] = \":size\";\n VizOptionNames[\"Embed\"] = \":embed\";\n VizOptionNames[\"ApiInternalVersion\"] = \":apiInternalVersion\";\n VizOptionNames[\"ApiExternalVersion\"] = \":apiExternalVersion\";\n VizOptionNames[\"ShowVizHome\"] = \":showVizHome\";\n VizOptionNames[\"Jsdebug\"] = \":jsdebug\";\n VizOptionNames[\"BootstrapWhenNotified\"] = \":bootstrapWhenNotified\";\n VizOptionNames[\"NavType\"] = \"navType\";\n VizOptionNames[\"NavSrc\"] = \"navSrc\";\n VizOptionNames[\"debug\"] = \":jsdebug\";\n VizOptionNames[\"ApiID\"] = \":apiID\";\n VizOptionNames[\"disableUrlActionsPopups\"] = \":disableUrlActionsPopups\";\n VizOptionNames[\"hideTabs\"] = \":tabs\";\n VizOptionNames[\"toolbar\"] = \":toolbar\";\n VizOptionNames[\"device\"] = \":device\";\n VizOptionNames[\"instanceIdToClone\"] = \":iid\";\n VizOptionNames[\"touchOptimize\"] = \"mobile\";\n VizOptionNames[\"hideEditButton\"] = \":hideEditButton\";\n VizOptionNames[\"hideEditInDesktopButton\"] = \":hideEditInDesktopButton\";\n VizOptionNames[\"suppressDefaultEditBehavior\"] = \":suppressDefaultEditBehavior\";\n VizOptionNames[\"hideCloseButton\"] = \":hideCloseButton\";\n})(VizOptionNames = exports.VizOptionNames || (exports.VizOptionNames = {}));\n//# sourceMappingURL=VqlInterface.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar guid = require(\"guid\");\nvar JsApiInternalContract_1 = require(\"../JsApiInternalContract\");\nvar CrossFramePreparedMessage_1 = require(\"./CrossFramePreparedMessage\");\nvar MessageTypeChecks_1 = require(\"./MessageTypeChecks\");\nvar MessageTypes_1 = require(\"./interface/MessageTypes\");\n/**\n * The CrossFrameMessenger is the primary export from the api-messaging module. An instance of\n * this class can be instantiated on both sides of a frame boundary to facilitate communication\n * in both directions between the frames. This class implements both the dispatcher and the listener\n * portions, but doesn't require callers to care about both.\n */\nvar CrossFrameMessenger = /** @class */ (function () {\n /**\n * Creates an instance of CrossFrameMessenger. If you would like to use the CrossFrameMessenger as a MessageListener,\n * be sure to call StartListening and register message handlers.\n * @param thisWindow The window object which the CrossFrameMessenger lives. An onMessage listener will be added here.\n * @param [otherWindow] Optional otherWindow which messages will be posted to.\n * If defined, incoming messages must originate from otherWindow to be passed on\n * @param [otherWindowOrigin] The target origin which otherWindow must have in order to receive dispatched messages.\n * This value will be sent as the targetOrigin of a postMessage\n * (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)\n */\n function CrossFrameMessenger(thisWindow, otherWindow, otherWindowOrigin) {\n this.thisWindow = thisWindow;\n this.otherWindow = otherWindow;\n this.otherWindowOrigin = otherWindowOrigin;\n // Make sure to call StartListening\n }\n ///// MessageListener Implementation\n CrossFrameMessenger.prototype.startListening = function () {\n var _this = this;\n // Check if we already are listening, if not, hook up a message listener\n if (!this.unregisterFunction) {\n var boundHandler_1 = this.onMessageReceived.bind(this);\n this.thisWindow.addEventListener('message', boundHandler_1, true);\n this.unregisterFunction = function () { return _this.thisWindow.removeEventListener('message', boundHandler_1, true); };\n }\n };\n CrossFrameMessenger.prototype.stopListening = function () {\n // Stop listening if we have started listening\n if (this.unregisterFunction) {\n this.unregisterFunction();\n this.unregisterFunction = undefined;\n }\n };\n CrossFrameMessenger.prototype.setInitializeMessageHandler = function (handler) {\n this.initializeMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setCommandResponseMessageHandler = function (handler) {\n this.commandResponseMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setCommandMessageHandler = function (handler) {\n this.commandMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setNotificationMessageHandler = function (handler) {\n this.notificationMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setHandshakeMessageHandler = function (handler) {\n this.handshakeMessageHandler = handler;\n };\n ///// MessageDispatcher Implementation\n /**\n * @param apiVersion api-internal-contract-js version (exported in JsApiInternalConntract)\n * @param crossFrameVersion crossframe messaging version (exported in JsApiInternalConntract)\n * @param options additional options that can be passed at initialization (information about the version of\n * external being used for example)\n */\n CrossFrameMessenger.prototype.prepareInitializationMessage = function (apiVersion, crossFrameVersion, options) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Initialize,\n crossFrameVersion: crossFrameVersion,\n apiVersion: apiVersion,\n options: options,\n };\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareCommandMessage = function (verbId, parameters) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Command,\n verbId: verbId,\n parameters: parameters,\n };\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareCommandResponseMessage = function (commandGuid, data, error) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.CommandResponse,\n commandGuid: commandGuid,\n data: data,\n error: error,\n };\n if (error) {\n // stringify error object to remove unserializable fields like functions and prevent serialization errors\n message.error = JSON.parse(JSON.stringify(error));\n }\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareNotificationMessage = function (notificationId, data) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Notification,\n notificationId: notificationId,\n data: data,\n };\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareAckMessage = function () {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Ack,\n platformVersion: JsApiInternalContract_1.INTERNAL_CONTRACT_VERSION,\n };\n return this.prepareMessage(message);\n };\n /**\n * Prepares a pending message for sending and returns the prepared message\n *\n * @param msg The message to be sent to this.otherWindow\n * @returns The prepared message\n */\n CrossFrameMessenger.prototype.prepareMessage = function (msg) {\n if (!this.otherWindow || !this.otherWindowOrigin) {\n throw 'Other window not initialized, cannot dispatch messages';\n }\n var preparedMessage = new CrossFramePreparedMessage_1.CrossFramePreparedMessage(msg, this.otherWindow, this.otherWindowOrigin);\n return preparedMessage;\n };\n /**\n * Called when a message is received. Does some validation of the message, and then\n * calls an appropriate message handler if one is defined\n *\n * @param event The incoming MessageEvent\n */\n CrossFrameMessenger.prototype.onMessageReceived = function (event) {\n // If we have an otherWindow defined, make sure the message is coming from there\n if (this.otherWindow && event.source !== this.otherWindow) {\n return;\n }\n // Do some validation on event.data to make sure that we have received a real message\n if (!event.data) {\n return;\n }\n var message = event.data;\n if (!MessageTypeChecks_1.isMessage(message)) {\n return;\n }\n // Check the declared message type, validate the message, and call an appropriate hander if one exists\n switch (message.msgType) {\n case MessageTypes_1.MessageType.Initialize: {\n if (!MessageTypeChecks_1.isInitMessage(message) || !this.initializeMessageHandler) {\n return;\n }\n this.initializeMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.CommandResponse: {\n if (!MessageTypeChecks_1.isCommandResponseMessage(message) || !this.commandResponseMessageHandler) {\n return;\n }\n this.commandResponseMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.Command: {\n if (!MessageTypeChecks_1.isCommandMessage(message) || !this.commandMessageHandler) {\n return;\n }\n this.commandMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.Notification: {\n if (!MessageTypeChecks_1.isNotificationMessage(message) || !this.notificationMessageHandler) {\n return;\n }\n this.notificationMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.Handshake: {\n if (!MessageTypeChecks_1.isHandshakeMessage(message) || !this.handshakeMessageHandler) {\n return;\n }\n this.handshakeMessageHandler(message, event.source);\n break;\n }\n default:\n // Just ignore this since we don't know how to handle the message type\n }\n };\n CrossFrameMessenger.prototype.setOtherWindow = function (otherWindow) {\n this.otherWindow = otherWindow;\n };\n CrossFrameMessenger.prototype.setOtherWindowOrigin = function (origin) {\n this.otherWindowOrigin = origin;\n };\n return CrossFrameMessenger;\n}());\nexports.CrossFrameMessenger = CrossFrameMessenger;\n//# sourceMappingURL=CrossFrameMessenger.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the PreparedMessage interface used to post messages between\n * two frames using window.postMessage\n */\nvar CrossFramePreparedMessage = /** @class */ (function () {\n /**\n * Creates an instance of CrossFramePreparedMessage.\n * @param _message The message to be sent\n * @param _target The target window where the message will be sent\n * @param _origin The targetOrigin where this message can be received\n */\n function CrossFramePreparedMessage(_message, _target, _origin) {\n this._message = _message;\n this._target = _target;\n this._origin = _origin;\n }\n Object.defineProperty(CrossFramePreparedMessage.prototype, \"messageGuid\", {\n get: function () {\n return this._message.msgGuid;\n },\n enumerable: true,\n configurable: true\n });\n CrossFramePreparedMessage.prototype.send = function () {\n this._target.postMessage(this._message, this._origin);\n return this;\n };\n return CrossFramePreparedMessage;\n}());\nexports.CrossFramePreparedMessage = CrossFramePreparedMessage;\n//# sourceMappingURL=CrossFramePreparedMessage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar guid = require(\"guid\");\nvar Notifications_1 = require(\"../contract/Notifications\");\nvar MessageTypes_1 = require(\"./interface/MessageTypes\");\nvar expectedEmptyNotifications = new Set([\n Notifications_1.NotificationId.EditButtonClicked,\n Notifications_1.NotificationId.EditInDesktopButtonClicked,\n Notifications_1.NotificationId.WorkbookPublished,\n Notifications_1.NotificationId.WorkbookReadyToClose,\n Notifications_1.NotificationId.ReadyToReceiveAuthToken,\n]);\n/* tslint:disable no-any */\nfunction isMessage(data) {\n if (!data) {\n return false;\n }\n var message = data;\n if (!message || !message.msgGuid || !message.msgType) {\n return false;\n }\n if (!guid.isGuid(message.msgGuid)) {\n return false;\n }\n if (typeof message.msgType !== 'string') {\n return false;\n }\n var messageTypes = [\n MessageTypes_1.MessageType.Command,\n MessageTypes_1.MessageType.CommandResponse,\n MessageTypes_1.MessageType.Initialize,\n MessageTypes_1.MessageType.Notification,\n MessageTypes_1.MessageType.Handshake,\n ];\n if (messageTypes.indexOf(message.msgType) < 0) {\n return false;\n }\n return true;\n}\nexports.isMessage = isMessage;\nfunction isVersion(versionNumber) {\n if (!versionNumber) {\n return false;\n }\n var v = versionNumber;\n if (typeof v !== 'object') {\n return false;\n }\n if (typeof v.fix !== 'number' || typeof v.minor !== 'number' || typeof v.major !== 'number') {\n return false;\n }\n return true;\n}\nexports.isVersion = isVersion;\nfunction isInitMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var initMessage = message;\n if (initMessage.msgType !== MessageTypes_1.MessageType.Initialize) {\n return false;\n }\n if (!initMessage.apiVersion || !isVersion(initMessage.apiVersion)) {\n return false;\n }\n if (!initMessage.crossFrameVersion || !isVersion(initMessage.crossFrameVersion)) {\n return false;\n }\n return true;\n}\nexports.isInitMessage = isInitMessage;\nfunction isCommandResponseMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var crMessage = message;\n if (crMessage.msgType !== MessageTypes_1.MessageType.CommandResponse) {\n return false;\n }\n if (!guid.isGuid(crMessage.commandGuid)) {\n return false;\n }\n if (!crMessage.data && !crMessage.error) {\n return false;\n }\n return true;\n}\nexports.isCommandResponseMessage = isCommandResponseMessage;\nfunction isCommandMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var commandMessage = message;\n if (commandMessage.msgType !== MessageTypes_1.MessageType.Command) {\n return false;\n }\n if (!commandMessage.parameters || typeof commandMessage.parameters !== 'object') {\n return false;\n }\n if (!commandMessage.verbId || typeof commandMessage.verbId !== 'string') {\n return false;\n }\n return true;\n}\nexports.isCommandMessage = isCommandMessage;\nfunction isNotificationMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var notificationMessage = message;\n if (notificationMessage.msgType !== MessageTypes_1.MessageType.Notification) {\n return false;\n }\n if (!notificationMessage.data && !expectedEmptyNotifications.has(notificationMessage.notificationId)) {\n return false;\n }\n if (!notificationMessage.notificationId || typeof notificationMessage.notificationId !== 'string') {\n return false;\n }\n return true;\n}\nexports.isNotificationMessage = isNotificationMessage;\nfunction isHandshakeMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var handshakeMessage = message;\n if (handshakeMessage.msgType !== MessageTypes_1.MessageType.Handshake) {\n return false;\n }\n return true;\n}\nexports.isHandshakeMessage = isHandshakeMessage;\n//# sourceMappingURL=MessageTypeChecks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Enum defining the 4 different types of messages we have defined\n */\nvar MessageType;\n(function (MessageType) {\n MessageType[\"Initialize\"] = \"initialize\";\n MessageType[\"Notification\"] = \"notification\";\n MessageType[\"Command\"] = \"command\";\n MessageType[\"CommandResponse\"] = \"command-response\";\n MessageType[\"Handshake\"] = \"v-handshake\";\n MessageType[\"Ack\"] = \"v-ack\";\n})(MessageType = exports.MessageType || (exports.MessageType = {}));\n//# sourceMappingURL=MessageTypes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * This version converter doesn't actually do anything but is useful for testing or when we have\n * a matching platform and internal version number\n */\nvar IdentityVersionConverter = /** @class */ (function () {\n function IdentityVersionConverter() {\n }\n IdentityVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) {\n return {\n verb: verb,\n parameters: parameters,\n };\n };\n IdentityVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) {\n return executeResponse;\n };\n IdentityVersionConverter.prototype.downgradeNotification = function (notification) {\n return notification;\n };\n return IdentityVersionConverter;\n}());\nexports.IdentityVersionConverter = IdentityVersionConverter;\n//# sourceMappingURL=IdentityVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * The version converter is designed to allow the platform and external modules\n * to seemlessly communicate over two different versions of the internal API. The only\n * mode it supports is external's version <= platform's version. When executing\n * commands, it is used to upgrade the external representation to what platform knows on the way in\n * and downgrade the representations on the way out. Similarly for notifications, it can\n * downgrade those on the way from platform to external.\n */\nvar StackingVersionConverter = /** @class */ (function () {\n /**\n * Creates a new instance of the StackingVersionConverter\n *\n * @param _externalMajorVersion The major version of the internal contract api-external-js is using\n * @param _platformMajorVersion The major version of the internal contract the api-platform-js is using\n * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters\n * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd\n * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification\n */\n function StackingVersionConverter(_externalMajorVersion, _platformMajorVersion, _upgradeExecuteTranslations, _downgradeExecuteTranslations, _downgradeNotificationTranslations) {\n this._externalMajorVersion = _externalMajorVersion;\n this._platformMajorVersion = _platformMajorVersion;\n this._upgradeExecuteTranslations = _upgradeExecuteTranslations;\n this._downgradeExecuteTranslations = _downgradeExecuteTranslations;\n this._downgradeNotificationTranslations = _downgradeNotificationTranslations;\n if (this._externalMajorVersion > this._platformMajorVersion) {\n throw new Error(\"Cannot convert between external version \" + this._externalMajorVersion + \" and \" + this._platformMajorVersion);\n }\n }\n /**\n * Creates a new instance of the StackingVersionConverter\n *\n * @param _externalVersion The version of the internal contract api-external-js is using\n * @param _platformVersion The version of the internal contract the api-platform-js is using\n * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters\n * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd\n * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification\n */\n StackingVersionConverter.fromData = function (externalVersion, platformVersion, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations) {\n return new this(externalVersion.major, platformVersion.major, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations);\n };\n StackingVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) {\n // Perform the upgrade of the verb and parameters to the level that platform is using\n var upgraded = { verb: verb, parameters: parameters };\n for (var _i = 0, _a = this._upgradeExecuteTranslations; _i < _a.length; _i++) {\n var upgradeTranslation = _a[_i];\n upgraded = upgradeTranslation(upgraded.verb, upgraded.parameters);\n }\n return upgraded;\n };\n StackingVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) {\n // Downgrade the response to what the external module is expecting\n var downgraded = executeResponse;\n for (var _i = 0, _a = this._downgradeExecuteTranslations; _i < _a.length; _i++) {\n var downgradeTranslation = _a[_i];\n downgraded = downgradeTranslation(downgraded);\n }\n return downgraded;\n };\n StackingVersionConverter.prototype.downgradeNotification = function (notification) {\n // Downgrade the notification to what the external module is expecting\n var downgraded = notification;\n for (var _i = 0, _a = this._downgradeNotificationTranslations; _i < _a.length; _i++) {\n var downgradeTranslation = _a[_i];\n downgraded = downgradeTranslation(downgraded);\n }\n return downgraded;\n };\n return StackingVersionConverter;\n}());\nexports.StackingVersionConverter = StackingVersionConverter;\n//# sourceMappingURL=StackingVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar IdentityVersionConverter_1 = require(\"./IdentityVersionConverter\");\nvar StackingVersionConverter_1 = require(\"./StackingVersionConverter\");\nvar VersionTranslations_1 = require(\"./VersionTranslations\");\n/**\n * @returns true if lhs < rhs (ignoring fix number)\n * @param lhs\n * @param rhs\n */\nfunction VersionLessThan(lhs, rhs) {\n if (lhs.major > rhs.major) {\n return false;\n }\n if (lhs.major < rhs.major) {\n return true;\n }\n return lhs.minor < rhs.minor;\n}\nexports.VersionLessThan = VersionLessThan;\n/**\n * @returns true if lhs == rhs (ignoring fix number)\n * @param lhs\n * @param rhs\n */\nfunction VersionEqualTo(lhs, rhs) {\n return lhs.major === rhs.major && lhs.minor === rhs.minor;\n}\nexports.VersionEqualTo = VersionEqualTo;\n// A mapping from an older client version of internal-contract to the current platform version of this contract.\n// Each version bump can have an array of translations to perform in order. Notice that this is\n// different than the major upgrades/downgrades above because it handles both major and minor version changes.\n// Also please note: downgradeExecuteCall is handled on the client/external side rather than platform side.\n// When updating the major or minor version of our internal-contract, you will need to update these data structures.\n// * If there are translations to add, add them to the version to \"upgrade from\" or \"downgrade to\".\nexports.ExecuteMinorUpgrades = {\n 1: {\n 9: [],\n },\n};\nexports.ExecuteMinorDowngrades = {\n 1: {\n 5: [VersionTranslations_1.DowngradeWorksheetNames],\n 9: [],\n },\n};\nexports.NotificationMinorDowngrades = {\n 1: {\n 9: [],\n 10: [VersionTranslations_1.DowngradeFlipboardZoneID],\n },\n};\n/**\n * Creates a new InternalContractVersionConverter which has the ability to upgrade and downgrade the contract\n * between the two versions, which are specified. If externalMajorVersion is greater than platformMajorVersion,\n * an error will be thrown because we won't know how to do those conversions.\n * This converter can handle both major and minor updates when the platform version is greater than external version.\n *\n * @param externalVersion VersionNumber of the internal api which the external module is using\n * @param platformVersion VersionNumber of the internal api which the platform is using\n */\nfunction CreateVersionConverter(externalVersion, platformVersion) {\n return CreateVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorUpgrades, exports.ExecuteMinorDowngrades, exports.NotificationMinorDowngrades);\n}\nexports.CreateVersionConverter = CreateVersionConverter;\n/**\n * Implementation of CreateVersionConverter. This function takes the upgrade, downgrade, and\n * notification arrays so that all the logic can be tested.\n *\n * @param externalVersion VersionNumber of the internal api which the external module is using\n * @param platformVersion VersionNumber of the internal api which the platform is using\n * @param upgrades MajorMinorTranslators for upgrades\n * @param downgrades MajorMinorTranslators for downgrades\n * @param notificationDowngrades MajorMinorTranslators for notification downgrades\n */\nfunction CreateVersionConverterWithTranslators(externalVersion, platformVersion, upgrades, downgrades, notificationDowngrades) {\n var externalMajorVersion = externalVersion.major;\n var externalMinorVersion = externalVersion.minor;\n var platformMajorVersion = platformVersion.major;\n if (externalMajorVersion > platformMajorVersion) {\n throw new Error(\"External version must be less than or equal to platform version.\\n externalMajorVersion=\" + externalMajorVersion + \" platformMajorVersion=\" + platformMajorVersion);\n }\n // If we are using the exact same versions (major.minor), just use the identity converter\n if (VersionEqualTo(externalVersion, platformVersion)) {\n return new IdentityVersionConverter_1.IdentityVersionConverter();\n }\n // Walk the span between the versions we have here and collect the upgrade and downgrades necessary\n var neededExecuteUpgrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, upgrades);\n var neededExecuteDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, downgrades);\n var neededNotificationDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, notificationDowngrades);\n // We want to apply the downgrades in reverse order in case of dependencies between them\n neededExecuteDowngrades.reverse();\n neededNotificationDowngrades.reverse();\n return StackingVersionConverter_1.StackingVersionConverter.fromData(externalVersion, platformVersion, neededExecuteUpgrades, neededExecuteDowngrades, neededNotificationDowngrades);\n}\nexports.CreateVersionConverterWithTranslators = CreateVersionConverterWithTranslators;\nfunction GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, majorMinorTranslators) {\n var neededTranslations = [];\n for (var major = externalMajorVersion; major <= platformMajorVersion; major++) {\n if (major in majorMinorTranslators) {\n var start = major === externalMajorVersion ? externalMinorVersion : 0;\n var maximumMinorVersion = GetMaximumMinorIndex(Object.keys(majorMinorTranslators[major]));\n for (var minor = start; minor <= maximumMinorVersion; minor++) {\n if (minor in majorMinorTranslators[major]) {\n neededTranslations.push.apply(neededTranslations, majorMinorTranslators[major][minor]);\n }\n }\n }\n }\n return neededTranslations;\n}\nfunction GetMaximumMinorIndex(minorVersions) {\n return minorVersions.map(function (a) { return Number(a); }).reduce(function (a, b) { return (a > b ? a : b); });\n}\nexports.GetMaximumMinorIndex = GetMaximumMinorIndex;\n//# sourceMappingURL=VersionConverterFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Notifications_1 = require(\"../contract/Notifications\");\n// This is where we will start to define some of these translations.\n// When modifying existing models, add the requisite conversion functions here, then use them\n// in the VersionConverterFactory implementation. Import old versions as you would any other module\n// 0 <-> Translations\n// Uncomment this line to import from the V0 definition of the API\n// import * as V0 from '@tableau-api-internal-contract-js_v0';\n// 1 <-> 2 Translations\n// Uncomment this line to import from the V1 definition of the API\n// import * as V1 from '@tableau-api-internal-contract-js_v1';\nfunction DowngradeWorksheetNames(executeResponse) {\n // Fix the dashboard friendly name issue. The structures are compatible,\n // so we still return the original reply, but we copy the SheetInfo.name\n // into the DashboardZone.name, where v1 wants to find it.\n var bootstrapInfo = executeResponse.result;\n if (bootstrapInfo.extensionDashboardInfo !== undefined) {\n bootstrapInfo.extensionDashboardInfo.zones.forEach(function (zone) {\n if (zone.sheetInfo) {\n zone.name = zone.sheetInfo.name;\n }\n });\n }\n return executeResponse;\n}\nexports.DowngradeWorksheetNames = DowngradeWorksheetNames;\nfunction DowngradeFlipboardZoneID(notification) {\n // Fix the FlipboardZoneId issue. Older external versions still check for flipboardZoneIDs.\n // When running against a newer server, if flipboardZoneId is absent, set it to default(0).\n if (notification.notificationId === Notifications_1.NotificationId.SelectedMarksChanged) {\n var visualModel = notification.data;\n if (visualModel.flipboardZoneID === undefined) {\n visualModel.flipboardZoneID = 0;\n }\n }\n return notification;\n}\nexports.DowngradeFlipboardZoneID = DowngradeFlipboardZoneID;\n//# sourceMappingURL=VersionTranslations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * This version converter doesn't actually do anything but is useful for testing or when we have\n * a matching platform and external version number\n */\nvar ExternalIdentityVersionConverter = /** @class */ (function () {\n function ExternalIdentityVersionConverter() {\n }\n ExternalIdentityVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) {\n return {\n verb: verb,\n parameters: parameters,\n };\n };\n ExternalIdentityVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) {\n return executeResponse;\n };\n ExternalIdentityVersionConverter.prototype.upgradeNotification = function (notification) {\n return notification;\n };\n return ExternalIdentityVersionConverter;\n}());\nexports.ExternalIdentityVersionConverter = ExternalIdentityVersionConverter;\n//# sourceMappingURL=ExternalIdentityVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * The version converter is designed to allow the platform and external modules\n * to seemlessly communicate over two different versions of the internal API. This converter\n * supports external's version(minor) >= platform's version(minor). When executing\n * commands, it is used to downgrade the external representation to what platform knows on the way in\n * and upgrade the representations on the way out.\n */\nvar ExternalStackingVersionConverter = /** @class */ (function () {\n /**\n * Creates a new instance of the StackingVersionConverter\n *\n * @param _externalVersion The version of the internal contract api-external-js is using\n * @param _platformVersion The version of the internal contract the api-platform-js is using\n * @param _downgradeExecuteCallTranslations Ordered list of the translations to perform when downgrading cmd parameters\n * @param _upgradeExecuteReturnTranslations Ordered list of upgrade translations to perform after a cmd is executed\n * @param _upgradeNotificationTranslations Ordered list of upgrade notfications to perform on events\n */\n function ExternalStackingVersionConverter(_externalVersion, _platformVersion, _downgradeExecuteCallTranslations, _upgradeExecuteReturnTranslations, _upgradeNotificationTranslations) {\n this._externalVersion = _externalVersion;\n this._platformVersion = _platformVersion;\n this._downgradeExecuteCallTranslations = _downgradeExecuteCallTranslations;\n this._upgradeExecuteReturnTranslations = _upgradeExecuteReturnTranslations;\n this._upgradeNotificationTranslations = _upgradeNotificationTranslations;\n if (this._externalVersion.major > this._platformVersion.major) {\n throw new Error(\"Cannot convert between external version \" + this._externalVersion.major + \"\\n and \" + this._platformVersion.major);\n }\n }\n ExternalStackingVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) {\n // Perform the downgrade of the verb and parameters to the level that platform is using\n var downgraded = { verb: verb, parameters: parameters };\n for (var _i = 0, _a = this._downgradeExecuteCallTranslations; _i < _a.length; _i++) {\n var downgradeTranslation = _a[_i];\n downgraded = downgradeTranslation(downgraded.verb, downgraded.parameters);\n }\n return downgraded;\n };\n ExternalStackingVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) {\n // Perform the upgrade of the response to what the external module is expecting\n var upgraded = executeResponse;\n for (var _i = 0, _a = this._upgradeExecuteReturnTranslations; _i < _a.length; _i++) {\n var upgradeTranslation = _a[_i];\n upgraded = upgradeTranslation(upgraded, verb, parameters);\n }\n return upgraded;\n };\n ExternalStackingVersionConverter.prototype.upgradeNotification = function (notification) {\n // Perform the upgrade of notification to what the external module is expecting\n var upgraded = notification;\n for (var _i = 0, _a = this._upgradeNotificationTranslations; _i < _a.length; _i++) {\n var upgradeNotification = _a[_i];\n upgraded = upgradeNotification(upgraded);\n }\n return upgraded;\n };\n return ExternalStackingVersionConverter;\n}());\nexports.ExternalStackingVersionConverter = ExternalStackingVersionConverter;\n//# sourceMappingURL=ExternalStackingVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar VersionConverterFactory_1 = require(\"../VersionConverterFactory\");\nvar ExternalIdentityVersionConverter_1 = require(\"./ExternalIdentityVersionConverter\");\nvar ExternalStackingVersionConverter_1 = require(\"./ExternalStackingVersionConverter\");\nvar ExternalVersionTranslations_1 = require(\"./ExternalVersionTranslations\");\n// A mapping from the current client version of internal-contract to an older platform version of the contract.\n// Each version bump can have an array of translations to perform in order.\n// These translations handle downgradeExecuteCall and upgradeExecuteReturn and are meant to be called on the\n// client/external side.\n// When updating the major or minor version of our internal-contract, you will need to update these data structures.\n// * If there are translations to add, add them to the version to 'upgrade from' or 'downgrade to'.\nexports.ExecuteMinorDowngradeCallExternal = {\n 1: {\n 9: [],\n 13: [ExternalVersionTranslations_1.DowngradeUnderlyingTableDataAsync, ExternalVersionTranslations_1.DowngradeLogicalTableDataAsync],\n },\n};\nexports.ExecuteMinorUpgradeReturnExternal = {\n 1: {\n 9: [ExternalVersionTranslations_1.UpgradeDataTableTypes],\n 29: [ExternalVersionTranslations_1.UpgradeDataTableRowsAndColumns],\n },\n};\nexports.ExecuteMinorUpgradeNotification = {\n 1: {\n 9: [],\n },\n};\n/**\n * Creates a new ExternalContractVersionConverter which has the ability to upgrade and downgrade\n * the contract between the two versions which are specified. If externalMajorVersion is less than\n * platformMajorVersion, an ExternalIdentityVersionConverter will be returned.\n * Handles upgrade/downgrade for both major and minor updates.\n *\n * @param externalVersion VersionNumber of the internal api which the external module is using\n * @param platformVersion VersionNumber of the internal api which the platform is using\n */\nfunction CreateExternalCompatibleVersionConverter(externalVersion, platformVersion) {\n return CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorDowngradeCallExternal, exports.ExecuteMinorUpgradeReturnExternal, exports.ExecuteMinorUpgradeNotification);\n}\nexports.CreateExternalCompatibleVersionConverter = CreateExternalCompatibleVersionConverter;\n/**\n * Implementation of CreateExternalCompatibleVersionConverterWithTranslators.\n * This function takes the upgrade, downgrade arrays so that all the logic can be tested.\n *\n * @param externalVersion VersionNumber of the internal contract which the external module is using\n * @param platformVersion VersionNumber of the internal contract which the platform is using\n * @param upgrades MajorMinorTranslators for response upgrades\n * @param downgrades MajorMinorTranslators for execute call downgrades\n */\nfunction CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, downgrades, upgrades, upgradeNotifications) {\n var externalMajorVersion = externalVersion.major;\n var platformMajorVersion = platformVersion.major;\n var platformMinorVersion = platformVersion.minor;\n // This check is present in VersionConverterFactory. We throw the same error here as well.\n // Hence we only need to check the minor versions for translations.\n if (externalMajorVersion > platformMajorVersion) {\n throw new Error(\"External version must be less than or equal to platform version.\\n externalMajorVersion=\" + externalMajorVersion + \" platformMajorVersion=\" + platformMajorVersion);\n }\n if (externalMajorVersion < platformMajorVersion || VersionConverterFactory_1.VersionEqualTo(externalVersion, platformVersion)) {\n return new ExternalIdentityVersionConverter_1.ExternalIdentityVersionConverter();\n }\n // Walk the span between the versions we have here and collect the upgrade and downgrades necessary\n var neededExecuteCallDowngrade = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, downgrades);\n var neededExecuteReturnUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgrades);\n var neededNotificationUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgradeNotifications);\n // Reverse the downgrade calls, so that we start the downgrade from the external version to the platform version\n neededExecuteCallDowngrade.reverse();\n return new ExternalStackingVersionConverter_1.ExternalStackingVersionConverter(externalVersion, platformVersion, neededExecuteCallDowngrade, neededExecuteReturnUpgrades, neededNotificationUpgrades);\n}\nexports.CreateExternalCompatibleVersionConverterWithTranslators = CreateExternalCompatibleVersionConverterWithTranslators;\nfunction GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, majorMinorTranslators) {\n var neededTranslations = [];\n if (platformMajorVersion in majorMinorTranslators) {\n var start = platformMinorVersion;\n var maximumMinorVersion = VersionConverterFactory_1.GetMaximumMinorIndex(Object.keys(majorMinorTranslators[platformMajorVersion]));\n for (var minor = start; minor <= maximumMinorVersion; minor++) {\n if (minor in majorMinorTranslators[platformMajorVersion]) {\n neededTranslations.push.apply(neededTranslations, majorMinorTranslators[platformMajorVersion][minor]);\n }\n }\n }\n return neededTranslations;\n}\n//# sourceMappingURL=ExternalVersionConverterFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar JsApiInternalContract_1 = require(\"../../JsApiInternalContract\");\n// 1.2 -> 1.0 Translations\n// Uncomment this line to import from the V1 definition of the API\n// import * as V1 from '@tableau-api-internal-contract-js_v1';\n/**\n * Prior to 2019.2 (internal-contract v1.9), DataValue.value were all strings.\n * Go through all DataValue objects. If we have a string, but the type should not be a string,\n * convert it to the correct type. The type of DataValue.value is 'any' in the contract, so\n * this change doesn't need any updates to classes or types.\n */\nfunction UpgradeDataTableTypes(executeResponse, verb, parameters) {\n if (!executeResponse) {\n return executeResponse;\n }\n var oldUnderlyingDataTable = executeResponse.result;\n if (oldUnderlyingDataTable.data !== undefined && oldUnderlyingDataTable.isSummary !== undefined) {\n convertDataValues(oldUnderlyingDataTable.data);\n return executeResponse;\n }\n var oldSelectedMarksTable = executeResponse.result;\n if (oldSelectedMarksTable.data !== undefined && Array.isArray(oldSelectedMarksTable.data)) {\n oldSelectedMarksTable.data.forEach(function (marksTable) {\n convertDataValues(marksTable);\n });\n return executeResponse;\n }\n return executeResponse;\n}\nexports.UpgradeDataTableTypes = UpgradeDataTableTypes;\n/**\n * Prior to 2020.2 (internal-contract v1.13 and older), worksheet.getUnderlyingTableDataAsync doesn't exist.\n * Map it to the older GetUnderlyingData verb and validate the the logical table Id.\n **/\nfunction DowngradeUnderlyingTableDataAsync(verb, parameters) {\n if (verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData) {\n validateParametersForObjectModel(verb, parameters);\n verb = JsApiInternalContract_1.VerbId.GetUnderlyingData;\n }\n return {\n verb: verb,\n parameters: parameters,\n };\n}\nexports.DowngradeUnderlyingTableDataAsync = DowngradeUnderlyingTableDataAsync;\n/**\n * Prior to 2020.2 (internal-contract v1.13 and older), datasource.getLogicalTableDataAsync doesn't exist.\n * Map it to the older GetDataSourceData verb and validate the the logical table Id.\n **/\nfunction DowngradeLogicalTableDataAsync(verb, parameters) {\n if (verb === JsApiInternalContract_1.VerbId.GetLogicalTableData) {\n validateParametersForObjectModel(verb, parameters);\n verb = JsApiInternalContract_1.VerbId.GetDataSourceData;\n }\n return {\n verb: verb,\n parameters: parameters,\n };\n}\nexports.DowngradeLogicalTableDataAsync = DowngradeLogicalTableDataAsync;\nfunction convertDataValues(table) {\n // dataTable is a two-dimensional array of data. First index is the row, second is the column.\n if (table === undefined || table.dataTable === undefined || !Array.isArray(table.dataTable)) {\n return;\n }\n table.dataTable.forEach(function (row) {\n row.forEach(function (dataValue, columnIndex) {\n var value = dataValue.value;\n if (value !== null) {\n dataValue.value = JsApiInternalContract_1.DataTypeConverter.convertValueAsStringToValue(value, table.headers[columnIndex].dataType);\n }\n });\n });\n}\n// ToDo: TFS1069027 Refactor input verbs & parameters in api-internal-contract Upgrade/Downgrade framework\nfunction validateParametersForObjectModel(verb, parameters) {\n if (parameters[JsApiInternalContract_1.ParameterId.LogicalTableId] !== JsApiInternalContract_1.ApiShowDataTableSentinel.SingleTableId) {\n throw new Error(\"Invalid logical table id passed to \" + verb + \".\");\n }\n}\n/**\n * Prior to 2021.2 (internal-contract v1.29 and below), getSummaryDataAsync did not support maxRows,\n * and any get...DataAsync did not support columnsToIncludeById.\n * Trim result to maxRows if it is included in the parameters for getSummaryDataAsync\n * Trim columns to columnsToInclude if included in the parameters for any get...DataAsync\n */\nfunction UpgradeDataTableRowsAndColumns(executeResponse, verb, parameters) {\n if (isGetSummaryDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.MaxRows]) {\n executeResponse = adjustDataRowLength(executeResponse, parameters[JsApiInternalContract_1.ParameterId.MaxRows]);\n }\n if (isGetTableDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]) {\n executeResponse = adjustDataColumns(executeResponse, parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]);\n }\n return executeResponse;\n}\nexports.UpgradeDataTableRowsAndColumns = UpgradeDataTableRowsAndColumns;\nfunction isGetSummaryDataVerb(verb) {\n return verb === JsApiInternalContract_1.VerbId.GetDataSummaryData;\n}\nfunction isGetTableDataVerb(verb) {\n return (verb === JsApiInternalContract_1.VerbId.GetDataSummaryData ||\n verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData ||\n verb === JsApiInternalContract_1.VerbId.GetLogicalTableData ||\n verb === JsApiInternalContract_1.VerbId.GetDataSourceData ||\n verb === JsApiInternalContract_1.VerbId.GetUnderlyingData);\n}\nfunction adjustDataRowLength(executeResponse, maxRows) {\n var underlyingDataTable = executeResponse.result;\n if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable)) {\n return executeResponse;\n }\n if (maxRows > 0 && maxRows < underlyingDataTable.data.dataTable.length) {\n underlyingDataTable.data.dataTable.length = maxRows;\n }\n return executeResponse;\n}\nfunction adjustDataColumns(executeResponse, columnsToInclude) {\n if (columnsToInclude.length === 0) {\n return executeResponse;\n }\n // verify that we have a valid UnderlyingDataTable\n var underlyingDataTable = executeResponse.result;\n if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable) || !Array.isArray(underlyingDataTable.data.headers)) {\n return executeResponse;\n }\n // 1. filter the headers to only columnsToInclude\n // 2. use the new headers to filter all rows\n // 3. update the indices in our new headers\n var newHeaders = underlyingDataTable.data.headers.filter(function (header, index) {\n return columnsToInclude.find(function (name) { return name === header.fieldName; });\n });\n underlyingDataTable.data.dataTable.forEach(function (row, index) {\n underlyingDataTable.data.dataTable[index] = row.filter(function (value, valueIndex) { return newHeaders.findIndex(function (header) { return header.index === valueIndex; }) !== -1; });\n });\n var newIndex = 0;\n underlyingDataTable.data.headers = newHeaders.map(function (header) {\n header.index = newIndex++;\n return header;\n });\n return executeResponse;\n}\n//# sourceMappingURL=ExternalVersionTranslations.js.map","\"use strict\";\n// Export everything which had been previously in the api-shared module\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ApiVersion_1 = require(\"./ApiShared/ApiVersion\");\nexports.ApiVersion = ApiVersion_1.ApiVersion;\n__export(require(\"./ApiShared/CrossFrame/CrossFrameBootstrap\"));\nvar CrossFrameDispatcher_1 = require(\"./ApiShared/CrossFrame/CrossFrameDispatcher\");\nexports.CrossFrameDispatcher = CrossFrameDispatcher_1.CrossFrameDispatcher;\nvar DataSource_1 = require(\"./ApiShared/DataSource\");\nexports.DataSource = DataSource_1.DataSource;\nvar ExternalToInternalEnumMappings_1 = require(\"./ApiShared/EnumMappings/ExternalToInternalEnumMappings\");\nexports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings;\nvar InternalToExternalEnumMappings_1 = require(\"./ApiShared/EnumMappings/InternalToExternalEnumMappings\");\nexports.InternalToExternalEnumMappings = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings;\nvar EventListenerManager_1 = require(\"./ApiShared/EventListenerManager\");\nexports.EventListenerManager = EventListenerManager_1.EventListenerManager;\nvar Field_1 = require(\"./ApiShared/Field\");\nexports.Field = Field_1.Field;\nvar CustomViewImpl_1 = require(\"./ApiShared/Impl/CustomViewImpl\");\nexports.CustomViewImpl = CustomViewImpl_1.CustomViewImpl;\nvar DashboardImpl_1 = require(\"./ApiShared/Impl/DashboardImpl\");\nexports.DashboardImpl = DashboardImpl_1.DashboardImpl;\nvar DashboardObjectImpl_1 = require(\"./ApiShared/Impl/DashboardObjectImpl\");\nexports.DashboardObjectImpl = DashboardObjectImpl_1.DashboardObjectImpl;\nvar DataSourceImpl_1 = require(\"./ApiShared/Impl/DataSourceImpl\");\nexports.DataSourceImpl = DataSourceImpl_1.DataSourceImpl;\nvar ParameterImpl_1 = require(\"./ApiShared/Impl/ParameterImpl\");\nexports.ParameterImpl = ParameterImpl_1.ParameterImpl;\nvar SheetImpl_1 = require(\"./ApiShared/Impl/SheetImpl\");\nexports.SheetImpl = SheetImpl_1.SheetImpl;\nvar SheetInfoImpl_1 = require(\"./ApiShared/Impl/SheetInfoImpl\");\nexports.SheetInfoImpl = SheetInfoImpl_1.SheetInfoImpl;\nvar SingleEventManagerImpl_1 = require(\"./ApiShared/Impl/SingleEventManagerImpl\");\nexports.SingleEventManagerImpl = SingleEventManagerImpl_1.SingleEventManagerImpl;\nvar StoryImpl_1 = require(\"./ApiShared/Impl/StoryImpl\");\nexports.StoryImpl = StoryImpl_1.StoryImpl;\nvar StoryPointImpl_1 = require(\"./ApiShared/Impl/StoryPointImpl\");\nexports.StoryPointImpl = StoryPointImpl_1.StoryPointImpl;\nvar StoryPointInfoImpl_1 = require(\"./ApiShared/Impl/StoryPointInfoImpl\");\nexports.StoryPointInfoImpl = StoryPointInfoImpl_1.StoryPointInfoImpl;\nvar WorkbookImpl_1 = require(\"./ApiShared/Impl/WorkbookImpl\");\nexports.WorkbookImpl = WorkbookImpl_1.WorkbookImpl;\nvar WorksheetImpl_1 = require(\"./ApiShared/Impl/WorksheetImpl\");\nexports.WorksheetImpl = WorksheetImpl_1.WorksheetImpl;\nvar Point_1 = require(\"./ApiShared/Point\");\nexports.Point = Point_1.Point;\n__export(require(\"./ApiShared/Services/RegisterAllSharedServices\"));\n__export(require(\"./ApiShared/Services/ServiceRegistry\"));\nvar ClientInfoServiceImpl_1 = require(\"./ApiShared/Services/impl/ClientInfoServiceImpl\");\nexports.ClientInfoServiceImpl = ClientInfoServiceImpl_1.ClientInfoServiceImpl;\nvar NotificationServiceImpl_1 = require(\"./ApiShared/Services/impl/NotificationServiceImpl\");\nexports.NotificationServiceImpl = NotificationServiceImpl_1.NotificationServiceImpl;\nvar NotificationServiceImplBase_1 = require(\"./ApiShared/Services/impl/NotificationServiceImplBase\");\nexports.NotificationServiceImplBase = NotificationServiceImplBase_1.NotificationServiceImplBase;\nexports.Registration = NotificationServiceImplBase_1.Registration;\nvar ServiceImplBase_1 = require(\"./ApiShared/Services/impl/ServiceImplBase\");\nexports.ServiceImplBase = ServiceImplBase_1.ServiceImplBase;\nvar SizeServiceImpl_1 = require(\"./ApiShared/Services/impl/SizeServiceImpl\");\nexports.SizeServiceImpl = SizeServiceImpl_1.SizeServiceImpl;\nvar StoryActivationServiceImpl_1 = require(\"./ApiShared/Services/impl/StoryActivationServiceImpl\");\nexports.StoryActivationServiceImpl = StoryActivationServiceImpl_1.StoryActivationServiceImpl;\nvar TableauError_1 = require(\"./ApiShared/TableauError\");\nexports.TableauError = TableauError_1.TableauError;\nvar Deferred_1 = require(\"./ApiShared/Utils/Deferred\");\nexports.Deferred = Deferred_1.Deferred;\nvar ErrorHelpers_1 = require(\"./ApiShared/Utils/ErrorHelpers\");\nexports.ErrorHelpers = ErrorHelpers_1.ErrorHelpers;\nvar ExportHelpers_1 = require(\"./ApiShared/Utils/ExportHelpers\");\nexports.ExportHelpers = ExportHelpers_1.ExportHelpers;\nvar SheetUtils_1 = require(\"./ApiShared/Utils/SheetUtils\");\nexports.SheetUtils = SheetUtils_1.SheetUtils;\nvar VersionNumber_1 = require(\"./ApiShared/VersionNumber\");\nexports.VersionNumber = VersionNumber_1.VersionNumber;\nvar VersionedExternalApiDispatcher_1 = require(\"./VersionedExternalApiDispatcher\");\nexports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher_1.VersionedExternalApiDispatcher;\n//# sourceMappingURL=ApiShared.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar VersionNumber_1 = require(\"./VersionNumber\");\n/**\n * This is the singleton wrapper of VersionNumber\n */\nvar ApiVersion = /** @class */ (function () {\n function ApiVersion() {\n }\n Object.defineProperty(ApiVersion, \"Instance\", {\n /**\n * Gets the singleton instance of the version number.\n */\n get: function () {\n return ApiVersion._instance;\n },\n enumerable: true,\n configurable: true\n });\n ApiVersion.SetVersionNumber = function (numString, isAlpha) {\n ApiVersion._instance = new VersionNumber_1.VersionNumber(numString, isAlpha);\n };\n return ApiVersion;\n}());\nexports.ApiVersion = ApiVersion;\n//# sourceMappingURL=ApiVersion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of a connection summary.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar ConnectionSummary = /** @class */ (function () {\n function ConnectionSummary(_connectionInfo) {\n this._connectionInfo = _connectionInfo;\n }\n Object.defineProperty(ConnectionSummary.prototype, \"name\", {\n get: function () {\n return this._connectionInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectionSummary.prototype, \"id\", {\n get: function () {\n return this._connectionInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectionSummary.prototype, \"serverURI\", {\n get: function () {\n return this._connectionInfo.serverURI;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectionSummary.prototype, \"type\", {\n get: function () {\n return this._connectionInfo.type;\n },\n enumerable: true,\n configurable: true\n });\n return ConnectionSummary;\n}());\nexports.ConnectionSummary = ConnectionSummary;\n//# sourceMappingURL=ConnectionSummary.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar CrossFrameDispatcher_1 = require(\"./CrossFrameDispatcher\");\n// Checks to see if we are running in an iframe currently: https://stackoverflow.com/a/326076/8821153\nfunction inIframe(thisWindow) {\n try {\n return thisWindow.self !== thisWindow.parent;\n }\n catch (e) {\n return true;\n }\n}\n/**\n * Attempts to bootstrap the extension with a cross-frame parent where Tableau is running\n *\n * @param thisWindow The window which we are running in (injected for unit testing purposes)\n * @param internalContractVersion The version number of the internal contract we are using\n * @returns A promise which is doing the actual bootstrapping\n */\nfunction doCrossFrameBootstrap(thisWindow, internalContractVersion, options) {\n return new Promise(function (resolve, reject) {\n var parent;\n // Normally, we are running inside an iframe. The exception to this is\n // when we are running as an extension inside a dialog as part of the UINamespace\n // functionality. In that case, we want the opener of this window rather than the parent.\n if (!inIframe(thisWindow)) {\n parent = thisWindow.opener;\n }\n else {\n parent = thisWindow.parent;\n }\n if (!parent) {\n reject('This extension is not running inside an iframe, desktop, or popup window. Initialization failed.');\n }\n // Create the messenger which will do he communication between this window and our parent\n // Since we don't know where we are running yet, we have to make this initial origin '*'. Once\n // we have successfully initialized our extension, we will limit where we send messages\n var messenger = new api_internal_contract_js_1.CrossFrameMessenger(thisWindow, parent, '*');\n // Prepare to send an initialization message to the parent frame\n var initializationMessage = messenger.prepareInitializationMessage(internalContractVersion, api_internal_contract_js_1.MESSAGING_VERSION, options);\n // When we receive a response back from the parent, we check to make sure the guids match and then we know\n // that the parent is aware of us and we can start communicating\n messenger.setCommandResponseMessageHandler(function (msg) {\n // Verify we are getting a response from our initialize message\n if (msg.commandGuid === initializationMessage.messageGuid) {\n // The versioning of the dispatcher happens on the other side of our frame, and\n // in a wrapper on this side. This one doesn't have any version knowledge.\n var dispatcherFactory = function () { return new CrossFrameDispatcher_1.CrossFrameDispatcher(messenger); };\n resolve(dispatcherFactory);\n }\n });\n // Now that our handlers are ready, start listening and send our initialization message\n messenger.startListening();\n initializationMessage.send();\n });\n}\nexports.doCrossFrameBootstrap = doCrossFrameBootstrap;\n//# sourceMappingURL=CrossFrameBootstrap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\n/**\n * This is an implementation of the InternalApiDispatcher interface which functions by passing messages\n * across a frame boundary. This is usually between the code where our javscript library has been included\n * by a 3rd party dev and another frame where Tableau server has content.\n */\nvar CrossFrameDispatcher = /** @class */ (function () {\n /**\n * Creates an instance of CrossFrameDispatcher which will use the given messenger to communicate\n * @param _messenger an instantiated and listening messenger object\n */\n function CrossFrameDispatcher(_messenger) {\n this._messenger = _messenger;\n // Collection of pending promises which are waiting to be resolved. When we receive a response back from the other frame,\n // these promises can be either resolved or rejected\n this._pendingPromises = {};\n // The collection of notification handlers which have been registered with this dispatcher\n this._notificationHandlers = [];\n if (!this._messenger) {\n throw 'Missing messenger object';\n }\n // Set up our message handlers. We only care about incoming notifications and command responses\n this._messenger.setCommandResponseMessageHandler(this.onCommandResponse.bind(this));\n this._messenger.setNotificationMessageHandler(this.onNotification.bind(this));\n }\n ////// Start InternalApiDispatcher implementation\n CrossFrameDispatcher.prototype.execute = function (verb, parameters) {\n var _this = this;\n // To execute a verb, we first prepare a command message and then define a promise.\n var preparedMessage = this._messenger.prepareCommandMessage(verb, parameters);\n var promise = new Promise(function (resolve, reject) {\n // Save off the pending promise by the messageGuid we are about to send. When a response is\n // received, we'll be able to resolve this promise with the result\n _this._pendingPromises[preparedMessage.messageGuid] = { resolve: resolve, reject: reject };\n });\n // Actually send the message and return the promise\n preparedMessage.send();\n return promise;\n };\n CrossFrameDispatcher.prototype.registerNotificationHandler = function (handler) {\n this._notificationHandlers.push(handler);\n };\n CrossFrameDispatcher.prototype.unregisterNotificationHandler = function (handler) {\n this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; });\n };\n ////// End InternalApiDispatcher implementation\n CrossFrameDispatcher.prototype.onCommandResponse = function (response) {\n // We got a command response, look through the pending promises and resolve\n if (Object.keys(this._pendingPromises).indexOf(response.commandGuid) < 0) {\n return; // We don't have any reference to this command, just return\n }\n var pendingPromise = this._pendingPromises[response.commandGuid];\n // If we have an error defined, reject the promise\n if (response.error) {\n pendingPromise.reject(response.error);\n }\n // If we have data defined, resolve the promise\n if (response.data) {\n pendingPromise.resolve({ result: response.data });\n }\n // Clean up our pending promises object\n delete this._pendingPromises[response.commandGuid];\n };\n CrossFrameDispatcher.prototype.onNotification = function (notificationMessage) {\n // Go through each notification handler we have registered and let them know a notification came in\n for (var _i = 0, _a = this._notificationHandlers; _i < _a.length; _i++) {\n var handler = _a[_i];\n try {\n handler({ notificationId: notificationMessage.notificationId, data: notificationMessage.data });\n }\n catch (e) {\n // Incase of a IncompatibleVersionError, re-throw the error.\n if (e.errorCode === api_external_contract_js_1.EmbeddingErrorCodes.IncompatibleVersionError) {\n throw e;\n }\n // Else Ignore so if one handler errors, the other still get the message.\n }\n }\n };\n return CrossFrameDispatcher;\n}());\nexports.CrossFrameDispatcher = CrossFrameDispatcher;\n//# sourceMappingURL=CrossFrameDispatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DataSource = /** @class */ (function () {\n function DataSource(_dataSourceImpl) {\n this._dataSourceImpl = _dataSourceImpl;\n }\n Object.defineProperty(DataSource.prototype, \"name\", {\n get: function () {\n return this._dataSourceImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"id\", {\n get: function () {\n return this._dataSourceImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"fields\", {\n get: function () {\n return this._dataSourceImpl.fields;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"extractUpdateTime\", {\n get: function () {\n return this._dataSourceImpl.extractUpdateTime;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"isExtract\", {\n get: function () {\n return this._dataSourceImpl.isExtract;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"isPublished\", {\n get: function () {\n return this._dataSourceImpl.isPublished;\n },\n enumerable: true,\n configurable: true\n });\n DataSource.prototype.publishedUrl = function () {\n return this._dataSourceImpl.publishedUrl();\n };\n DataSource.prototype.refreshAsync = function () {\n return this._dataSourceImpl.refreshAsync();\n };\n DataSource.prototype.getActiveTablesAsync = function () {\n console.warn('DataSource.getActiveTablesAsync is deprecated. Please use DataSource.getLogicalTablesAsync.');\n return this._dataSourceImpl.getActiveTablesAsync();\n };\n DataSource.prototype.getConnectionSummariesAsync = function () {\n return this._dataSourceImpl.getConnectionSummariesAsync();\n };\n DataSource.prototype.getUnderlyingDataAsync = function (options) {\n console.warn('DataSource.getUnderlyingDataAsync is deprecated. Please use ' +\n 'DataSource.getLogicalTablesAsync and DataSource.getLogicalTableDataAsync.');\n return this._dataSourceImpl.getUnderlyingDataAsync(options);\n };\n DataSource.prototype.getLogicalTablesAsync = function () {\n return this._dataSourceImpl.getLogicalTablesAsync();\n };\n DataSource.prototype.getLogicalTableDataAsync = function (logicalTableId, options) {\n return this._dataSourceImpl.getLogicalTableDataAsync(logicalTableId, options);\n };\n DataSource.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n return this._dataSourceImpl.getLogicalTableDataReaderAsync(logicalTableId, pageRowCount, options);\n };\n return DataSource;\n}());\nexports.DataSource = DataSource;\n//# sourceMappingURL=DataSource.js.map","\"use strict\";\nvar _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar EnumConverter_1 = require(\"../Utils/EnumConverter\");\n/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */\n/**\n * Maps enums used by the external-api-contract to the enums used\n * in the internal-api-contract, which developers code against.\n */\nvar ExternalToInternalEnumMappings = /** @class */ (function () {\n function ExternalToInternalEnumMappings() {\n }\n ExternalToInternalEnumMappings.filterDomainType = new EnumConverter_1.EnumConverter((_a = {},\n _a[api_external_contract_js_1.FilterDomainType.Relevant] = api_internal_contract_js_1.FilterDomainType.Relevant,\n _a[api_external_contract_js_1.FilterDomainType.Database] = api_internal_contract_js_1.FilterDomainType.Database,\n _a));\n ExternalToInternalEnumMappings.nullOptions = new EnumConverter_1.EnumConverter((_b = {},\n _b[api_external_contract_js_1.FilterNullOption.AllValues] = api_internal_contract_js_1.FilterNullOption.AllValues,\n _b[api_external_contract_js_1.FilterNullOption.NonNullValues] = api_internal_contract_js_1.FilterNullOption.NonNullValues,\n _b[api_external_contract_js_1.FilterNullOption.NullValues] = api_internal_contract_js_1.FilterNullOption.NullValues,\n _b));\n ExternalToInternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_c = {},\n _c[api_external_contract_js_1.FilterUpdateType.Add] = api_internal_contract_js_1.FilterUpdateType.Add,\n _c[api_external_contract_js_1.FilterUpdateType.All] = api_internal_contract_js_1.FilterUpdateType.All,\n _c[api_external_contract_js_1.FilterUpdateType.Remove] = api_internal_contract_js_1.FilterUpdateType.Remove,\n _c[api_external_contract_js_1.FilterUpdateType.Replace] = api_internal_contract_js_1.FilterUpdateType.Replace,\n _c));\n ExternalToInternalEnumMappings.setVisibilityType = new EnumConverter_1.EnumConverter((_d = {},\n _d[api_external_contract_js_1.ZoneVisibilityType.Show] = true,\n _d[api_external_contract_js_1.ZoneVisibilityType.Hide] = false,\n _d));\n ExternalToInternalEnumMappings.setReplaySpeedType = new EnumConverter_1.EnumConverter((_e = {},\n // these numbers are duration multipliers\n // 2.0, for example, doubles the duration of the replay, slowing it down to 0.5x speed\n _e[api_external_contract_js_1.ReplaySpeedType.Slow] = 2.0,\n _e[api_external_contract_js_1.ReplaySpeedType.Normal] = 1.0,\n _e[api_external_contract_js_1.ReplaySpeedType.Fast] = 0.5,\n _e));\n ExternalToInternalEnumMappings.sheetType = new EnumConverter_1.EnumConverter((_f = {},\n _f[api_external_contract_js_1.SheetType.Dashboard] = api_internal_contract_js_1.SheetType.Dashboard,\n _f[api_external_contract_js_1.SheetType.Worksheet] = api_internal_contract_js_1.SheetType.Worksheet,\n _f[api_external_contract_js_1.SheetType.Story] = api_internal_contract_js_1.SheetType.Story,\n _f));\n ExternalToInternalEnumMappings.showDataTableFormatType = new EnumConverter_1.EnumConverter((_g = {},\n _g[api_external_contract_js_1.IncludeDataValuesOption.AllValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeAndFormattedValues,\n _g[api_external_contract_js_1.IncludeDataValuesOption.OnlyNativeValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly,\n _g[api_external_contract_js_1.IncludeDataValuesOption.OnlyFormattedValues] = api_internal_contract_js_1.ApiShowDataTableFormat.FormattedValuesOnly,\n _g));\n ExternalToInternalEnumMappings.periodType = new EnumConverter_1.EnumConverter((_h = {},\n _h[api_external_contract_js_1.PeriodType.Years] = api_internal_contract_js_1.DateStepPeriod.Years,\n _h[api_external_contract_js_1.PeriodType.Quarters] = api_internal_contract_js_1.DateStepPeriod.Quarters,\n _h[api_external_contract_js_1.PeriodType.Months] = api_internal_contract_js_1.DateStepPeriod.Months,\n _h[api_external_contract_js_1.PeriodType.Weeks] = api_internal_contract_js_1.DateStepPeriod.Weeks,\n _h[api_external_contract_js_1.PeriodType.Days] = api_internal_contract_js_1.DateStepPeriod.Days,\n _h[api_external_contract_js_1.PeriodType.Hours] = api_internal_contract_js_1.DateStepPeriod.Hours,\n _h[api_external_contract_js_1.PeriodType.Minutes] = api_internal_contract_js_1.DateStepPeriod.Minutes,\n _h[api_external_contract_js_1.PeriodType.Seconds] = api_internal_contract_js_1.DateStepPeriod.Seconds,\n _h));\n ExternalToInternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_j = {},\n _j[api_external_contract_js_1.DateRangeType.Last] = api_internal_contract_js_1.DateRangeType.Last,\n _j[api_external_contract_js_1.DateRangeType.LastN] = api_internal_contract_js_1.DateRangeType.LastN,\n _j[api_external_contract_js_1.DateRangeType.Next] = api_internal_contract_js_1.DateRangeType.Next,\n _j[api_external_contract_js_1.DateRangeType.NextN] = api_internal_contract_js_1.DateRangeType.NextN,\n _j[api_external_contract_js_1.DateRangeType.Current] = api_internal_contract_js_1.DateRangeType.Current,\n _j[api_external_contract_js_1.DateRangeType.ToDate] = api_internal_contract_js_1.DateRangeType.ToDate,\n _j));\n ExternalToInternalEnumMappings.dialogStyles = new EnumConverter_1.EnumConverter((_k = {},\n _k[api_external_contract_js_1.DialogStyle.Window] = api_internal_contract_js_1.DialogStyle.Window,\n _k[api_external_contract_js_1.DialogStyle.Modal] = api_internal_contract_js_1.DialogStyle.Modal,\n _k[api_external_contract_js_1.DialogStyle.Modeless] = api_internal_contract_js_1.DialogStyle.Modeless,\n _k));\n return ExternalToInternalEnumMappings;\n}());\nexports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings;\n/* tslint:enable:typedef */\n//# sourceMappingURL=ExternalToInternalEnumMappings.js.map","\"use strict\";\nvar _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar EnumConverter_1 = require(\"../Utils/EnumConverter\");\n/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */\n/**\n * Maps enums used by the internal-api-contract to the enums used\n * in the external-api-contract, which developers code against.\n */\nvar InternalToExternalEnumMappings = /** @class */ (function () {\n function InternalToExternalEnumMappings() {\n }\n InternalToExternalEnumMappings.extensionContext = new EnumConverter_1.EnumConverter((_a = {},\n _a[api_internal_contract_js_1.ExtensionContext.Desktop] = api_external_contract_js_1.ExtensionContext.Desktop,\n _a[api_internal_contract_js_1.ExtensionContext.Server] = api_external_contract_js_1.ExtensionContext.Server,\n _a));\n InternalToExternalEnumMappings.extensionMode = new EnumConverter_1.EnumConverter((_b = {},\n _b[api_internal_contract_js_1.ExtensionMode.Authoring] = api_external_contract_js_1.ExtensionMode.Authoring,\n _b[api_internal_contract_js_1.ExtensionMode.Viewing] = api_external_contract_js_1.ExtensionMode.Viewing,\n _b));\n InternalToExternalEnumMappings.columnType = new EnumConverter_1.EnumConverter((_c = {},\n _c[api_internal_contract_js_1.ColumnType.Continuous] = api_external_contract_js_1.ColumnType.Continuous,\n _c[api_internal_contract_js_1.ColumnType.Discrete] = api_external_contract_js_1.ColumnType.Discrete,\n _c));\n InternalToExternalEnumMappings.fieldAggregationType = new EnumConverter_1.EnumConverter((_d = {},\n _d[api_internal_contract_js_1.FieldAggregationType.Attr] = api_external_contract_js_1.FieldAggregationType.Attr,\n _d[api_internal_contract_js_1.FieldAggregationType.Avg] = api_external_contract_js_1.FieldAggregationType.Avg,\n _d[api_internal_contract_js_1.FieldAggregationType.Collect] = api_external_contract_js_1.FieldAggregationType.Collect,\n _d[api_internal_contract_js_1.FieldAggregationType.Count] = api_external_contract_js_1.FieldAggregationType.Count,\n _d[api_internal_contract_js_1.FieldAggregationType.Countd] = api_external_contract_js_1.FieldAggregationType.Countd,\n _d[api_internal_contract_js_1.FieldAggregationType.Day] = api_external_contract_js_1.FieldAggregationType.Day,\n _d[api_internal_contract_js_1.FieldAggregationType.End] = api_external_contract_js_1.FieldAggregationType.End,\n _d[api_internal_contract_js_1.FieldAggregationType.Hour] = api_external_contract_js_1.FieldAggregationType.Hour,\n _d[api_internal_contract_js_1.FieldAggregationType.InOut] = api_external_contract_js_1.FieldAggregationType.InOut,\n _d[api_internal_contract_js_1.FieldAggregationType.Kurtosis] = api_external_contract_js_1.FieldAggregationType.Kurtosis,\n _d[api_internal_contract_js_1.FieldAggregationType.Max] = api_external_contract_js_1.FieldAggregationType.Max,\n _d[api_internal_contract_js_1.FieldAggregationType.Mdy] = api_external_contract_js_1.FieldAggregationType.Mdy,\n _d[api_internal_contract_js_1.FieldAggregationType.Median] = api_external_contract_js_1.FieldAggregationType.Median,\n _d[api_internal_contract_js_1.FieldAggregationType.Min] = api_external_contract_js_1.FieldAggregationType.Min,\n _d[api_internal_contract_js_1.FieldAggregationType.Minute] = api_external_contract_js_1.FieldAggregationType.Minute,\n _d[api_internal_contract_js_1.FieldAggregationType.MonthYear] = api_external_contract_js_1.FieldAggregationType.MonthYear,\n _d[api_internal_contract_js_1.FieldAggregationType.None] = api_external_contract_js_1.FieldAggregationType.None,\n _d[api_internal_contract_js_1.FieldAggregationType.Qtr] = api_external_contract_js_1.FieldAggregationType.Qtr,\n _d[api_internal_contract_js_1.FieldAggregationType.Quart1] = api_external_contract_js_1.FieldAggregationType.Quart1,\n _d[api_internal_contract_js_1.FieldAggregationType.Quart3] = api_external_contract_js_1.FieldAggregationType.Quart3,\n _d[api_internal_contract_js_1.FieldAggregationType.Second] = api_external_contract_js_1.FieldAggregationType.Second,\n _d[api_internal_contract_js_1.FieldAggregationType.Skewness] = api_external_contract_js_1.FieldAggregationType.Skewness,\n _d[api_internal_contract_js_1.FieldAggregationType.Stdev] = api_external_contract_js_1.FieldAggregationType.Stdev,\n _d[api_internal_contract_js_1.FieldAggregationType.Stdevp] = api_external_contract_js_1.FieldAggregationType.Stdevp,\n _d[api_internal_contract_js_1.FieldAggregationType.Sum] = api_external_contract_js_1.FieldAggregationType.Sum,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncDay] = api_external_contract_js_1.FieldAggregationType.TruncDay,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncHour] = api_external_contract_js_1.FieldAggregationType.TruncHour,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncMinute] = api_external_contract_js_1.FieldAggregationType.TruncMinute,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncMonth] = api_external_contract_js_1.FieldAggregationType.TruncMonth,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncQtr] = api_external_contract_js_1.FieldAggregationType.TruncQtr,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncSecond] = api_external_contract_js_1.FieldAggregationType.TruncSecond,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncWeek] = api_external_contract_js_1.FieldAggregationType.TruncWeek,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncYear] = api_external_contract_js_1.FieldAggregationType.TruncYear,\n _d[api_internal_contract_js_1.FieldAggregationType.User] = api_external_contract_js_1.FieldAggregationType.User,\n _d[api_internal_contract_js_1.FieldAggregationType.Var] = api_external_contract_js_1.FieldAggregationType.Var,\n _d[api_internal_contract_js_1.FieldAggregationType.Varp] = api_external_contract_js_1.FieldAggregationType.Varp,\n _d[api_internal_contract_js_1.FieldAggregationType.Week] = api_external_contract_js_1.FieldAggregationType.Week,\n _d[api_internal_contract_js_1.FieldAggregationType.Weekday] = api_external_contract_js_1.FieldAggregationType.Weekday,\n _d[api_internal_contract_js_1.FieldAggregationType.Year] = api_external_contract_js_1.FieldAggregationType.Year,\n _d));\n InternalToExternalEnumMappings.fieldRoleType = new EnumConverter_1.EnumConverter((_e = {},\n _e[api_internal_contract_js_1.FieldRoleType.Dimension] = api_external_contract_js_1.FieldRoleType.Dimension,\n _e[api_internal_contract_js_1.FieldRoleType.Measure] = api_external_contract_js_1.FieldRoleType.Measure,\n _e[api_internal_contract_js_1.FieldRoleType.Unknown] = api_external_contract_js_1.FieldRoleType.Unknown,\n _e));\n InternalToExternalEnumMappings.sheetType = new EnumConverter_1.EnumConverter((_f = {},\n _f[api_internal_contract_js_1.SheetType.Dashboard] = api_external_contract_js_1.SheetType.Dashboard,\n _f[api_internal_contract_js_1.SheetType.Story] = api_external_contract_js_1.SheetType.Story,\n _f[api_internal_contract_js_1.SheetType.Worksheet] = api_external_contract_js_1.SheetType.Worksheet,\n _f));\n InternalToExternalEnumMappings.dashboardObjectType = new EnumConverter_1.EnumConverter((_g = {},\n _g[api_internal_contract_js_1.DashboardObjectType.Extension] = api_external_contract_js_1.DashboardObjectType.Extension,\n _g[api_internal_contract_js_1.DashboardObjectType.Blank] = api_external_contract_js_1.DashboardObjectType.Blank,\n _g[api_internal_contract_js_1.DashboardObjectType.Image] = api_external_contract_js_1.DashboardObjectType.Image,\n _g[api_internal_contract_js_1.DashboardObjectType.Legend] = api_external_contract_js_1.DashboardObjectType.Legend,\n _g[api_internal_contract_js_1.DashboardObjectType.PageFilter] = api_external_contract_js_1.DashboardObjectType.PageFilter,\n _g[api_internal_contract_js_1.DashboardObjectType.ParameterControl] = api_external_contract_js_1.DashboardObjectType.ParameterControl,\n _g[api_internal_contract_js_1.DashboardObjectType.QuickFilter] = api_external_contract_js_1.DashboardObjectType.QuickFilter,\n _g[api_internal_contract_js_1.DashboardObjectType.Text] = api_external_contract_js_1.DashboardObjectType.Text,\n _g[api_internal_contract_js_1.DashboardObjectType.Title] = api_external_contract_js_1.DashboardObjectType.Title,\n _g[api_internal_contract_js_1.DashboardObjectType.WebPage] = api_external_contract_js_1.DashboardObjectType.WebPage,\n _g[api_internal_contract_js_1.DashboardObjectType.Worksheet] = api_external_contract_js_1.DashboardObjectType.Worksheet,\n _g));\n InternalToExternalEnumMappings.dataType = new EnumConverter_1.EnumConverter((_h = {},\n _h[api_internal_contract_js_1.DataType.Bool] = api_external_contract_js_1.DataType.Bool,\n _h[api_internal_contract_js_1.DataType.Date] = api_external_contract_js_1.DataType.Date,\n _h[api_internal_contract_js_1.DataType.DateTime] = api_external_contract_js_1.DataType.DateTime,\n _h[api_internal_contract_js_1.DataType.Float] = api_external_contract_js_1.DataType.Float,\n _h[api_internal_contract_js_1.DataType.Int] = api_external_contract_js_1.DataType.Int,\n _h[api_internal_contract_js_1.DataType.String] = api_external_contract_js_1.DataType.String,\n _h));\n InternalToExternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_j = {},\n _j[api_internal_contract_js_1.FilterUpdateType.Add] = api_external_contract_js_1.FilterUpdateType.Add,\n _j[api_internal_contract_js_1.FilterUpdateType.All] = api_external_contract_js_1.FilterUpdateType.All,\n _j[api_internal_contract_js_1.FilterUpdateType.Remove] = api_external_contract_js_1.FilterUpdateType.Remove,\n _j[api_internal_contract_js_1.FilterUpdateType.Replace] = api_external_contract_js_1.FilterUpdateType.Replace,\n _j));\n InternalToExternalEnumMappings.allowableValues = new EnumConverter_1.EnumConverter((_k = {},\n _k[api_internal_contract_js_1.DomainRestrictionType.All] = api_external_contract_js_1.ParameterValueType.All,\n _k[api_internal_contract_js_1.DomainRestrictionType.List] = api_external_contract_js_1.ParameterValueType.List,\n _k[api_internal_contract_js_1.DomainRestrictionType.Range] = api_external_contract_js_1.ParameterValueType.Range,\n _k));\n InternalToExternalEnumMappings.dateStepPeriod = new EnumConverter_1.EnumConverter((_l = {},\n _l[api_internal_contract_js_1.DateStepPeriod.Years] = api_external_contract_js_1.PeriodType.Years,\n _l[api_internal_contract_js_1.DateStepPeriod.Quarters] = api_external_contract_js_1.PeriodType.Quarters,\n _l[api_internal_contract_js_1.DateStepPeriod.Months] = api_external_contract_js_1.PeriodType.Months,\n _l[api_internal_contract_js_1.DateStepPeriod.Weeks] = api_external_contract_js_1.PeriodType.Weeks,\n _l[api_internal_contract_js_1.DateStepPeriod.Days] = api_external_contract_js_1.PeriodType.Days,\n _l[api_internal_contract_js_1.DateStepPeriod.Hours] = api_external_contract_js_1.PeriodType.Hours,\n _l[api_internal_contract_js_1.DateStepPeriod.Minutes] = api_external_contract_js_1.PeriodType.Minutes,\n _l[api_internal_contract_js_1.DateStepPeriod.Seconds] = api_external_contract_js_1.PeriodType.Seconds,\n _l));\n InternalToExternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_m = {},\n _m[api_internal_contract_js_1.DateRangeType.Current] = api_external_contract_js_1.DateRangeType.Current,\n _m[api_internal_contract_js_1.DateRangeType.Last] = api_external_contract_js_1.DateRangeType.Last,\n _m[api_internal_contract_js_1.DateRangeType.LastN] = api_external_contract_js_1.DateRangeType.LastN,\n _m[api_internal_contract_js_1.DateRangeType.Next] = api_external_contract_js_1.DateRangeType.Next,\n _m[api_internal_contract_js_1.DateRangeType.NextN] = api_external_contract_js_1.DateRangeType.NextN,\n _m[api_internal_contract_js_1.DateRangeType.ToDate] = api_external_contract_js_1.DateRangeType.ToDate,\n _m));\n InternalToExternalEnumMappings.errorCode = new EnumConverter_1.EnumConverter((_o = {},\n _o[api_internal_contract_js_1.ErrorCodes.INITIALIZATION_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.INTERNAL_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.MISSING_ENUM_MAPPING] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.MISSING_PARAMETER] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.PERMISSION_DENIED] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.PRES_MODEL_PARSING_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.UNKNOWN_VERB_ID] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.VERSION_NOT_CONFIGURED] = api_external_contract_js_1.ErrorCodes.APINotInitialized,\n _o[api_internal_contract_js_1.ErrorCodes.VISIBILITY_ERROR] = api_external_contract_js_1.ErrorCodes.VisibilityError,\n _o), api_external_contract_js_1.ErrorCodes.InternalError);\n InternalToExternalEnumMappings.filterType = new EnumConverter_1.EnumConverter((_p = {},\n _p[api_internal_contract_js_1.FilterType.Categorical] = api_external_contract_js_1.FilterType.Categorical,\n _p[api_internal_contract_js_1.FilterType.Range] = api_external_contract_js_1.FilterType.Range,\n _p[api_internal_contract_js_1.FilterType.RelativeDate] = api_external_contract_js_1.FilterType.RelativeDate,\n _p[api_internal_contract_js_1.FilterType.Hierarchical] = api_external_contract_js_1.FilterType.Hierarchical,\n _p));\n InternalToExternalEnumMappings.classNameKey = new EnumConverter_1.EnumConverter((_q = {},\n _q[\"tableau-dashboard-title\" /* DashboardTitle */] = api_external_contract_js_1.ClassNameKey.DashboardTitle,\n _q[\"tableau-story-title\" /* StoryTitle */] = api_external_contract_js_1.ClassNameKey.StoryTitle,\n _q[\"tableau-tooltip\" /* Tooltip */] = api_external_contract_js_1.ClassNameKey.Tooltip,\n _q[\"tableau-worksheet\" /* Worksheet */] = api_external_contract_js_1.ClassNameKey.Worksheet,\n _q[\"tableau-worksheet-title\" /* WorksheetTitle */] = api_external_contract_js_1.ClassNameKey.WorksheetTitle,\n // Temporary until we fix 1317266 - Platform hasn't been updated currently because near branch is closed\n _q['dashboard-title'] = api_external_contract_js_1.ClassNameKey.DashboardTitle,\n _q['story-title'] = api_external_contract_js_1.ClassNameKey.StoryTitle,\n _q['tooltip'] = api_external_contract_js_1.ClassNameKey.Tooltip,\n _q['worksheet'] = api_external_contract_js_1.ClassNameKey.Worksheet,\n _q['worksheet-title'] = api_external_contract_js_1.ClassNameKey.WorksheetTitle,\n _q));\n InternalToExternalEnumMappings.hierarchicalLevelSelectionState = new EnumConverter_1.EnumConverter((_r = {},\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.AllSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.AllSelected,\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.NoneSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.NoneSelected,\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.SomeSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.SomeSelected,\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected,\n _r));\n InternalToExternalEnumMappings.annotationType = new EnumConverter_1.EnumConverter((_s = {},\n _s[api_internal_contract_js_1.AnnotateEnum.Area] = api_external_contract_js_1.AnnotationType.Area,\n _s[api_internal_contract_js_1.AnnotateEnum.Mark] = api_external_contract_js_1.AnnotationType.Mark,\n _s[api_internal_contract_js_1.AnnotateEnum.Point] = api_external_contract_js_1.AnnotationType.Point,\n _s));\n InternalToExternalEnumMappings.markType = new EnumConverter_1.EnumConverter((_t = {},\n _t[api_internal_contract_js_1.MarkType.Area] = api_external_contract_js_1.MarkType.Area,\n _t[api_internal_contract_js_1.MarkType.Bar] = api_external_contract_js_1.MarkType.Bar,\n _t[api_internal_contract_js_1.MarkType.Circle] = api_external_contract_js_1.MarkType.Circle,\n _t[api_internal_contract_js_1.MarkType.GanttBar] = api_external_contract_js_1.MarkType.GanttBar,\n _t[api_internal_contract_js_1.MarkType.Heatmap] = api_external_contract_js_1.MarkType.Heatmap,\n _t[api_internal_contract_js_1.MarkType.Line] = api_external_contract_js_1.MarkType.Line,\n _t[api_internal_contract_js_1.MarkType.Map] = api_external_contract_js_1.MarkType.Map,\n _t[api_internal_contract_js_1.MarkType.Pie] = api_external_contract_js_1.MarkType.Pie,\n _t[api_internal_contract_js_1.MarkType.Polygon] = api_external_contract_js_1.MarkType.Polygon,\n _t[api_internal_contract_js_1.MarkType.Shape] = api_external_contract_js_1.MarkType.Shape,\n _t[api_internal_contract_js_1.MarkType.Square] = api_external_contract_js_1.MarkType.Square,\n _t[api_internal_contract_js_1.MarkType.Text] = api_external_contract_js_1.MarkType.Text,\n _t[api_internal_contract_js_1.MarkType.VizExtension] = api_external_contract_js_1.MarkType.VizExtension,\n _t));\n return InternalToExternalEnumMappings;\n}());\nexports.InternalToExternalEnumMappings = InternalToExternalEnumMappings;\n/* tslint:enable:typedef */\n//# sourceMappingURL=InternalToExternalEnumMappings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"./TableauError\");\n/**\n * Class designed to register and unregister handlers from a user. Only those events\n * which are added via AddNewEventType will be supported by this instance\n */\nvar EventListenerManager = /** @class */ (function () {\n function EventListenerManager() {\n this._eventListenerManagers = {};\n }\n EventListenerManager.prototype.addEventListener = function (eventType, handler) {\n if (!this._eventListenerManagers.hasOwnProperty(eventType)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, \"Cannot add event, unsupported event type: \" + eventType);\n }\n return this._eventListenerManagers[eventType].addEventListener(handler);\n };\n EventListenerManager.prototype.removeEventListener = function (eventType, handler) {\n if (!this._eventListenerManagers.hasOwnProperty(eventType)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, \"Cannot remove event, unsupported event type: \" + eventType);\n }\n return this._eventListenerManagers[eventType].removeEventListener(handler);\n };\n EventListenerManager.prototype.addNewEventType = function (eventManager) {\n this._eventListenerManagers[eventManager.eventType] = eventManager;\n };\n return EventListenerManager;\n}());\nexports.EventListenerManager = EventListenerManager;\n//# sourceMappingURL=EventListenerManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ErrorHelpers_1 = require(\"./Utils/ErrorHelpers\");\nvar Field = /** @class */ (function () {\n function Field(_fieldImpl) {\n this._fieldImpl = _fieldImpl;\n }\n Object.defineProperty(Field.prototype, \"name\", {\n get: function () {\n return this._fieldImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"id\", {\n get: function () {\n return this._fieldImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"description\", {\n get: function () {\n return this._fieldImpl.description;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"dataType\", {\n get: function () {\n return this._fieldImpl.dataType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"aggregation\", {\n get: function () {\n return this._fieldImpl.aggregation;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"dataSource\", {\n get: function () {\n return this._fieldImpl.dataSource;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"role\", {\n get: function () {\n return this._fieldImpl.role;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isHidden\", {\n get: function () {\n return this._fieldImpl.isHidden;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isGenerated\", {\n get: function () {\n return this._fieldImpl.isGenerated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isCalculatedField\", {\n get: function () {\n return this._fieldImpl.isCalculatedField;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"columnType\", {\n get: function () {\n throw ErrorHelpers_1.ErrorHelpers.apiNotImplemented('Field.columnType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isCombinedField\", {\n get: function () {\n return this._fieldImpl.isCombinedField;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isPresentOnPublishedDatasource\", {\n get: function () {\n return this._fieldImpl.isPresentOnPublishedDatasource;\n },\n enumerable: true,\n configurable: true\n });\n return Field;\n}());\nexports.Field = Field;\n//# sourceMappingURL=Field.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ApiShared_1 = require(\"../../ApiShared\");\nvar CustomViewImpl = /** @class */ (function () {\n function CustomViewImpl(customViewModel, _registryId) {\n this._registryId = _registryId;\n this._luid = customViewModel.luid;\n this._name = customViewModel.name;\n this._shared = customViewModel.shared;\n this._isDefault = customViewModel.isDefault;\n this._ownerName = customViewModel.owner.userFriendlyName;\n this._url = customViewModel.url;\n }\n Object.defineProperty(CustomViewImpl.prototype, \"luid\", {\n get: function () {\n return this._luid;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n set: function (name) {\n this._name = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"shared\", {\n get: function () {\n return this._shared;\n },\n set: function (shared) {\n this._shared = shared;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"isDefault\", {\n get: function () {\n return this._isDefault;\n },\n set: function (isDefault) {\n this._isDefault = isDefault;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"ownerName\", {\n get: function () {\n return this._ownerName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"url\", {\n get: function () {\n return this._url;\n },\n enumerable: true,\n configurable: true\n });\n CustomViewImpl.prototype.saveAsync = function () {\n var service = ApiShared_1.ApiServiceRegistry.get(this._registryId).getService(\"viz-service\" /* Viz */);\n return service.saveAsync(this);\n };\n return CustomViewImpl;\n}());\nexports.CustomViewImpl = CustomViewImpl;\n//# sourceMappingURL=CustomViewImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../EnumMappings/InternalToExternalEnumMappings\");\nvar Point_1 = require(\"../Point\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar DashboardObjectImpl_1 = require(\"./DashboardObjectImpl\");\nvar SheetImpl_1 = require(\"./SheetImpl\");\nvar SheetInfoImpl_1 = require(\"./SheetInfoImpl\");\nvar WorksheetImpl_1 = require(\"./WorksheetImpl\");\nvar DashboardImpl = /** @class */ (function (_super) {\n __extends(DashboardImpl, _super);\n function DashboardImpl(_sheetInfo, _zones, _sheetPath, _registryId, _parentStoryPointImpl, _activeDashboardObjectId) {\n if (_activeDashboardObjectId === void 0) { _activeDashboardObjectId = 0; }\n var _this = _super.call(this, _sheetInfo, _registryId) || this;\n _this._zones = _zones;\n _this._sheetPath = _sheetPath;\n _this._parentStoryPointImpl = _parentStoryPointImpl;\n _this._activeDashboardObjectId = _activeDashboardObjectId;\n return _this;\n }\n Object.defineProperty(DashboardImpl.prototype, \"worksheetsImpl\", {\n get: function () {\n return this._worksheetsImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardImpl.prototype, \"objects\", {\n get: function () {\n return this._objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardImpl.prototype, \"parentStoryPoint\", {\n get: function () {\n return this._parentStoryPointImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardImpl.prototype, \"activeDashboardObjectId\", {\n get: function () {\n return this._activeDashboardObjectId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardImpl.prototype, \"activeDashboardName\", {\n get: function () {\n return this._sheetPath.sheetName;\n },\n enumerable: true,\n configurable: true\n });\n DashboardImpl.prototype.initializeWithPublicInterfaces = function () {\n this._worksheetsImpl = new Array();\n this._objects = new Array();\n this.zoneMap = new Map();\n // Process all the zones which are contained in this dashboard\n for (var _i = 0, _a = this._zones; _i < _a.length; _i++) {\n var zone = _a[_i];\n var worksheetImpl = undefined;\n var zoneSize = { width: zone.width, height: zone.height };\n // As the dashboard is active, all other zones in the dashboard are inactive.\n var isActive = false;\n if (zone.zoneType === api_internal_contract_js_1.DashboardObjectType.Worksheet) {\n var worksheetName = '';\n var worksheetUrl = '';\n var isHidden = false;\n if (zone.sheetInfo) {\n // zone.sheetInfo was not initialized prior to internal-contract 1.6.0\n worksheetName = zone.sheetInfo.name;\n // worksheetUrl & isHidden is for Embedding only\n worksheetUrl = zone.sheetInfo.url || '';\n // If there's a url, then it's not hidden\n isHidden = worksheetUrl === '';\n }\n else {\n worksheetName = zone.name;\n }\n // Indexes, isActive and some more properties in sheetInfoImpl are embedding specific.\n // But we init them for both extensions and embedding as the Models will only use what is relevant.\n var sheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(worksheetName, api_external_contract_js_1.SheetType.Worksheet, zoneSize, this._worksheetsImpl.length, isActive, isHidden, worksheetUrl);\n var vizId = {\n worksheet: worksheetName,\n dashboard: this._sheetInfoImpl.name,\n storyboard: this._sheetPath.storyboard,\n flipboardZoneID: this._sheetPath.flipboardZoneID,\n storyPointID: this._sheetPath.storyPointID,\n };\n worksheetImpl = new WorksheetImpl_1.WorksheetImpl(sheetInfoImpl, this._registryId, vizId, this, this._parentStoryPointImpl);\n this._worksheetsImpl.push(worksheetImpl);\n }\n var zonePoint = new Point_1.Point(zone.x, zone.y);\n var dashboardObjectImpl = new DashboardObjectImpl_1.DashboardObjectImpl(this, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dashboardObjectType.convert(zone.zoneType), zonePoint, zoneSize, worksheetImpl, zone.name, zone.isFloating !== undefined ? zone.isFloating : false, // before 1.6.0 we didn't have isFloating, so we assume false\n zone.isVisible !== undefined ? zone.isVisible : true, // before 1.6.0 we didn't have isVisible, so we assume true\n zone.zoneId);\n this._objects.push(dashboardObjectImpl);\n this.zoneMap.set(zone.zoneId, dashboardObjectImpl);\n }\n };\n DashboardImpl.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) {\n var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"zone-service\" /* Zone */);\n return zoneService.setVisibilityAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectVisibilityMap);\n };\n DashboardImpl.prototype.getDashboardObjectById = function (dashboardObjectId) {\n return this.zoneMap.get(dashboardObjectId);\n };\n DashboardImpl.prototype.updateZones = function (newZones, newActiveZoneId, newActiveDashboardName) {\n var _this = this;\n if (newActiveZoneId === void 0) { newActiveZoneId = 0; }\n if (newActiveDashboardName === void 0) { newActiveDashboardName = ''; }\n // getting previous dashboard objects, active zone ID and active dashboard name\n var oldDashboardObjects = this._objects;\n var oldZoneMap = this.zoneMap;\n var oldActiveZoneId = this._activeDashboardObjectId;\n var oldActiveDashboardName = this._sheetPath.sheetName;\n // updating zones and reinitializing instance variables\n this._zones = newZones;\n this._activeDashboardObjectId = newActiveZoneId;\n this._sheetPath.sheetName = newActiveDashboardName;\n this._sheetInfoImpl.name = newActiveDashboardName;\n this.initializeWithPublicInterfaces();\n // getting new dashboard objects\n var newDashboardObjects = this._objects;\n var newZoneMap = this.zoneMap;\n // initializing map for changes\n var zoneChanges = new Map();\n // comparing old dashboard objects with new ones\n oldDashboardObjects.forEach(function (oldObject) {\n var oldId = oldObject.id;\n // checking if zone was removed\n if (!newZoneMap.has(oldId)) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Removed);\n return;\n }\n var newObject = newZoneMap.get(oldId);\n if (oldObject.isFloating !== newObject.isFloating) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsFloatingChanged);\n }\n if (oldObject.isVisible !== newObject.isVisible) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsVisibleChanged);\n }\n if (oldObject.name !== newObject.name) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.NameChanged);\n }\n if (oldObject.position.x !== newObject.position.x || oldObject.position.y !== newObject.position.y) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.PositionChanged);\n }\n if (oldObject.size.width !== newObject.size.width || oldObject.size.height !== newObject.size.height) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.SizeChanged);\n }\n });\n // Checking for any added zones\n newDashboardObjects.forEach(function (newObject) {\n if (!oldZoneMap.has(newObject.id)) {\n _this.addChange(newObject.id, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Added);\n }\n });\n // Checking if zone selection has changed\n if (oldActiveZoneId !== newActiveZoneId) {\n if (newActiveZoneId !== 0) {\n this.addChange(newActiveZoneId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Selected);\n }\n if (oldActiveZoneId !== 0) {\n this.addChange(oldActiveZoneId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Deselected);\n }\n }\n // Checking if switched to another dashboard\n if (oldActiveDashboardName !== newActiveDashboardName) {\n this.addChange(0, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.DashboardChanged);\n }\n return zoneChanges;\n };\n DashboardImpl.prototype.addChange = function (zoneId, zoneChanges, change) {\n if (!zoneChanges.has(zoneId)) {\n zoneChanges.set(zoneId, []);\n }\n zoneChanges.get(zoneId).push(change);\n };\n DashboardImpl.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) {\n var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"zone-service\" /* Zone */);\n return zoneService.moveAndResizeAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectPositionAndSizeUpdateArray);\n };\n DashboardImpl.prototype.replayAnimationAsync = function (replaySpeed) {\n var animationService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"animation-service\" /* Animation */);\n return animationService.replayAsync(replaySpeed);\n };\n DashboardImpl.prototype.getFiltersAsync = function () {\n this.verifyActiveSheetOrEmbeddedInActiveStoryPoint();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getDashboardFiltersAsync();\n };\n DashboardImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'FilterUpdateType');\n ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName');\n if (!Array.isArray(values)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyDashboardFilterAsync must be an array');\n }\n this.verifyActiveSheetOrEmbeddedInActiveStoryPoint();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyDashboardFilterAsync(fieldName, values, updateType, options);\n };\n // @W-12986439: remove once initializeWithPublicInterfaces is moved to the constructor for this class\n // This method only exists since worksheetsImpl can be undefined, but we need the worksheet names in the Export APIs\n DashboardImpl.prototype.getWorksheetNamesFromZones = function () {\n var worksheetNames = [];\n for (var _i = 0, _a = this._zones; _i < _a.length; _i++) {\n var zone = _a[_i];\n if (zone.zoneType !== api_internal_contract_js_1.DashboardObjectType.Worksheet) {\n continue;\n }\n // zone.sheetInfo was not initialized prior to internal-contract 1.6.0\n var worksheetName = zone.sheetInfo ? zone.sheetInfo.name : zone.name;\n worksheetNames.push(worksheetName);\n }\n return worksheetNames;\n };\n DashboardImpl.prototype.verifyActiveSheetOrEmbeddedInActiveStoryPoint = function () {\n var isRootAndActiveDashboard = this.active;\n var isWithinActiveStoryPoint = this.parentStoryPoint != null && this.parentStoryPoint.active;\n if (!isRootAndActiveDashboard && !isWithinActiveStoryPoint) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet');\n }\n };\n return DashboardImpl;\n}(SheetImpl_1.SheetImpl));\nexports.DashboardImpl = DashboardImpl;\n//# sourceMappingURL=DashboardImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the dashboard objects - the zones in a dashboard.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar DashboardObjectImpl = /** @class */ (function () {\n function DashboardObjectImpl(_dashboardImpl, _type, _position, _size, _worksheetImpl, _name, _isFloating, _isVisible, _id) {\n this._dashboardImpl = _dashboardImpl;\n this._type = _type;\n this._position = _position;\n this._size = _size;\n this._worksheetImpl = _worksheetImpl;\n this._name = _name;\n this._isFloating = _isFloating;\n this._isVisible = _isVisible;\n this._id = _id;\n }\n Object.defineProperty(DashboardObjectImpl.prototype, \"dashboardImpl\", {\n get: function () {\n return this._dashboardImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"type\", {\n get: function () {\n return this._type;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"position\", {\n get: function () {\n return this._position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"worksheetImpl\", {\n get: function () {\n return this._worksheetImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"isFloating\", {\n get: function () {\n return this._isFloating;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"isVisible\", {\n get: function () {\n return this._isVisible;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"id\", {\n get: function () {\n return this._id;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardObjectImpl;\n}());\nexports.DashboardObjectImpl = DashboardObjectImpl;\n//# sourceMappingURL=DashboardObjectImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar ConnectionSummary_1 = require(\"../ConnectionSummary\");\nvar Field_1 = require(\"../Field\");\nvar LogicalTable_1 = require(\"../LogicalTable\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableSummary_1 = require(\"../TableSummary\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar FieldImpl_1 = require(\"./FieldImpl\");\nvar DataSourceImpl = /** @class */ (function () {\n function DataSourceImpl(_dataSourceInfo, _registryId) {\n var _this = this;\n this._dataSourceInfo = _dataSourceInfo;\n this._registryId = _registryId;\n this._fields = _dataSourceInfo.fields.map(function (fieldModel) {\n var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, _this);\n return new Field_1.Field(fieldImpl);\n });\n }\n Object.defineProperty(DataSourceImpl.prototype, \"name\", {\n get: function () {\n return this._dataSourceInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"id\", {\n get: function () {\n return this._dataSourceInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"extractUpdateTime\", {\n get: function () {\n return this._dataSourceInfo.extractUpdateTime;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"fields\", {\n get: function () {\n return this._fields;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"isExtract\", {\n get: function () {\n return this._dataSourceInfo.isExtract;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"isPublished\", {\n get: function () {\n return this._dataSourceInfo.isPublished;\n },\n enumerable: true,\n configurable: true\n });\n DataSourceImpl.prototype.publishedUrl = function () {\n return this._dataSourceInfo.publishedUrl;\n };\n DataSourceImpl.prototype.getMaxPageRowLimit = function () {\n return 10000;\n };\n DataSourceImpl.prototype.refreshAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.refreshAsync(this._dataSourceInfo.id);\n };\n DataSourceImpl.prototype.getConnectionSummariesAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.getConnectionSummariesAsync(this._dataSourceInfo.id).then(function (summaries) {\n return summaries.map(function (summary) { return new ConnectionSummary_1.ConnectionSummary(summary); });\n });\n };\n DataSourceImpl.prototype.getActiveTablesAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.getActiveTablesAsync(this._dataSourceInfo.id).then(function (tableInfos) {\n return tableInfos.map(function (tableInfo) { return new TableSummary_1.TableSummary(tableInfo); });\n });\n };\n DataSourceImpl.prototype.getUnderlyingDataAsync = function (options) {\n var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return getDataService.getDataSourceDataAsync(this.id, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults\n options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n DataSourceImpl.prototype.getLogicalTableDataAsync = function (logicalTableId, options) {\n var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return getDataService.getLogicalTableDataAsync(this.id, logicalTableId, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults\n options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n DataSourceImpl.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return getDataService.getLogicalTableDataReaderAsync(this.id, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n DataSourceImpl.prototype.initializeWithPublicInterfaces = function (dataSource) {\n ErrorHelpers_1.ErrorHelpers.verifyInternalValue(dataSource, 'dataSource');\n this._fields = this._dataSourceInfo.fields.map(function (fieldModel) {\n var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, dataSource);\n return new Field_1.Field(fieldImpl);\n });\n };\n DataSourceImpl.prototype.getLogicalTablesAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.getLogicalTablesAsync(this.id).then(function (logicalTableInfos) {\n return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); });\n });\n };\n return DataSourceImpl;\n}());\nexports.DataSourceImpl = DataSourceImpl;\n//# sourceMappingURL=DataSourceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../EnumMappings/InternalToExternalEnumMappings\");\nvar FieldImpl = /** @class */ (function () {\n function FieldImpl(_fieldInfo, _parentDataSource) {\n this._fieldInfo = _fieldInfo;\n this._parentDataSource = _parentDataSource;\n }\n Object.defineProperty(FieldImpl.prototype, \"name\", {\n get: function () {\n return this._fieldInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"id\", {\n get: function () {\n return this._fieldInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"description\", {\n get: function () {\n return this._fieldInfo.description;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"dataType\", {\n get: function () {\n var _a;\n return _a = this._fieldInfo.dataType, (_a !== null && _a !== void 0 ? _a : api_external_contract_js_1.DataType.Unknown);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"aggregation\", {\n get: function () {\n return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldAggregationType.convert(this._fieldInfo.aggregation);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"dataSource\", {\n get: function () {\n if (!this._parentDataSource)\n throw new Error(\"Data source information is not available for this field. Please use getFieldAsync method to get field's data source information\");\n return this._parentDataSource;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"role\", {\n get: function () {\n return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldRoleType.convert(this._fieldInfo.role);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isHidden\", {\n get: function () {\n return this._fieldInfo.isHidden;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isGenerated\", {\n get: function () {\n return this._fieldInfo.isGenerated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isCalculatedField\", {\n get: function () {\n return this._fieldInfo.isCalculatedField;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isCombinedField\", {\n get: function () {\n return this._fieldInfo.isCombinedField;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isPresentOnPublishedDatasource\", {\n get: function () {\n return this._fieldInfo.isPresentOnPublishedDatasource;\n },\n enumerable: true,\n configurable: true\n });\n return FieldImpl;\n}());\nexports.FieldImpl = FieldImpl;\n//# sourceMappingURL=FieldImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../EnumMappings/InternalToExternalEnumMappings\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar DataValueFactory_1 = require(\"../Utils/DataValueFactory\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar Param_1 = require(\"../Utils/Param\");\nvar ParameterImpl = /** @class */ (function () {\n function ParameterImpl(parameterInfo, _registryId) {\n this._registryId = _registryId;\n this.setParameterInfo(parameterInfo);\n }\n Object.defineProperty(ParameterImpl.prototype, \"name\", {\n get: function () {\n return this._parameterInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"currentValue\", {\n get: function () {\n return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(this._parameterInfo.currentValue, this._parameterInfo.dataType);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"dataType\", {\n get: function () {\n return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dataType.convert(this._parameterInfo.dataType);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"id\", {\n get: function () {\n return this._globalFieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"allowableValues\", {\n get: function () {\n return this._allowableValues;\n },\n enumerable: true,\n configurable: true\n });\n ParameterImpl.prototype.changeValueAsync = function (newValue) {\n var _this = this;\n ErrorHelpers_1.ErrorHelpers.verifyParameter(newValue, 'newValue');\n var coercedValue = Param_1.Param.serializeParameterValue(newValue);\n var parametersService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"parameters-service\" /* Parameters */);\n return parametersService.changeParameterValueAsync(this._globalFieldName, coercedValue).then(function (parameterInfo) {\n _this.setParameterInfo(parameterInfo);\n return _this.currentValue;\n });\n };\n ParameterImpl.prototype.setParameterInfo = function (parameterInfo) {\n this._parameterInfo = parameterInfo;\n this._globalFieldName = parameterInfo.fieldName;\n var type = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.allowableValues.convert(parameterInfo.allowableValuesType);\n var listValues;\n var minValue;\n var maxValue;\n var stepSize;\n var dateStepPeriod;\n if (type === api_external_contract_js_1.ParameterValueType.List) {\n var values = parameterInfo.allowableValues || [];\n listValues = values.map(function (val) { return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(val, parameterInfo.dataType); });\n }\n else if (type === api_external_contract_js_1.ParameterValueType.Range) {\n minValue = parameterInfo.minValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.minValue, parameterInfo.dataType);\n maxValue = parameterInfo.maxValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.maxValue, parameterInfo.dataType);\n stepSize = parameterInfo.stepSize;\n dateStepPeriod = parameterInfo.dateStepPeriod && InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(parameterInfo.dateStepPeriod);\n }\n this._allowableValues = {\n type: type,\n allowableValues: listValues,\n minValue: minValue,\n maxValue: maxValue,\n stepSize: stepSize,\n dateStepPeriod: dateStepPeriod,\n };\n };\n return ParameterImpl;\n}());\nexports.ParameterImpl = ParameterImpl;\n//# sourceMappingURL=ParameterImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar Param_1 = require(\"../Utils/Param\");\nvar SheetUtils_1 = require(\"../Utils/SheetUtils\");\nvar SheetImpl = /** @class */ (function () {\n function SheetImpl(_sheetInfoImpl, _registryId) {\n this._sheetInfoImpl = _sheetInfoImpl;\n this._registryId = _registryId;\n }\n Object.defineProperty(SheetImpl.prototype, \"name\", {\n get: function () {\n return this._sheetInfoImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"sheetType\", {\n get: function () {\n return this._sheetInfoImpl.sheetType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"sheetPath\", {\n get: function () {\n return this._sheetInfoImpl.sheetPath;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"size\", {\n get: function () {\n return this._sheetInfoImpl.sheetSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"hidden\", {\n get: function () {\n if (this._sheetInfoImpl.isHidden !== undefined) {\n return this._sheetInfoImpl.isHidden;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"isHidden not implemented\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"active\", {\n get: function () {\n if (this._sheetInfoImpl.isActive !== undefined) {\n return this._sheetInfoImpl.isActive;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"active not implemented\");\n },\n set: function (active) {\n if (this._sheetInfoImpl.isActive !== undefined) {\n this._sheetInfoImpl.active = active;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"index\", {\n get: function () {\n if (this._sheetInfoImpl.index !== undefined) {\n return this._sheetInfoImpl.index;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"index not implemented\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"url\", {\n get: function () {\n if (this._sheetInfoImpl.url !== undefined) {\n return this._sheetInfoImpl.url;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"url not implemented\");\n },\n enumerable: true,\n configurable: true\n });\n SheetImpl.prototype.getSheetSize = function () {\n if (!SheetUtils_1.SheetUtils.isValidSheetSize(this.size)) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InternalError, 'size is not of type SheetSize');\n }\n return this.size;\n };\n SheetImpl.prototype.findParameterAsync = function (parameterName) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(parameterName, 'parameterName');\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"parameters-service\" /* Parameters */);\n return service.findParameterByNameAsync(parameterName);\n };\n SheetImpl.prototype.getParametersAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"parameters-service\" /* Parameters */);\n return service.getParametersForSheetAsync(this.sheetPath);\n };\n SheetImpl.prototype.changeSizeAsync = function (newSize) {\n var _this = this;\n var invalidSizeError = new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter');\n if (!newSize || !newSize.behavior) {\n throw invalidSizeError;\n }\n var partialSheetSize = this.normalizeSheetSize(newSize);\n var isAutomatic = partialSheetSize.behavior === Contract.SheetSizeBehavior.Automatic;\n if (!isAutomatic && !partialSheetSize.minSize && !partialSheetSize.maxSize) {\n throw invalidSizeError;\n }\n if (!isAutomatic && this.sheetType === Contract.SheetType.Worksheet) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSizeBehaviorOnWorksheet, 'Only SheetSizeBehavior.Automatic is allowed on Worksheets');\n }\n if (isAutomatic && this.getSheetSize().behavior === partialSheetSize.behavior) {\n return Promise.resolve(newSize);\n }\n var processedNewSize = this.processNewSize(partialSheetSize);\n var sizeService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"size-service\" /* Size */);\n return sizeService.changeSizeAsync(this.name, processedNewSize).then(function () {\n var clientInfoService = ServiceRegistry_1.ApiServiceRegistry.get(_this._registryId).getService(\"client-info-service\" /* ClientInfo */);\n return clientInfoService.getClientInfoAsync().then(function (bootstrapInfo) {\n var sheet = bootstrapInfo.publishedSheets.find(function (s) { return s.name === _this.name; });\n if (!sheet) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, \"Can't find sheet with name \" + _this.name);\n }\n var sheetSize = SheetUtils_1.SheetUtils.getSheetSizeFromSizeConstraints(sheet.sizeConstraint);\n _this._sheetInfoImpl.sheetSize = sheetSize;\n return sheetSize;\n });\n });\n };\n SheetImpl.prototype.normalizeSheetSize = function (newSize) {\n var behavior = newSize.behavior;\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(behavior, Contract.SheetSizeBehavior, 'SheetSizeBehavior');\n var minSize = SheetImpl.parseDimensions(newSize.minSize);\n var maxSize = SheetImpl.parseDimensions(newSize.maxSize);\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n };\n SheetImpl.prototype.processNewSize = function (newSize) {\n var _a, _b, _c, _d;\n var behavior = newSize.behavior, minSizeMaybe = newSize.minSize, maxSizeMaybe = newSize.maxSize;\n var hasMinWidth = !Param_1.Param.isNullOrUndefined((_a = minSizeMaybe) === null || _a === void 0 ? void 0 : _a.width);\n var hasMinHeight = !Param_1.Param.isNullOrUndefined((_b = minSizeMaybe) === null || _b === void 0 ? void 0 : _b.height);\n var hasMaxWidth = !Param_1.Param.isNullOrUndefined((_c = maxSizeMaybe) === null || _c === void 0 ? void 0 : _c.width);\n var hasMaxHeight = !Param_1.Param.isNullOrUndefined((_d = maxSizeMaybe) === null || _d === void 0 ? void 0 : _d.height);\n var hasValidMinSize = hasMinWidth && hasMinHeight;\n var hasValidMaxSize = hasMaxWidth && hasMaxHeight;\n switch (behavior) {\n case Contract.SheetSizeBehavior.Automatic: {\n return { behavior: behavior };\n }\n case Contract.SheetSizeBehavior.AtMost: {\n if (!maxSizeMaybe || !hasValidMaxSize) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMaxSize, 'Missing maxSize for SheetSizeBehavior.AtMost');\n }\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n if (maxSize.width < 0 || maxSize.height < 0) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero');\n }\n return { behavior: behavior, maxSize: maxSize };\n }\n case Contract.SheetSizeBehavior.AtLeast: {\n if (!minSizeMaybe || !hasValidMinSize) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinSize, 'Missing minSize for SheetSizeBehavior.AtLeast');\n }\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n if (minSize.width < 0 || minSize.height < 0) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero');\n }\n return { behavior: behavior, minSize: minSize };\n }\n case Contract.SheetSizeBehavior.Range: {\n if (!minSizeMaybe || !maxSizeMaybe || !hasValidMinSize || !hasValidMaxSize) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinMaxSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range');\n }\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n if (minSize.width < 0 ||\n minSize.height < 0 ||\n maxSize.width < 0 ||\n maxSize.height < 0 ||\n minSize.width > maxSize.width ||\n minSize.height > maxSize.height) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range');\n }\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n }\n case Contract.SheetSizeBehavior.Exactly: {\n if (minSizeMaybe && maxSizeMaybe) {\n if (hasValidMinSize && hasValidMaxSize) {\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n if (minSize.width !== maxSize.width || minSize.height !== maxSize.height) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Conflicting size values for SheetSizeBehavior.Exactly');\n }\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n }\n if (hasValidMinSize) {\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n return { behavior: behavior, minSize: minSize, maxSize: minSize };\n }\n if (hasValidMaxSize) {\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n return { behavior: behavior, minSize: maxSize, maxSize: maxSize };\n }\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter');\n }\n default: {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, \"Unsupported sheet size behavior: \" + behavior);\n }\n }\n };\n SheetImpl.parseDimensions = function (size) {\n var empty = { width: undefined, height: undefined };\n if (!size) {\n return empty;\n }\n var _a = Param_1.Param.tryParseNumber(size.width), widthParsed = _a.success, parsedWidth = _a.parsed;\n var _b = Param_1.Param.tryParseNumber(size.height), heightParsed = _b.success, parsedHeight = _b.parsed;\n if (widthParsed && heightParsed) {\n return { width: parsedWidth, height: parsedHeight };\n }\n if (widthParsed) {\n return { width: parsedWidth };\n }\n if (heightParsed) {\n return { height: parsedHeight };\n }\n return empty;\n };\n return SheetImpl;\n}());\nexports.SheetImpl = SheetImpl;\n//# sourceMappingURL=SheetImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar SheetInfoImpl = /** @class */ (function () {\n function SheetInfoImpl(_name, _sheetType, _sheetSize, _index, _isActive, _isHidden, _url) {\n this._name = _name;\n this._sheetType = _sheetType;\n this._sheetSize = _sheetSize;\n this._index = _index;\n this._isActive = _isActive;\n this._isHidden = _isHidden;\n this._url = _url;\n }\n Object.defineProperty(SheetInfoImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n set: function (sheetName) {\n this._name = sheetName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"sheetSize\", {\n get: function () {\n return this._sheetSize;\n },\n set: function (value) {\n this._sheetSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"sheetType\", {\n get: function () {\n return this._sheetType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"sheetPath\", {\n get: function () {\n return {\n sheetName: this.name,\n isDashboard: this.sheetType === api_external_contract_js_1.SheetType.Dashboard,\n };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"index\", {\n get: function () {\n return this._index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"isActive\", {\n get: function () {\n return this._isActive;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"active\", {\n set: function (active) {\n this._isActive = active;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"isHidden\", {\n get: function () {\n return this._isHidden;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"url\", {\n get: function () {\n return this._url;\n },\n enumerable: true,\n configurable: true\n });\n return SheetInfoImpl;\n}());\nexports.SheetInfoImpl = SheetInfoImpl;\n//# sourceMappingURL=SheetInfoImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * This class implements the SingleEventManager interface for a single type of Tableau event\n *\n * @template TEventType The Tableau event type this class specializes\n */\nvar SingleEventManagerImpl = /** @class */ (function () {\n function SingleEventManagerImpl(eventType) {\n this._eventType = eventType;\n this._handlers = [];\n }\n Object.defineProperty(SingleEventManagerImpl.prototype, \"eventType\", {\n get: function () {\n return this._eventType;\n },\n enumerable: true,\n configurable: true\n });\n SingleEventManagerImpl.prototype.addEventListener = function (handler) {\n var _this = this;\n this._handlers.push(handler);\n return function () { return _this.removeEventListener(handler); };\n };\n SingleEventManagerImpl.prototype.removeEventListener = function (handler) {\n var beforeCount = this._handlers.length;\n this._handlers = this._handlers.filter(function (h) { return h !== handler; });\n return beforeCount > this._handlers.length;\n };\n SingleEventManagerImpl.prototype.triggerEvent = function (eventGenerator) {\n for (var _i = 0, _a = this._handlers; _i < _a.length; _i++) {\n var handler = _a[_i];\n try {\n var eventModel = eventGenerator();\n handler(eventModel);\n }\n catch (e) {\n // Since this handler could be outside our control, just catch anything it throws and continue on\n continue;\n }\n }\n };\n return SingleEventManagerImpl;\n}());\nexports.SingleEventManagerImpl = SingleEventManagerImpl;\n//# sourceMappingURL=SingleEventManagerImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar ShortLivedDeferred_1 = require(\"../Utils/ShortLivedDeferred\");\nvar SheetImpl_1 = require(\"./SheetImpl\");\nvar StoryPointImpl_1 = require(\"./StoryPointImpl\");\nvar StoryPointInfoImpl_1 = require(\"./StoryPointInfoImpl\");\nvar StoryImpl = /** @class */ (function (_super) {\n __extends(StoryImpl, _super);\n function StoryImpl(_sheetInfoImpl, storyModel, _publishedSheetInfos, _registryId) {\n var _this = _super.call(this, _sheetInfoImpl, _registryId) || this;\n _this._sheetInfoImpl = _sheetInfoImpl;\n _this._publishedSheetInfos = _publishedSheetInfos;\n _this._registryId = _registryId;\n _this._storyPointInfoImpls = [];\n _this._deferred = new ShortLivedDeferred_1.ShortLivedDeferred();\n _this.initializeStory(storyModel);\n return _this;\n }\n StoryImpl.prototype.initializeStory = function (storyModel) {\n var _this = this;\n storyModel.storyPoints.forEach(function (storyPointModel) {\n var isActive = storyPointModel.index === storyModel.activeStoryPointIndex;\n var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(storyPointModel.caption, storyPointModel.index, storyPointModel.storyPointId, isActive, storyPointModel.updated, _this);\n _this._storyPointInfoImpls.push(storyPointInfoImpl);\n if (isActive) {\n _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo);\n }\n });\n };\n StoryImpl.prototype.updateStoryInfo = function (index, storyPointModel) {\n if (!this._storyPointInfoImpls) {\n return;\n }\n var storyInfoImpl = this._storyPointInfoImpls[index];\n if (storyInfoImpl.storyPointId !== storyPointModel.storyPointId) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.StoryPointIdMismatch, \"We should not be updating a story point when the IDs don't match. Existing storyPointID=\" + storyInfoImpl.storyPointId + \", newStoryPointID=\" + storyPointModel.storyPointId);\n }\n storyInfoImpl.caption = storyPointModel.caption;\n storyInfoImpl.updated = storyPointModel.updated;\n if (this._activeStoryPointImpl.storyPointId === storyPointModel.storyPointId) {\n this._activeStoryPointImpl.updated = storyInfoImpl.updated;\n }\n };\n StoryImpl.prototype.updateStory = function (storyPointModel) {\n var _this = this;\n if (!this._storyPointInfoImpls) {\n return;\n }\n this._storyPointInfoImpls.forEach(function (storyPointInfoImpl) {\n var isActive = storyPointInfoImpl.storyPointId === storyPointModel.storyPointId;\n if (isActive) {\n // update the state\n storyPointInfoImpl.caption = storyPointModel.caption;\n storyPointInfoImpl.index = storyPointModel.index;\n storyPointInfoImpl.active = true;\n storyPointInfoImpl.updated = storyPointModel.updated;\n // re-initialize activeStoryPointImpl\n _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo);\n }\n else {\n // set old ones to false\n storyPointInfoImpl.active = false;\n }\n });\n if (this.activeStoryPoint) {\n this._deferred.resolve(this.activeStoryPoint);\n }\n };\n Object.defineProperty(StoryImpl.prototype, \"activeStoryPoint\", {\n get: function () {\n return this._activeStoryPointImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryImpl.prototype, \"storyPointsInfo\", {\n get: function () {\n return this._storyPointInfoImpls;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryImpl.prototype, \"isActive\", {\n get: function () {\n return this._sheetInfoImpl.active;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryImpl.prototype, \"isHidden\", {\n get: function () {\n return !!this._sheetInfoImpl.isHidden;\n },\n enumerable: true,\n configurable: true\n });\n StoryImpl.prototype.activateNextStoryPointAsync = function () {\n if (this._activeStoryPointImpl.index === this._storyPointInfoImpls.length - 1) {\n return Promise.resolve(this._activeStoryPointImpl);\n }\n var promise = this._deferred.getNewPromiseOrThrowIfBusy();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n service.activateNextStoryPointAsync();\n return promise;\n };\n StoryImpl.prototype.activatePreviousStoryPointAsync = function () {\n if (this._activeStoryPointImpl.index === 0) {\n return Promise.resolve(this._activeStoryPointImpl);\n }\n var promise = this._deferred.getNewPromiseOrThrowIfBusy();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n service.activatePreviousStoryPointAsync();\n return promise;\n };\n StoryImpl.prototype.activateStoryPointAsync = function (index) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index');\n ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index');\n if (index < 0 || index >= this._storyPointInfoImpls.length) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.');\n }\n if (index === this._activeStoryPointImpl.index) {\n return Promise.resolve(this._activeStoryPointImpl);\n }\n var promise = this._deferred.getNewPromiseOrThrowIfBusy();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n service.activateStoryPointAsync(index);\n return promise;\n };\n StoryImpl.prototype.revertStoryPointAsync = function (index) {\n var _this = this;\n ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index');\n ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index');\n if (index < 0 || index >= this._storyPointInfoImpls.length) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.');\n }\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n return service.revertStoryPointAsync(index).then(function (response) {\n _this.updateStoryInfo(response.index, response);\n var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(response.caption, response.index, response.storyPointId, false, response.updated, _this);\n return storyPointInfoImpl;\n });\n };\n StoryImpl.prototype.clearPendingPromises = function () {\n if (this._deferred) {\n this._deferred.reject('All pending promises cleared');\n }\n };\n return StoryImpl;\n}(SheetImpl_1.SheetImpl));\nexports.StoryImpl = StoryImpl;\n//# sourceMappingURL=StoryImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar SheetUtils_1 = require(\"../Utils/SheetUtils\");\nvar DashboardImpl_1 = require(\"./DashboardImpl\");\nvar SheetInfoImpl_1 = require(\"./SheetInfoImpl\");\nvar WorksheetImpl_1 = require(\"./WorksheetImpl\");\nvar StoryPointImpl = /** @class */ (function () {\n function StoryPointImpl(_storyPointInfoImpl, sheetInfos, registryId, containedSheetInfo) {\n this._storyPointInfoImpl = _storyPointInfoImpl;\n if (containedSheetInfo) {\n this._containedSheetImpl = this.createContainedSheet(containedSheetInfo, sheetInfos, registryId);\n }\n }\n Object.defineProperty(StoryPointImpl.prototype, \"index\", {\n get: function () {\n return this._storyPointInfoImpl.index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"caption\", {\n get: function () {\n return this._storyPointInfoImpl.caption;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"active\", {\n get: function () {\n return this._storyPointInfoImpl.active;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"updated\", {\n get: function () {\n return this._storyPointInfoImpl.updated;\n },\n set: function (updated) {\n this._storyPointInfoImpl.updated = updated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"parentStory\", {\n get: function () {\n return this._storyPointInfoImpl.parentStory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"containedSheet\", {\n get: function () {\n return this._containedSheetImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"storyPointId\", {\n get: function () {\n return this._storyPointInfoImpl.storyPointId;\n },\n enumerable: true,\n configurable: true\n });\n StoryPointImpl.prototype.createContainedSheet = function (containedSheetInfo, sheetInfos, registryId) {\n var containedSheetIdx = -1;\n var publishedSheetInfo = SheetUtils_1.SheetUtils.getPublishedSheetInfoByName(containedSheetInfo.name, sheetInfos);\n var containedSheetSize = SheetUtils_1.SheetUtils.createAutomaticSize();\n var isContainedSheetHidden = publishedSheetInfo === undefined;\n var containedSheetUrl = publishedSheetInfo ? publishedSheetInfo.url : '';\n // Contained sheets aren't active - the containing sheet is active.\n var containedSheetActive = false;\n var containedSheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(containedSheetInfo.name, SheetUtils_1.SheetUtils.getSheetTypeEnum(containedSheetInfo.sheetType), containedSheetSize, containedSheetIdx, containedSheetActive, isContainedSheetHidden, containedSheetUrl);\n var sheetImpl;\n switch (containedSheetInfoImpl.sheetType) {\n case Contract.SheetType.Worksheet: {\n var vizId = {\n worksheet: containedSheetInfoImpl.name,\n };\n sheetImpl = new WorksheetImpl_1.WorksheetImpl(containedSheetInfoImpl, registryId, vizId, null, this);\n break;\n }\n case Contract.SheetType.Dashboard: {\n var sheetPath = {\n sheetName: containedSheetInfoImpl.name,\n isDashboard: true,\n };\n sheetImpl = new DashboardImpl_1.DashboardImpl(containedSheetInfoImpl, containedSheetInfo.dashboardZones, sheetPath, registryId, this);\n break;\n }\n default: {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType');\n }\n }\n return sheetImpl;\n };\n return StoryPointImpl;\n}());\nexports.StoryPointImpl = StoryPointImpl;\n//# sourceMappingURL=StoryPointImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar StoryPointInfoImpl = /** @class */ (function () {\n function StoryPointInfoImpl(_caption, _index, _storyPointId, _active, _updated, _parentStoryImpl) {\n this._caption = _caption;\n this._index = _index;\n this._storyPointId = _storyPointId;\n this._active = _active;\n this._updated = _updated;\n this._parentStoryImpl = _parentStoryImpl;\n }\n Object.defineProperty(StoryPointInfoImpl.prototype, \"caption\", {\n get: function () {\n return this._caption;\n },\n set: function (caption) {\n this._caption = caption;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"index\", {\n get: function () {\n return this._index;\n },\n set: function (index) {\n this._index = index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"storyPointId\", {\n get: function () {\n return this._storyPointId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"active\", {\n get: function () {\n return this._active;\n },\n set: function (isActive) {\n this._active = isActive;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"updated\", {\n get: function () {\n return this._updated;\n },\n set: function (isUpdated) {\n this._updated = isUpdated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"parentStory\", {\n get: function () {\n return this._parentStoryImpl;\n },\n enumerable: true,\n configurable: true\n });\n return StoryPointInfoImpl;\n}());\nexports.StoryPointInfoImpl = StoryPointInfoImpl;\n//# sourceMappingURL=StoryPointInfoImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar WorkbookImpl = /** @class */ (function () {\n function WorkbookImpl() {\n }\n return WorkbookImpl;\n}());\nexports.WorkbookImpl = WorkbookImpl;\n//# sourceMappingURL=WorkbookImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar DataSource_1 = require(\"../DataSource\");\nvar LogicalTable_1 = require(\"../LogicalTable\");\nvar GetDataService_1 = require(\"../Services/GetDataService\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar DataSourceImpl_1 = require(\"./DataSourceImpl\");\nvar SheetImpl_1 = require(\"./SheetImpl\");\nvar WorksheetImpl = /** @class */ (function (_super) {\n __extends(WorksheetImpl, _super);\n function WorksheetImpl(sheetInfoImpl, _registryId, _visualId, _parentDashboardImpl, _parentStoryPointImpl) {\n var _this = _super.call(this, sheetInfoImpl, _registryId) || this;\n _this._visualId = _visualId;\n _this._parentDashboardImpl = _parentDashboardImpl;\n _this._parentStoryPointImpl = _parentStoryPointImpl;\n return _this;\n }\n Object.defineProperty(WorksheetImpl.prototype, \"parentDashboard\", {\n get: function () {\n return this._parentDashboardImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WorksheetImpl.prototype, \"parentStoryPoint\", {\n get: function () {\n return this._parentStoryPointImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WorksheetImpl.prototype, \"visualId\", {\n get: function () {\n return this._visualId;\n },\n enumerable: true,\n configurable: true\n });\n WorksheetImpl.prototype.getMaxPageRowLimit = function () {\n return 10000;\n };\n WorksheetImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyFilterAsync(this.visualId, fieldName, values, updateType, options);\n };\n WorksheetImpl.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyParameter(filterOptions, 'filterOptions');\n if (filterOptions.nullOption) {\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(filterOptions.nullOption, api_external_contract_js_1.FilterNullOption, 'FilterNullOption');\n }\n else {\n ErrorHelpers_1.ErrorHelpers.verifyRangeParamType(filterOptions.min, filterOptions.max);\n }\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyRangeFilterAsync(this.visualId, fieldName, filterOptions);\n };\n WorksheetImpl.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyParameter(values, 'values');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType');\n if (!Array.isArray(values) && !values.levels) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyHierarchicalFilterAsync must be an array or contain a levels key');\n }\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyHierarchicalFilterAsync(this.visualId, fieldName, values, updateType, options);\n };\n WorksheetImpl.prototype.clearFilterAsync = function (fieldName) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.clearFilterAsync(this.visualId, fieldName);\n };\n WorksheetImpl.prototype.applyRelativeDateFilterAsync = function (fieldName, options) {\n ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyParameter(options, 'options');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.periodType, api_external_contract_js_1.PeriodType, 'PeriodType');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.rangeType, api_external_contract_js_1.DateRangeType, 'DateRangeType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyRelativeDateFilterAsync(this.visualId, fieldName, options);\n };\n WorksheetImpl.prototype.getDataSourcesAsync = function () {\n var _this = this;\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getDataSourcesAsync(this.visualId).then(function (result) {\n var dataSchema = result;\n var worksheetDataSourceInfo = dataSchema.worksheetDataSchemaMap[_this.name];\n var dataSources = [];\n // First, add the primary datasource. By convention, it comes first in the returned array.\n var primaryId = worksheetDataSourceInfo.primaryDataSource;\n dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[primaryId]));\n // Then, loop through any secondary data sources and add them.\n for (var _i = 0, _a = worksheetDataSourceInfo.referencedDataSourceList; _i < _a.length; _i++) {\n var secondaryId = _a[_i];\n if (secondaryId !== primaryId) {\n dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[secondaryId]));\n }\n }\n return dataSources;\n });\n };\n WorksheetImpl.prototype.getFiltersAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getFiltersAsync(this.visualId);\n };\n WorksheetImpl.prototype.getSelectedMarksAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getSelectedMarksAsync(this.visualId);\n };\n WorksheetImpl.prototype.getHighlightedMarksAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getHighlightedMarksAsync(this.visualId);\n };\n WorksheetImpl.prototype.getSummaryDataAsync = function (options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Summary, !!options.ignoreAliases, !!options.ignoreSelection, true, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getSummaryDataReaderAsync(this.visualId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, true, // includeAllColumns (can be overridden by columnsToIncludeById)\n options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getVisualSpecificationAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"visual-model-service\" /* VisualModel */);\n return service.getVisualSpecificationAsync(this.visualId);\n };\n WorksheetImpl.prototype.getSummaryColumnsInfoAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getSummaryColumnsInfoAsync(this.visualId);\n };\n WorksheetImpl.prototype.getUnderlyingDataAsync = function (options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Underlying, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getUnderlyingTablesAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getUnderlyingTablesAsync(this.visualId).then(function (logicalTableInfos) {\n return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); });\n });\n };\n WorksheetImpl.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingTableDataAsync(this.visualId, logicalTableId, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingTableDataReaderAsync(this.visualId, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.clearSelectedMarksAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.clearSelectedMarksAsync(this.visualId);\n };\n WorksheetImpl.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.selectMarksByValueAsync(this.visualId, selections, selectionUpdateType);\n };\n WorksheetImpl.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.selectMarksByIdAsync(this.visualId, selections, selectionUpdateType);\n };\n WorksheetImpl.prototype.annotateMarkAsync = function (mark, annotationText) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(mark, 'mark');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"annotation-service\" /* Annotation */);\n return service.annotateMarkAsync(this.visualId, mark, annotationText);\n };\n WorksheetImpl.prototype.getAnnotationsAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"annotation-service\" /* Annotation */);\n return service.getAnnotationsAsync(this.visualId);\n };\n WorksheetImpl.prototype.removeAnnotationAsync = function (annotation) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(annotation, 'annotation');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"annotation-service\" /* Annotation */);\n return service.removeAnnotationAsync(this.visualId, annotation);\n };\n WorksheetImpl.prototype.appendContextMenuAsync = function (targetMenu, config) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.appendContextMenuAsync(this.visualId.worksheet, targetMenu, config);\n };\n WorksheetImpl.prototype.removeContextMenuAsync = function (targetMenu, menuItemId) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.removeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId);\n };\n WorksheetImpl.prototype.executeContextMenuAsync = function (targetMenu, menuItemId) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.executeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId);\n };\n WorksheetImpl.prototype.renameContextMenuAsync = function (targetMenu, menuHeader, menuDescription) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.renameContextMenuAsync(this.visualId.worksheet, targetMenu, menuHeader, menuDescription);\n };\n WorksheetImpl.prototype.hoverTupleAsync = function (hoveredTuple, tooltip) {\n if (this.isInsideDashboardExtension()) {\n return Promise.reject(new TableauError_1.TableauError(Contract.SharedErrorCodes.ImplementationError, \"hoverTupleAsync is not supported in dashboard extensions\"));\n }\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.hoverTupleAsync(this.visualId, hoveredTuple, tooltip);\n };\n WorksheetImpl.prototype.selectTuplesAsync = function (selectedTuples, selectOption, tooltip) {\n if (this.isInsideDashboardExtension()) {\n return Promise.reject(new TableauError_1.TableauError(Contract.SharedErrorCodes.ImplementationError, \"selectTuplesAsync is not supported in dashboard extensions\"));\n }\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.selectTuplesAsync(this.visualId, selectedTuples, selectOption, tooltip);\n };\n WorksheetImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) {\n var dataSourceImpl = new DataSourceImpl_1.DataSourceImpl(dataSourceInfo, this._registryId);\n var dataSource = new DataSource_1.DataSource(dataSourceImpl);\n dataSourceImpl.initializeWithPublicInterfaces(dataSource);\n return dataSource;\n };\n WorksheetImpl.prototype.verifyActiveSheet = function () {\n var isRootAndActiveWorksheet = this.active;\n var isInsideActiveDashboard = this.isInsideActiveDashboard();\n var isInsideActiveStoryPoint = this.isInsideActiveStoryPoint();\n if (!isRootAndActiveWorksheet && !isInsideActiveDashboard && !isInsideActiveStoryPoint) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet');\n }\n };\n WorksheetImpl.prototype.isInsideActiveStoryPoint = function () {\n return this._parentStoryPointImpl && this._parentStoryPointImpl.active;\n };\n WorksheetImpl.prototype.isInsideActiveDashboard = function () {\n return this._parentDashboardImpl && this._parentDashboardImpl.active;\n };\n WorksheetImpl.prototype.isInsideDashboardExtension = function () {\n return this._parentDashboardImpl !== null;\n };\n return WorksheetImpl;\n}(SheetImpl_1.SheetImpl));\nexports.WorksheetImpl = WorksheetImpl;\n//# sourceMappingURL=WorksheetImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of a logical table.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar LogicalTable = /** @class */ (function () {\n function LogicalTable(_logicalTable) {\n this._logicalTable = _logicalTable;\n }\n Object.defineProperty(LogicalTable.prototype, \"id\", {\n get: function () {\n return this._logicalTable.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LogicalTable.prototype, \"caption\", {\n get: function () {\n return this._logicalTable.caption;\n },\n enumerable: true,\n configurable: true\n });\n return LogicalTable;\n}());\nexports.LogicalTable = LogicalTable;\n//# sourceMappingURL=LogicalTable.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar Filter = /** @class */ (function () {\n function Filter(_worksheetName, _fieldName, _filterType, _fieldId, _registryId) {\n this._worksheetName = _worksheetName;\n this._fieldName = _fieldName;\n this._filterType = _filterType;\n this._fieldId = _fieldId;\n this._registryId = _registryId;\n }\n Object.defineProperty(Filter.prototype, \"worksheetName\", {\n get: function () {\n return this._worksheetName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"fieldName\", {\n get: function () {\n return this._fieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"fieldId\", {\n get: function () {\n return this._fieldId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"filterType\", {\n get: function () {\n return this._filterType;\n },\n enumerable: true,\n configurable: true\n });\n Filter.prototype.getFieldAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getFieldAsync(this._fieldId);\n };\n Filter.prototype.getAppliedWorksheetsAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getAppliedWorksheetsAsync(this._worksheetName, this._fieldId);\n };\n Filter.prototype.setAppliedWorksheetsAsync = function (applyToWorksheets) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(applyToWorksheets, 'applyToWorksheets');\n var uniqueWorksheets = new Set(applyToWorksheets);\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.setAppliedWorksheetsAsync(this._worksheetName, this._fieldName, this._fieldId, Array.from(uniqueWorksheets));\n };\n return Filter;\n}());\nexports.Filter = Filter;\nvar CategoricalFilter = /** @class */ (function (_super) {\n __extends(CategoricalFilter, _super);\n function CategoricalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _appliedValues, _isExcludeMode, _isAllSelected) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._appliedValues = _appliedValues;\n _this._isExcludeMode = _isExcludeMode;\n _this._isAllSelected = _isAllSelected;\n return _this;\n }\n Object.defineProperty(CategoricalFilter.prototype, \"isAllSelected\", {\n get: function () {\n return this._isAllSelected;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CategoricalFilter.prototype, \"appliedValues\", {\n get: function () {\n return this._appliedValues;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CategoricalFilter.prototype, \"isExcludeMode\", {\n get: function () {\n return this._isExcludeMode;\n },\n enumerable: true,\n configurable: true\n });\n CategoricalFilter.prototype.getDomainAsync = function (domainType) {\n if (!domainType) {\n domainType = api_external_contract_js_1.FilterDomainType.Relevant;\n }\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType');\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getCategoricalDomainAsync(this._worksheetName, this._fieldId, domainType);\n };\n return CategoricalFilter;\n}(Filter));\nexports.CategoricalFilter = CategoricalFilter;\nvar HierarchicalDataValue = /** @class */ (function () {\n function HierarchicalDataValue(_value, _hierarchicalPath, _level) {\n this._value = _value;\n this._hierarchicalPath = _hierarchicalPath;\n this._level = _level;\n }\n Object.defineProperty(HierarchicalDataValue.prototype, \"value\", {\n get: function () {\n return this._value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalDataValue.prototype, \"hierarchicalPath\", {\n get: function () {\n return this._hierarchicalPath;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalDataValue.prototype, \"level\", {\n get: function () {\n return this._level;\n },\n enumerable: true,\n configurable: true\n });\n return HierarchicalDataValue;\n}());\nexports.HierarchicalDataValue = HierarchicalDataValue;\nvar HierarchicalLevelDetail = /** @class */ (function () {\n function HierarchicalLevelDetail(_name, _levelSelectionState) {\n this._name = _name;\n this._levelSelectionState = _levelSelectionState;\n }\n Object.defineProperty(HierarchicalLevelDetail.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalLevelDetail.prototype, \"levelSelectionState\", {\n get: function () {\n return this._levelSelectionState;\n },\n enumerable: true,\n configurable: true\n });\n return HierarchicalLevelDetail;\n}());\nexports.HierarchicalLevelDetail = HierarchicalLevelDetail;\nvar HierarchicalFilter = /** @class */ (function (_super) {\n __extends(HierarchicalFilter, _super);\n function HierarchicalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _dimensionName, _hierarchyCaption, _numberOfLevels, _levelDetails, _appliedValues, _isAllSelected) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._dimensionName = _dimensionName;\n _this._hierarchyCaption = _hierarchyCaption;\n _this._numberOfLevels = _numberOfLevels;\n _this._levelDetails = _levelDetails;\n _this._appliedValues = _appliedValues;\n _this._isAllSelected = _isAllSelected;\n return _this;\n }\n HierarchicalFilter.prototype.getDomainAsync = function (domainType) {\n throw new Error('Method not implemented.');\n };\n Object.defineProperty(HierarchicalFilter.prototype, \"dimensionName\", {\n get: function () {\n return this._dimensionName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"hierarchyCaption\", {\n get: function () {\n return this._hierarchyCaption;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"numberOfLevels\", {\n get: function () {\n return this._numberOfLevels;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"levelDetails\", {\n get: function () {\n return this._levelDetails;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"isAllSelected\", {\n get: function () {\n return this._isAllSelected;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"appliedValues\", {\n get: function () {\n return this._appliedValues;\n },\n enumerable: true,\n configurable: true\n });\n return HierarchicalFilter;\n}(Filter));\nexports.HierarchicalFilter = HierarchicalFilter;\nvar RangeFilter = /** @class */ (function (_super) {\n __extends(RangeFilter, _super);\n function RangeFilter(worksheetName, fieldName, fieldId, filterType, registryId, _min, _max, _includeNullValues) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._min = _min;\n _this._max = _max;\n _this._includeNullValues = _includeNullValues;\n return _this;\n }\n Object.defineProperty(RangeFilter.prototype, \"minValue\", {\n get: function () {\n return this._min;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeFilter.prototype, \"maxValue\", {\n get: function () {\n return this._max;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeFilter.prototype, \"includeNullValues\", {\n get: function () {\n return this._includeNullValues;\n },\n enumerable: true,\n configurable: true\n });\n RangeFilter.prototype.getDomainAsync = function (domainType) {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n if (!domainType) {\n domainType = api_external_contract_js_1.FilterDomainType.Relevant;\n }\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType');\n return service.getRangeDomainAsync(this._worksheetName, this._fieldId, domainType);\n };\n return RangeFilter;\n}(Filter));\nexports.RangeFilter = RangeFilter;\nvar RelativeDateFilter = /** @class */ (function (_super) {\n __extends(RelativeDateFilter, _super);\n function RelativeDateFilter(worksheetName, fieldName, fieldId, filterType, registryId, _anchorDate, _periodType, _rangeType, _rangeN) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._anchorDate = _anchorDate;\n _this._periodType = _periodType;\n _this._rangeType = _rangeType;\n _this._rangeN = _rangeN;\n return _this;\n }\n Object.defineProperty(RelativeDateFilter.prototype, \"anchorDate\", {\n get: function () {\n return this._anchorDate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RelativeDateFilter.prototype, \"periodType\", {\n get: function () {\n return this._periodType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RelativeDateFilter.prototype, \"rangeType\", {\n get: function () {\n return this._rangeType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RelativeDateFilter.prototype, \"rangeN\", {\n get: function () {\n return this._rangeN;\n },\n enumerable: true,\n configurable: true\n });\n return RelativeDateFilter;\n}(Filter));\nexports.RelativeDateFilter = RelativeDateFilter;\nvar CategoricalDomain = /** @class */ (function () {\n function CategoricalDomain(_values, _domainType) {\n this._values = _values;\n this._domainType = _domainType;\n }\n Object.defineProperty(CategoricalDomain.prototype, \"values\", {\n get: function () {\n return this._values;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CategoricalDomain.prototype, \"type\", {\n get: function () {\n return this._domainType;\n },\n enumerable: true,\n configurable: true\n });\n return CategoricalDomain;\n}());\nexports.CategoricalDomain = CategoricalDomain;\nvar RangeDomain = /** @class */ (function () {\n function RangeDomain(_min, _max, _domainType) {\n this._min = _min;\n this._max = _max;\n this._domainType = _domainType;\n }\n Object.defineProperty(RangeDomain.prototype, \"type\", {\n get: function () {\n return this._domainType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeDomain.prototype, \"min\", {\n get: function () {\n return this._min;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeDomain.prototype, \"max\", {\n get: function () {\n return this._max;\n },\n enumerable: true,\n configurable: true\n });\n return RangeDomain;\n}());\nexports.RangeDomain = RangeDomain;\n//# sourceMappingURL=FilterModels.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DataTable = /** @class */ (function () {\n function DataTable(_data, _columns, _totalRowCount, _isTotalRowCountLimited, _isSummaryData, _marksInfo) {\n this._data = _data;\n this._columns = _columns;\n this._totalRowCount = _totalRowCount;\n this._isTotalRowCountLimited = _isTotalRowCountLimited;\n this._isSummaryData = _isSummaryData;\n this._marksInfo = _marksInfo;\n this._name = _isSummaryData ? 'Summary Data Table' : 'Underlying Data Table';\n }\n Object.defineProperty(DataTable.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"data\", {\n get: function () {\n return this._data;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"columns\", {\n get: function () {\n return this._columns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"marksInfo\", {\n get: function () {\n return this._marksInfo;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"totalRowCount\", {\n get: function () {\n return this._totalRowCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"isTotalRowCountLimited\", {\n get: function () {\n return this._isTotalRowCountLimited;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"isSummaryData\", {\n get: function () {\n return this._isSummaryData;\n },\n enumerable: true,\n configurable: true\n });\n return DataTable;\n}());\nexports.DataTable = DataTable;\nvar MarkInfo = /** @class */ (function () {\n function MarkInfo(_type, _color, _tupleId) {\n this._type = _type;\n this._color = _color;\n this._tupleId = _tupleId;\n }\n Object.defineProperty(MarkInfo.prototype, \"type\", {\n get: function () {\n return this._type;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkInfo.prototype, \"color\", {\n get: function () {\n return this._color;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkInfo.prototype, \"tupleId\", {\n get: function () {\n return this._tupleId;\n },\n enumerable: true,\n configurable: true\n });\n return MarkInfo;\n}());\nexports.MarkInfo = MarkInfo;\nvar Column = /** @class */ (function () {\n function Column(_fieldName, _fieldId, _dataType, _isReferenced, _index) {\n this._fieldName = _fieldName;\n this._fieldId = _fieldId;\n this._dataType = _dataType;\n this._isReferenced = _isReferenced;\n this._index = _index;\n }\n Object.defineProperty(Column.prototype, \"fieldName\", {\n get: function () {\n return this._fieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"fieldId\", {\n get: function () {\n return this._fieldId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"dataType\", {\n get: function () {\n return this._dataType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"isReferenced\", {\n get: function () {\n return this._isReferenced;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"index\", {\n get: function () {\n return this._index;\n },\n enumerable: true,\n configurable: true\n });\n return Column;\n}());\nexports.Column = Column;\nvar DataValue = /** @class */ (function () {\n /* tslint:disable:no-any */\n function DataValue(_value, _nativeValue, _formattedValue) {\n this._value = _value;\n this._nativeValue = _nativeValue;\n this._formattedValue = _formattedValue;\n }\n Object.defineProperty(DataValue.prototype, \"value\", {\n get: function () {\n return this._value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataValue.prototype, \"nativeValue\", {\n get: function () {\n return this._nativeValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataValue.prototype, \"formattedValue\", {\n get: function () {\n return this._formattedValue;\n },\n enumerable: true,\n configurable: true\n });\n return DataValue;\n}());\nexports.DataValue = DataValue;\n//# sourceMappingURL=GetDataModels.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar DataTableReader = /** @class */ (function () {\n function DataTableReader(_id, _totalRowCount, _pageRowCount, _registryId) {\n this._id = _id;\n this._totalRowCount = _totalRowCount;\n this._pageRowCount = _pageRowCount;\n this._registryId = _registryId;\n this._pageCount = Math.ceil(_totalRowCount / _pageRowCount);\n }\n Object.defineProperty(DataTableReader.prototype, \"totalRowCount\", {\n get: function () {\n return this._totalRowCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTableReader.prototype, \"pageCount\", {\n get: function () {\n return this._pageCount;\n },\n enumerable: true,\n configurable: true\n });\n DataTableReader.prototype.getPageAsync = function (pageNumber) {\n ErrorHelpers_1.ErrorHelpers.verifyRange(pageNumber, 0, this._pageCount);\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getPageAsync(this._id, pageNumber, this._pageRowCount);\n };\n DataTableReader.prototype.getAllPagesAsync = function (maxRows) {\n return __awaiter(this, void 0, void 0, function () {\n var firstPage, rowsRequested, pagesRequested, pagesToFetch, isDataLimited, remainingData, i, page, fullData;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.getPageAsync(0)];\n case 1:\n firstPage = _b.sent();\n maxRows = maxRows || this.totalRowCount;\n rowsRequested = Math.min(maxRows, this.totalRowCount);\n pagesRequested = Math.ceil(rowsRequested / this._pageRowCount);\n pagesToFetch = Math.min(pagesRequested, 400);\n isDataLimited = pagesToFetch < pagesRequested;\n remainingData = [];\n i = 1;\n _b.label = 2;\n case 2:\n if (!(i < pagesToFetch)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.getPageAsync(i)];\n case 3:\n page = _b.sent();\n remainingData.push(page.data);\n _b.label = 4;\n case 4:\n i++;\n return [3 /*break*/, 2];\n case 5:\n fullData = (_a = firstPage.data).concat.apply(_a, remainingData);\n // This slices the array only if maxRows has been set and is less than totalRowCount\n fullData.length = rowsRequested;\n return [2 /*return*/, {\n name: firstPage.name,\n data: fullData,\n columns: firstPage.columns,\n totalRowCount: isDataLimited ? pagesToFetch * this._pageRowCount : rowsRequested,\n isTotalRowCountLimited: isDataLimited,\n isSummaryData: firstPage.isSummaryData,\n }];\n }\n });\n });\n };\n DataTableReader.prototype.releaseAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.releaseAsync(this._id);\n };\n return DataTableReader;\n}());\nexports.DataTableReader = DataTableReader;\n//# sourceMappingURL=GetDataTableReaderModels.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Selection Model.\n */\nvar SelectionModel = /** @class */ (function () {\n function SelectionModel() {\n }\n return SelectionModel;\n}());\nexports.SelectionModel = SelectionModel;\n/**\n * Value based selection model. Meant for hierarchical, range and categorical selections.\n */\nvar ValueSelectionModel = /** @class */ (function (_super) {\n __extends(ValueSelectionModel, _super);\n function ValueSelectionModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.selectValues = [];\n return _this;\n }\n return ValueSelectionModel;\n}(SelectionModel));\nexports.ValueSelectionModel = ValueSelectionModel;\n/**\n * Hierarchical value selection model\n */\nvar HierarchicalSelectionModel = /** @class */ (function (_super) {\n __extends(HierarchicalSelectionModel, _super);\n function HierarchicalSelectionModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return HierarchicalSelectionModel;\n}(ValueSelectionModel));\nexports.HierarchicalSelectionModel = HierarchicalSelectionModel;\n/**\n * Range based value selection model\n */\nvar RangeSelectionModel = /** @class */ (function (_super) {\n __extends(RangeSelectionModel, _super);\n function RangeSelectionModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return RangeSelectionModel;\n}(SelectionModel));\nexports.RangeSelectionModel = RangeSelectionModel;\n/**\n * Dimension value selection model\n */\nvar DimensionSelectionModel = /** @class */ (function (_super) {\n __extends(DimensionSelectionModel, _super);\n function DimensionSelectionModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return DimensionSelectionModel;\n}(ValueSelectionModel));\nexports.DimensionSelectionModel = DimensionSelectionModel;\n/**\n * Tuple based selection model\n */\nvar TupleSelectionModel = /** @class */ (function () {\n function TupleSelectionModel() {\n this.objectIds = [];\n }\n return TupleSelectionModel;\n}());\nexports.TupleSelectionModel = TupleSelectionModel;\n/**\n * Container class to populate all the selection models when parsing input\n */\nvar SelectionModelsContainer = /** @class */ (function () {\n function SelectionModelsContainer() {\n this.hierModelArr = [];\n this.dimModelArr = [];\n this.quantModelArr = [];\n }\n return SelectionModelsContainer;\n}());\nexports.SelectionModelsContainer = SelectionModelsContainer;\nvar SelectTuplesInteractionModel = /** @class */ (function () {\n function SelectTuplesInteractionModel(visualIdPresModel, tupleIds, selectOptions, tooltipContext) {\n if (tupleIds === void 0) { tupleIds = []; }\n this.visualIdPresModel = visualIdPresModel;\n this.tupleIds = tupleIds;\n this.selectOptions = selectOptions;\n this.tooltipContext = tooltipContext;\n }\n return SelectTuplesInteractionModel;\n}());\nexports.SelectTuplesInteractionModel = SelectTuplesInteractionModel;\nvar HoverTupleInteractionModel = /** @class */ (function () {\n function HoverTupleInteractionModel(visualIdPresModel, tupleId, tooltipContext) {\n this.visualIdPresModel = visualIdPresModel;\n this.tupleId = tupleId;\n this.tooltipContext = tooltipContext;\n }\n return HoverTupleInteractionModel;\n}());\nexports.HoverTupleInteractionModel = HoverTupleInteractionModel;\n//# sourceMappingURL=SelectionModels.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Point = /** @class */ (function () {\n function Point(_x, _y) {\n this._x = _x;\n this._y = _y;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n enumerable: true,\n configurable: true\n });\n return Point;\n}());\nexports.Point = Point;\n//# sourceMappingURL=Point.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Defines which type of getData call to make.\n */\nvar GetDataType;\n(function (GetDataType) {\n GetDataType[\"Summary\"] = \"summary\";\n GetDataType[\"Underlying\"] = \"underlying\";\n})(GetDataType = exports.GetDataType || (exports.GetDataType = {}));\n//# sourceMappingURL=GetDataService.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ServiceRegistry_1 = require(\"./ServiceRegistry\");\nvar AnimationServiceImpl_1 = require(\"./impl/AnimationServiceImpl\");\nvar AnnotationServiceImpl_1 = require(\"./impl/AnnotationServiceImpl\");\nvar DataSourceServiceImpl_1 = require(\"./impl/DataSourceServiceImpl\");\nvar ExportServiceImpl_1 = require(\"./impl/ExportServiceImpl\");\nvar ExternalContextMenuServiceImpl_1 = require(\"./impl/ExternalContextMenuServiceImpl\");\nvar FilterServiceImpl_1 = require(\"./impl/FilterServiceImpl\");\nvar GetDataServiceImpl_1 = require(\"./impl/GetDataServiceImpl\");\nvar NotificationServiceImpl_1 = require(\"./impl/NotificationServiceImpl\");\nvar ParametersServiceImpl_1 = require(\"./impl/ParametersServiceImpl\");\nvar SelectionServiceImpl_1 = require(\"./impl/SelectionServiceImpl\");\nvar SizeServiceImpl_1 = require(\"./impl/SizeServiceImpl\");\nvar VisualModelServiceImpl_1 = require(\"./impl/VisualModelServiceImpl\");\nvar VizServiceImpl_1 = require(\"./impl/VizServiceImpl\");\nvar ZoneServiceImpl_1 = require(\"./impl/ZoneServiceImpl\");\nfunction registerAllSharedServices(dispatcher, registryId, platformVersion) {\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnimationServiceImpl_1.AnimationServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new DataSourceServiceImpl_1.DataSourceServiceImpl(dispatcher, registryId, platformVersion));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ExportServiceImpl_1.ExportServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new GetDataServiceImpl_1.GetDataServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new FilterServiceImpl_1.FilterServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new NotificationServiceImpl_1.NotificationServiceImpl(dispatcher));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ParametersServiceImpl_1.ParametersServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SelectionServiceImpl_1.SelectionServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnnotationServiceImpl_1.AnnotationServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ZoneServiceImpl_1.ZoneServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SizeServiceImpl_1.SizeServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new VisualModelServiceImpl_1.VisualModelServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new VizServiceImpl_1.VizServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ExternalContextMenuServiceImpl_1.ExternalContextMenuServiceImpl(dispatcher, registryId));\n}\nexports.registerAllSharedServices = registerAllSharedServices;\n//# sourceMappingURL=RegisterAllSharedServices.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nwindow.__tableauApiServiceRegistry = window.__tableauApiServiceRegistry || {};\nvar ServiceRegistryImpl = /** @class */ (function () {\n function ServiceRegistryImpl() {\n this._services = {};\n }\n ServiceRegistryImpl.prototype.registerService = function (service) {\n this._services[service.serviceName] = service;\n };\n ServiceRegistryImpl.prototype.getService = function (serviceName) {\n if (!this._services.hasOwnProperty(serviceName)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Service not registered: \" + serviceName);\n }\n return this._services[serviceName];\n };\n return ServiceRegistryImpl;\n}());\n/**\n * Static class used for getting access to the single instance\n * of the ApiServiceRegistry associated with the registryId.\n *\n * Extensions by design don't need to store/access multiple service registries. Their single instance of ServiceRegistry is\n * stored/access with registryId = 0.\n *\n * Whereas Embedding needs to be aware of which ServiceRegistry to use when there are multiple vizzes embedded.\n * An example of how window.__tableauApiServiceRegistry will look when there are two vizzes: { 0 : ServiceRegistry, 1 : ServiceRegistry}\n * where registry ID of 0 & 1 refers to viz's internal identifier (which is generated by VizManager).\n */\nvar ApiServiceRegistry = /** @class */ (function () {\n // Private to avoid anyone constructing this\n function ApiServiceRegistry() {\n }\n /**\n * Gets the singleton instance of the ServiceRegistry\n */\n ApiServiceRegistry.get = function (registryId) {\n if (!window.__tableauApiServiceRegistry || !window.__tableauApiServiceRegistry[registryId]) {\n ApiServiceRegistry.setInstance(registryId, new ServiceRegistryImpl());\n }\n if (!window.__tableauApiServiceRegistry[registryId]) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Service registry failed');\n }\n return window.__tableauApiServiceRegistry[registryId];\n };\n /**\n * Helper method that sets the service registry instance for the corresponding registryId. Can be used by unit tests\n *\n * @param {ServiceRegistry} serviceRegistry The new registry\n */\n ApiServiceRegistry.setInstance = function (registryId, serviceRegistry) {\n if (!window.__tableauApiServiceRegistry) {\n window.__tableauApiServiceRegistry = {};\n }\n window.__tableauApiServiceRegistry[registryId] = serviceRegistry;\n };\n /**\n * Only used by unit tests\n */\n ApiServiceRegistry.clearRegistry = function () {\n window.__tableauApiServiceRegistry = {};\n };\n return ApiServiceRegistry;\n}());\nexports.ApiServiceRegistry = ApiServiceRegistry;\n//# sourceMappingURL=ServiceRegistry.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar ErrorHelpers_1 = require(\"../../Utils/ErrorHelpers\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar AnimationServiceImpl = /** @class */ (function (_super) {\n __extends(AnimationServiceImpl, _super);\n function AnimationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(AnimationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"animation-service\" /* Animation */;\n },\n enumerable: true,\n configurable: true\n });\n AnimationServiceImpl.prototype.replayAsync = function (replaySpeed) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.ReplaySpeed] = 1.0,\n _a);\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(replaySpeed, api_external_contract_js_1.ReplaySpeedType, 'ReplaySpeedType');\n parameters[api_internal_contract_js_1.ParameterId.ReplaySpeed] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setReplaySpeedType.convert(replaySpeed);\n return this.execute(api_internal_contract_js_1.VerbId.ReplayAnimation, parameters).then(function (response) {\n return;\n });\n };\n return AnimationServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.AnimationServiceImpl = AnimationServiceImpl;\n//# sourceMappingURL=AnimationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../../EnumMappings/InternalToExternalEnumMappings\");\nvar SelectionModels_1 = require(\"../../Models/SelectionModels\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar AnnotationServiceImpl = /** @class */ (function (_super) {\n __extends(AnnotationServiceImpl, _super);\n function AnnotationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(AnnotationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"annotation-service\" /* Annotation */;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to annotate a mark on the given worksheet.\n *\n * @param visualId\n * @param mark\n * @param annotationText\n */\n AnnotationServiceImpl.prototype.annotateMarkAsync = function (visualId, mark, annotationText) {\n var _a;\n var selectionModelContainer = this.parseMarkSelectionIds([mark]);\n var dummyTargetPoint = { x: 0, y: 0 };\n var formattedText = \"\" + annotationText + \"\";\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'annotateMarkAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.AnnotateEnum] = api_internal_contract_js_1.AnnotateEnum.Mark,\n _a[api_internal_contract_js_1.ParameterId.TargetPoint] = dummyTargetPoint,\n _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection],\n _a[api_internal_contract_js_1.ParameterId.FormattedText] = formattedText,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.CreateAnnotation, parameters).then(function (response) {\n // Expecting an empty model and hence the void response.\n return;\n });\n };\n /**\n * Method to retrieve annotations for the given worksheet.\n *\n * @param visualId\n * @returns {Promise>}\n */\n AnnotationServiceImpl.prototype.getAnnotationsAsync = function (visualId) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAnnotationsAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetAnnotations, parameters).then(function (response) {\n var annotationsList = response.result;\n return _this.annotationFilterMap(annotationsList);\n });\n };\n /**\n * Method to remove an annotation from a given worksheet.\n *\n * @param visualId\n * @param annotation\n */\n AnnotationServiceImpl.prototype.removeAnnotationAsync = function (visualId, annotation) {\n var _a;\n var selectionModelContainer = this.parseAnnotationSelectionIds([annotation]);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeAnnotationAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection],\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.RemoveAnnotation, parameters).then(function (response) {\n // Expecting an empty model and hence the void response.\n return;\n });\n };\n /**\n * Method to prepare the pres models for selection by MarksInfo\n * @param marks\n */\n AnnotationServiceImpl.prototype.parseMarkSelectionIds = function (marks) {\n var ids = [];\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n marks.forEach(function (mark) {\n var tupleId = mark.tupleId;\n if (tupleId !== undefined && tupleId !== null && tupleId > 0) {\n ids.push(tupleId.toString()); // collect the tuple ids\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid tupleId');\n }\n });\n if (ids.length !== 0) {\n // tuple ids based selection\n var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel();\n tupleSelectionModel.selectionType = 'tuples';\n tupleSelectionModel.objectIds = ids;\n selectionModelContainer.selection = tupleSelectionModel;\n }\n return selectionModelContainer;\n };\n /**\n * Method to prepare the pres models for selection by MarkAnnotationInfo\n * @param marks\n */\n AnnotationServiceImpl.prototype.parseAnnotationSelectionIds = function (annotations) {\n var ids = [];\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n annotations.forEach(function (annotation) {\n var annotationId = annotation.annotationId;\n if (annotationId !== undefined && annotationId !== null && annotationId >= 0) {\n ids.push(annotationId.toString()); // collect the annotation ids\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid annotationId');\n }\n });\n if (ids.length !== 0) {\n // annotation ids based selection\n var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel();\n tupleSelectionModel.selectionType = 'annotations';\n tupleSelectionModel.objectIds = ids;\n selectionModelContainer.selection = tupleSelectionModel;\n }\n return selectionModelContainer;\n };\n /**\n * Method to map Annotation to MarkAnnotationInfo\n * @param annotation\n * @returns {Annotation}\n */\n AnnotationServiceImpl.prototype.mapAnnotation = function (annotation) {\n return {\n annotationHTML: annotation.annotationText,\n annotationId: annotation.annotationId,\n annotationText: annotation.annotationPlainText,\n annotationType: InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.annotationType.convert(annotation.annotateEnum),\n tupleId: annotation.tupleId,\n };\n };\n /**\n * Filter the Annotations to Mark Annotations, and map them to MarkAnnotationInfo\n * @param annotations\n * @returns {Array}\n */\n AnnotationServiceImpl.prototype.annotationFilterMap = function (annotations) {\n var _this = this;\n var annotationInfos = annotations.map(function (annotation) { return _this.mapAnnotation(annotation); });\n return annotationInfos;\n };\n return AnnotationServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.AnnotationServiceImpl = AnnotationServiceImpl;\n//# sourceMappingURL=AnnotationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ClientInfoServiceImpl = /** @class */ (function (_super) {\n __extends(ClientInfoServiceImpl, _super);\n function ClientInfoServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ClientInfoServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"client-info-service\" /* ClientInfo */;\n },\n enumerable: true,\n configurable: true\n });\n ClientInfoServiceImpl.prototype.getClientInfoAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.GetEmbeddingClientInfo;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getClientInfoAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var clientInfo = response.result;\n return clientInfo;\n });\n };\n return ClientInfoServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ClientInfoServiceImpl = ClientInfoServiceImpl;\n//# sourceMappingURL=ClientInfoServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalContract = require(\"@tableau/api-internal-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar DataSource_1 = require(\"../../DataSource\");\nvar Field_1 = require(\"../../Field\");\nvar DataSourceImpl_1 = require(\"../../Impl/DataSourceImpl\");\nvar FieldImpl_1 = require(\"../../Impl/FieldImpl\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nexports.SENTINEL_LOGICAL_TABLE_INFO = {\n id: InternalContract.ApiShowDataTableSentinel.SingleTableId,\n caption: InternalContract.ApiShowDataTableSentinel.SingleTableCaption,\n};\n// The minimum platform version when Object Model was supported\nvar platformVersionObjectModelSupport = { major: 1, minor: 20, fix: 1 };\nvar DataSourceServiceImpl = /** @class */ (function (_super) {\n __extends(DataSourceServiceImpl, _super);\n // Since Object Model is supported since Tableau 2020.2, DataSourceServiceImpl can be initialized with the\n // platform version when OM was supported. Once we drop support for Tableau versions <= 2020.1, all additional\n // code in here for Object Model can be removed.\n function DataSourceServiceImpl(dispatcher, registryId, _platformVersion) {\n if (_platformVersion === void 0) { _platformVersion = platformVersionObjectModelSupport; }\n var _this = _super.call(this, dispatcher, registryId) || this;\n _this._platformVersion = _platformVersion;\n return _this;\n }\n Object.defineProperty(DataSourceServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"data-source-service\" /* DataSourceService */;\n },\n enumerable: true,\n configurable: true\n });\n DataSourceServiceImpl.prototype.refreshAsync = function (dataSourceId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'refreshAsync',\n _a[api_internal_contract_js_1.ParameterId.DeltaTimeMs] = 0,\n _a[api_internal_contract_js_1.ParameterId.ShouldRefreshDS] = true,\n _a);\n // On server: Not passing the datasource id will refresh all datasources.\n if (dataSourceId) {\n parameters[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId;\n }\n return this.execute(api_internal_contract_js_1.VerbId.RefreshDataSource, parameters).then(function (response) {\n return;\n });\n };\n DataSourceServiceImpl.prototype.getActiveTablesAsync = function (dataSourceId) {\n var _a;\n var joinParameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getActiveTablesAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a);\n // Get the description of the tables used by this connection\n return this.execute(api_internal_contract_js_1.VerbId.GetActiveTables, joinParameters).then(function (joinResponse) {\n var tableInfos = joinResponse.result;\n // getActiveTables is unsupported for cubes and GA. We do not have a connection type property\n // available from the platform (intentionally, to reduce code churn as new connections are added).\n // Instead,just check if any tables are returned. This array will be empty for any non-table based datasource.\n if (tableInfos.tables.length === 0) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedMethodForDataSourceType, \"getActiveTables is not supported for: \" + dataSourceId);\n }\n return tableInfos.tables;\n });\n };\n DataSourceServiceImpl.prototype.getDataSourcesAsync = function (visualId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourcesAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataSources, parameters).then(function (response) {\n var dataSchema = response.result;\n return dataSchema;\n });\n };\n DataSourceServiceImpl.prototype.getAllDataSourcesAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAllDataSourcesAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetAllDataSources, parameters).then(function (response) {\n var dataSchema = response.result;\n return dataSchema;\n });\n };\n DataSourceServiceImpl.prototype.getConnectionSummariesAsync = function (dataSourceId) {\n var _a;\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getConnectionSummariesAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a);\n // Get the description of the tables used by this connection\n return this.execute(api_internal_contract_js_1.VerbId.GetConnectionDescriptionSummaries, params).then(function (response) {\n var descriptionSummaries = response.result;\n return descriptionSummaries;\n });\n };\n DataSourceServiceImpl.prototype.getFieldAsync = function (globalfieldName) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetFieldAndDataSource;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFieldAsync',\n _a[api_internal_contract_js_1.ParameterId.FieldId] = globalfieldName,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var dataSource = response.result[api_internal_contract_js_1.ParameterId.DataSource];\n var field = response.result[api_internal_contract_js_1.ParameterId.Field];\n return _this.convertField(field, _this.convertDataSource(dataSource));\n });\n };\n DataSourceServiceImpl.prototype.getLogicalTablesAsync = function (dataSourceId) {\n var _a;\n if (!this.isObjectModelSupportedByPlatform()) {\n /**\n * This sentinel ID can be passed to datasource.getLogicalTableData.\n * Once the desktop is upgraded to a version that supports object model,\n * the sentinel ID will automatically fetch the upgraded table.\n * */\n return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); });\n }\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTablesAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTables, params).then(function (response) {\n return response.result;\n });\n };\n DataSourceServiceImpl.prototype.getUnderlyingTablesAsync = function (visualId) {\n var _a;\n if (!this.isObjectModelSupportedByPlatform()) {\n /**\n * This sentinel ID can be passed to worksheet.getUnderlyingTableData.\n * Once the desktop is upgraded to a version that supports object model,\n * the sentinel ID will automatically fetch the upgraded table.\n * */\n return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); });\n }\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTablesAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTables, params).then(function (response) {\n return response.result;\n });\n };\n DataSourceServiceImpl.prototype.convertField = function (field, dataSource) {\n return new Field_1.Field(new FieldImpl_1.FieldImpl(field, dataSource));\n };\n DataSourceServiceImpl.prototype.convertDataSource = function (dataSource) {\n return new DataSource_1.DataSource(new DataSourceImpl_1.DataSourceImpl(dataSource, this._registryId));\n };\n DataSourceServiceImpl.prototype.isObjectModelSupportedByPlatform = function () {\n var platformVersionNoObjectModelSupport = { major: 1, minor: 13, fix: 0 };\n return InternalContract.VersionLessThan(platformVersionNoObjectModelSupport, this._platformVersion);\n };\n return DataSourceServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.DataSourceServiceImpl = DataSourceServiceImpl;\n//# sourceMappingURL=DataSourceServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar ExportHelpers_1 = require(\"../../Utils/ExportHelpers\");\nvar ErrorHelpers_1 = require(\"../../Utils/ErrorHelpers\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ExportServiceImpl = /** @class */ (function (_super) {\n __extends(ExportServiceImpl, _super);\n function ExportServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ExportServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"export-service\" /* Export */;\n },\n enumerable: true,\n configurable: true\n });\n ExportServiceImpl.prototype.getExportCrosstabSheetMapAsync = function (currentSheetType) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.GetExportCrosstabSheetMap;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getExportCrosstabSheetMapAsync',\n _a[api_internal_contract_js_1.ParameterId.CurrentSheetType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.sheetType.convert(currentSheetType),\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n ExportServiceImpl.prototype.exportCrosstabAsync = function (sheetName, format, exportableWorksheetNames, currentSheetType) {\n return __awaiter(this, void 0, void 0, function () {\n var sheetNameToIdMap, parameters, verb;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n ErrorHelpers_1.ErrorHelpers.verifySheetName(exportableWorksheetNames, sheetName);\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(format, api_external_contract_js_1.CrosstabFileFormat, 'CrosstabFileFormat');\n return [4 /*yield*/, this.getExportCrosstabSheetMapAsync(currentSheetType)];\n case 1:\n sheetNameToIdMap = _b.sent();\n if (!sheetNameToIdMap[sheetName]) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'missing sheet doc id from sheetMap');\n }\n parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportCrosstabAsync',\n _a[api_internal_contract_js_1.ParameterId.SheetIdentifier] = sheetNameToIdMap[sheetName],\n _a[api_internal_contract_js_1.ParameterId.SendNotifications] = true,\n _a);\n switch (format) {\n case api_external_contract_js_1.CrosstabFileFormat.CSV:\n verb = api_internal_contract_js_1.VerbId.ExportCrosstabCsvDownload;\n // CSV only parameter: see browser-clients/export-crosstab-options-dialog repo\n parameters[api_internal_contract_js_1.ParameterId.UseTabDelimiters] = true;\n break;\n case api_external_contract_js_1.CrosstabFileFormat.Excel:\n verb = api_internal_contract_js_1.VerbId.ExportCrosstabExcelDownload;\n break;\n default:\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'unsupported Crosstab file format.');\n }\n return [2 /*return*/, this.execute(verb, parameters)\n .then(function (response) {\n var result = response.result;\n return result;\n })\n .catch(function () {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.CrosstabCreationError, 'An unexpected error occurred while generating the document.');\n })];\n }\n });\n });\n };\n ExportServiceImpl.prototype.exportDataAsync = function (visualId, options) {\n var _a;\n var _b;\n ErrorHelpers_1.ErrorHelpers.verifyExportDataOptions(options);\n // Remove any duplicates from the input array\n var columnsAsSet = new Set(options.columnsToIncludeById);\n var columnsToIncludeById = Array.from(columnsAsSet);\n var verb = api_internal_contract_js_1.VerbId.ExportDataDownload;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportDataAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = (_b = options.ignoreAliases, (_b !== null && _b !== void 0 ? _b : false)),\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = columnsToIncludeById,\n _a);\n return this.execute(verb, parameters)\n .then(function () { })\n .catch(function () {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.DataCreationError, 'An unexpected error occurred while generating the document.');\n });\n };\n ExportServiceImpl.prototype.exportPowerPointAsync = function (sheetNames, exportScenarios) {\n var _a;\n ErrorHelpers_1.ErrorHelpers.verifySheetNamesForPDFAndPPT(sheetNames, exportScenarios);\n // Note: the ExportOriginUrl param is listed as optional for the pres layer command we are invoking; however,\n // recent changes were made that enforced the use of the empty string when invoking this command with no ExportOriginUrl.\n // see browser-clients/export-powerpoint-options-dialog repo.\n var verb = api_internal_contract_js_1.VerbId.ExportPowerpointDownload;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportPowerPointAsync',\n _a[api_internal_contract_js_1.ParameterId.ExportOriginUrl] = '',\n _a[api_internal_contract_js_1.ParameterId.SelectedSheetNames] = sheetNames,\n _a);\n return this.execute(verb, parameters)\n .then(function (response) {\n var result = response.result;\n return result;\n })\n .catch(function () {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.PowerPointCreationError, 'An error occured while attempting to generate the PowerPoint file.');\n });\n };\n ExportServiceImpl.prototype.exportPDFAsync = function (sheetNames, externalExportPdfOptions, exportScenarios) {\n return __awaiter(this, void 0, void 0, function () {\n var internalExportPdfOptions, verb, parameters;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n ErrorHelpers_1.ErrorHelpers.verifyExportPDFOptions(externalExportPdfOptions);\n ErrorHelpers_1.ErrorHelpers.verifySheetNamesForPDFAndPPT(sheetNames, exportScenarios);\n return [4 /*yield*/, this.getExportPDFOptionsAsync()];\n case 1:\n internalExportPdfOptions = _b.sent();\n ExportHelpers_1.ExportHelpers.updateInternalExportPDFOptions(internalExportPdfOptions, externalExportPdfOptions, sheetNames);\n verb = api_internal_contract_js_1.VerbId.ExportPdfDownload;\n parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportPDFAsync',\n _a[api_internal_contract_js_1.ParameterId.ExportPdfOptions] = internalExportPdfOptions,\n _a);\n return [2 /*return*/, this.execute(verb, parameters)\n .then(function (response) {\n var result = response.result;\n return result;\n })\n .catch(function () {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.PDFCreationError, 'Unable to create PDF because something went wrong. Try again.');\n })];\n }\n });\n });\n };\n ExportServiceImpl.prototype.getExportPDFOptionsAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.GetExportPdfOptions;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getExportPdfOptionsAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n return ExportServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ExportServiceImpl = ExportServiceImpl;\n//# sourceMappingURL=ExportServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ExternalContextMenuServiceImpl = /** @class */ (function (_super) {\n __extends(ExternalContextMenuServiceImpl, _super);\n function ExternalContextMenuServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ExternalContextMenuServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"external-context-menu-service\" /* ExternalContextMenu */;\n },\n enumerable: true,\n configurable: true\n });\n ExternalContextMenuServiceImpl.prototype.appendContextMenuAsync = function (sheetName, targetMenu, config) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.AppendExternalMenuItem;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'appendContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemDisplayName] = config.displayName,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var newMenuItemId = response.result;\n return newMenuItemId;\n });\n };\n ExternalContextMenuServiceImpl.prototype.removeContextMenuAsync = function (sheetName, targetMenu, menuItemId) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.RemoveExternalMenuItem;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n ExternalContextMenuServiceImpl.prototype.executeContextMenuAsync = function (sheetName, targetMenu, menuItemId) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ExecuteExternalMenuItem;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'executeContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n ExternalContextMenuServiceImpl.prototype.renameContextMenuAsync = function (sheetName, targetMenu, menuHeader, menuDescription) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.RenameExternalMenu;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'renameContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuHeader] = menuHeader,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuDescription] = menuDescription,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n return ExternalContextMenuServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ExternalContextMenuServiceImpl = ExternalContextMenuServiceImpl;\n//# sourceMappingURL=ExternalContextMenuServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalContract = require(\"@tableau/api-internal-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ApiShared_1 = require(\"../../../ApiShared\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar InternalToExternalEnumMappings_1 = require(\"../../EnumMappings/InternalToExternalEnumMappings\");\nvar FilterModels_1 = require(\"../../Models/FilterModels\");\nvar DataValueFactory_1 = require(\"../../Utils/DataValueFactory\");\nvar Param_1 = require(\"../../Utils/Param\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar FilterServiceImpl = /** @class */ (function (_super) {\n __extends(FilterServiceImpl, _super);\n function FilterServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(FilterServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"filter-service\" /* Filter */;\n },\n enumerable: true,\n configurable: true\n });\n FilterServiceImpl.prototype.applyFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ApplyCategoricalFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n if (!Array.isArray(values)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyFilterAsync must be an array');\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values;\n parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType);\n parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] =\n filterOptions === undefined || filterOptions.isExcludeMode === undefined ? false : filterOptions.isExcludeMode;\n return this.execute(verb, parameters).then(function (response) {\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.applyRangeFilterAsync = function (visualId, fieldName, filterOptions) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.ApplyRangeFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRangeFilterAsync',\n _a);\n if (filterOptions.min !== undefined && filterOptions.min !== null) {\n var min = void 0;\n if (filterOptions.min instanceof Date) {\n min = Param_1.Param.serializeDateForPlatform(filterOptions.min);\n }\n else {\n min = filterOptions.min;\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterRangeMin] = min;\n }\n if (filterOptions.max !== undefined && filterOptions.max !== null) {\n var max = void 0;\n if (filterOptions.max instanceof Date) {\n max = Param_1.Param.serializeDateForPlatform(filterOptions.max);\n }\n else {\n max = filterOptions.max;\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterRangeMax] = max;\n }\n // The null option is used with min+max for 'include-range' or 'include-range-or-null'\n if (filterOptions.nullOption) {\n parameters[api_internal_contract_js_1.ParameterId.FilterRangeNullOption] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.nullOptions.convert(filterOptions.nullOption);\n }\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n return this.execute(verb, parameters).then(function (response) {\n _this.apiFilterHandlerCheckForCommandError(response.result);\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.applyHierarchicalFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.HierarchicalFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyHierarchicalFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n var hierarchicalLevels = values.levels;\n if (Array.isArray(hierarchicalLevels) && hierarchicalLevels.length > 0) {\n parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = hierarchicalLevels;\n }\n else if (values.length > 0) {\n parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values;\n }\n else {\n // the server command expects empty list for clearing the filter\n // it also expects eithers FilterLevels or FilterValues to be set\n parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = [];\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType);\n parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode;\n return this.execute(verb, parameters).then(function (response) {\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.clearFilterAsync = function (visualId, fieldName) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ClearFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n return this.execute(verb, parameters).then(function (resposne) {\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.applyRelativeDateFilterAsync = function (visualId, fieldName, options) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ApplyRelativeDateFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRelativeDateFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n parameters[api_internal_contract_js_1.ParameterId.PeriodType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.periodType.convert(options.periodType);\n parameters[api_internal_contract_js_1.ParameterId.DateRangeType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.dateRangeType.convert(options.rangeType);\n if (options.rangeType === api_external_contract_js_1.DateRangeType.LastN || options.rangeType === api_external_contract_js_1.DateRangeType.NextN) {\n if (options.rangeN === undefined || options.rangeN === null) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.MissingRangeNForRelativeDateFilters, 'Missing rangeN field for a relative date filter of LASTN or NEXTN.');\n }\n parameters[api_internal_contract_js_1.ParameterId.RangeN] = options.rangeN;\n }\n if (options.anchorDate !== undefined && options.anchorDate !== null) {\n parameters[api_internal_contract_js_1.ParameterId.AnchorDate] = this.convertAnchorDate(options.anchorDate);\n }\n return this.execute(verb, parameters).then(function (response) {\n return response.result;\n });\n };\n FilterServiceImpl.prototype.getFiltersAsync = function (visualId) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetFilters;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFiltersAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n return this.execute(verb, parameters).then(function (response) {\n var filters = response.result;\n return _this.convertDomainFilters(filters);\n });\n };\n FilterServiceImpl.prototype.getCategoricalDomainAsync = function (worksheetName, fieldId, domainType) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetCategoricalDomain;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCategoricalDomainAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType);\n return this.execute(verb, parameters).then(function (response) {\n var domain = response.result;\n return _this.convertCategoricalDomain(domain, domainType);\n });\n };\n FilterServiceImpl.prototype.getRangeDomainAsync = function (worksheetName, fieldId, domainType) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetRangeDomain;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getRangeDomainAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType);\n return this.execute(verb, parameters).then(function (response) {\n var domain = response.result;\n return _this.convertRangeDomain(domain, domainType);\n });\n };\n FilterServiceImpl.prototype.getDashboardFiltersAsync = function () {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetDashboardFilters;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDashboardFiltersAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var filters = response.result;\n return _this.convertDomainFilters(filters);\n });\n };\n FilterServiceImpl.prototype.applyDashboardFilterAsync = function (fieldName, values, updateType, filterOptions) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.DashboardCategoricalFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyDashboardFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values;\n parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType);\n parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode;\n return this.execute(verb, parameters).then(function (response) {\n return response.result;\n });\n };\n FilterServiceImpl.prototype.getAppliedWorksheetsAsync = function (worksheetName, fieldId) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var sharedFilterModel, worksheetNames;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsync')];\n case 1:\n sharedFilterModel = _b.sent();\n worksheetNames = [];\n (_a = sharedFilterModel.worksheets) === null || _a === void 0 ? void 0 : _a.map(function (worksheetInfo) {\n if (worksheetInfo.isSelected) {\n worksheetNames.push(worksheetInfo.worksheetName);\n }\n });\n return [2 /*return*/, worksheetNames];\n }\n });\n });\n };\n FilterServiceImpl.prototype.setAppliedWorksheetsAsync = function (worksheetName, fieldName, fieldId, applyToWorksheets) {\n return __awaiter(this, void 0, void 0, function () {\n var sharedFilterModel, allowedWorksheets, activeWorksheet, verb, parameters;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsyncInternal')];\n case 1:\n sharedFilterModel = _a.sent();\n if (!sharedFilterModel || !sharedFilterModel.worksheets) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'This filter does not apply to multiple worksheets');\n }\n allowedWorksheets = [];\n activeWorksheet = '';\n sharedFilterModel.worksheets.forEach(function (worksheet) {\n // Get active worksheet\n if (worksheet.isActive) {\n activeWorksheet = worksheet.worksheetName;\n }\n // Populate allowed worksheets\n if (worksheet.isSelected || worksheet.isEnabled) {\n allowedWorksheets.push(worksheet.worksheetName);\n }\n });\n if (activeWorksheet === '') {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'No active worksheet');\n }\n if (!applyToWorksheets.includes(activeWorksheet)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, activeWorksheet + \" must be included in the applied worksheets\");\n }\n applyToWorksheets.forEach(function (sheet) {\n // check if it's present within compatible sheets\n if (!allowedWorksheets.includes(sheet)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, \"The field \" + fieldName + \" isn't applicable to the worksheet \" + sheet);\n }\n });\n verb = api_internal_contract_js_1.VerbId.ChangeSharedFilter;\n parameters = {};\n parameters[api_internal_contract_js_1.ParameterId.FunctionName] = 'setAppliedWorksheetsAsync';\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n parameters[api_internal_contract_js_1.ParameterId.SharedFilterSheets] = applyToWorksheets;\n return [2 /*return*/, this.execute(verb, parameters).then(function (response) {\n return applyToWorksheets;\n })];\n }\n });\n });\n };\n // Helper Methods\n FilterServiceImpl.prototype.executeGetAppliedWorksheets = function (worksheetName, fieldId, telemetryFunctionName) {\n var verb = api_internal_contract_js_1.VerbId.GetSharedFilter;\n var parameters = {};\n parameters[api_internal_contract_js_1.ParameterId.FunctionName] = telemetryFunctionName;\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n return this.execute(verb, parameters).then(function (response) {\n var sharedFilterModel = response.result;\n return sharedFilterModel;\n });\n };\n FilterServiceImpl.prototype.convertDomainFilters = function (domainFilters) {\n var _this = this;\n var filters = [];\n domainFilters.forEach(function (domainFilter) {\n switch (domainFilter.filterType) {\n case api_internal_contract_js_1.FilterType.Categorical: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertCategoricalFilter(filter));\n }\n else {\n throw new Error('Invalid Categorical Filter');\n }\n break;\n }\n case api_internal_contract_js_1.FilterType.Hierarchical: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertHierarchicalFilter(filter));\n }\n else {\n throw new Error('Invalid Hierarchical Filter');\n }\n break;\n }\n case api_internal_contract_js_1.FilterType.Range: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertRangeFilter(filter));\n }\n else {\n throw new Error('Invalid Range Filter');\n }\n break;\n }\n case api_internal_contract_js_1.FilterType.RelativeDate: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertRelativeDateFilter(filter));\n }\n else {\n throw new Error('Invalid Relative Date Filter');\n }\n break;\n }\n default: {\n break;\n }\n }\n });\n return filters;\n };\n FilterServiceImpl.prototype.convertCategoricalFilter = function (domainFilter) {\n var appliedValues = domainFilter.values.map(function (dv) {\n return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(dv);\n });\n return new FilterModels_1.CategoricalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Categorical, this._registryId, appliedValues, domainFilter.isExclude, domainFilter.isAllSelected);\n };\n FilterServiceImpl.prototype.convertHierarchicalFilter = function (domainFilter) {\n var appliedValues = domainFilter.values.map(function (hierarchicalDataValue) {\n return new FilterModels_1.HierarchicalDataValue(DataValueFactory_1.DataValueFactory.MakeFilterDataValue(hierarchicalDataValue.value), hierarchicalDataValue.hierarchicalPath, hierarchicalDataValue.level);\n });\n var levelDetails = domainFilter.levelInfo.map(function (aLevel) {\n return new FilterModels_1.HierarchicalLevelDetail(aLevel.name, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.hierarchicalLevelSelectionState.convert(aLevel.levelSelectionState));\n });\n return new FilterModels_1.HierarchicalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Hierarchical, this._registryId, domainFilter.dimensionName, domainFilter.hierarchyCaption, domainFilter.levels, levelDetails, appliedValues, domainFilter.isAllSelected);\n };\n FilterServiceImpl.prototype.convertRangeFilter = function (domainFilter) {\n var minValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.min);\n var maxValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.max);\n return new FilterModels_1.RangeFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Range, this._registryId, minValue, maxValue, domainFilter.includeNullValues);\n };\n FilterServiceImpl.prototype.convertRelativeDateFilter = function (domainFilter) {\n var anchorDateValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.anchorDate);\n return new FilterModels_1.RelativeDateFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_external_contract_js_1.FilterType.RelativeDate, this._registryId, anchorDateValue, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(domainFilter.periodType), InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateRangeType.convert(domainFilter.rangeType), domainFilter.rangeN);\n };\n FilterServiceImpl.prototype.convertCategoricalDomain = function (domain, domainType) {\n var values = domain.values.map(function (domainDv) {\n return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainDv);\n });\n return new FilterModels_1.CategoricalDomain(values, domainType);\n };\n FilterServiceImpl.prototype.convertRangeDomain = function (domain, domainType) {\n var min = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.min);\n var max = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.max);\n return new FilterModels_1.RangeDomain(min, max, domainType);\n };\n FilterServiceImpl.prototype.convertAnchorDate = function (anchorDate) {\n // Converts a Date object into a string format that the server expects for date/time values.\n // If anchorDate doesn't represent a valid Date object, any of these would be NaN.\n var year = anchorDate.getUTCFullYear();\n var month = anchorDate.getUTCMonth() + 1;\n var day = anchorDate.getUTCDate();\n var hh = anchorDate.getUTCHours();\n var mm = anchorDate.getUTCMinutes();\n var sec = anchorDate.getUTCSeconds();\n if (isNaN(year) || isNaN(month) || isNaN(day) || isNaN(hh) || isNaN(mm) || isNaN(sec)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.InvalidDateParameter, 'Invalid date parameter: anchorDate');\n }\n var result = year + \"-\" + month + \"-\" + day + \" \" + hh + \":\" + mm + \":\" + sec;\n return result;\n };\n FilterServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) {\n if (!serverPm[InternalContract.ParameterId.ParameterError]) {\n return;\n }\n if (serverPm[InternalContract.ParameterId.InvalidFieldCaption]) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldName, serverPm[InternalContract.ParameterId.InvalidFieldCaption]);\n }\n if (serverPm[InternalContract.ParameterId.InvalidValues]) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldValue, serverPm[InternalContract.ParameterId.InvalidValues]);\n }\n if (serverPm[InternalContract.ParameterId.InvalidAggFieldName]) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidAggregationFieldName, serverPm[InternalContract.ParameterId.InvalidAggFieldName]);\n }\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.ServerError, 'Server Error');\n };\n return FilterServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.FilterServiceImpl = FilterServiceImpl;\n//# sourceMappingURL=FilterServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar uuid_1 = require(\"uuid\");\nvar ApiShared_1 = require(\"../../../ApiShared\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar GetDataModels_1 = require(\"../../Models/GetDataModels\");\nvar GetDataTableReaderModels_1 = require(\"../../Models/GetDataTableReaderModels\");\nvar DataValueFactory_1 = require(\"../../Utils/DataValueFactory\");\nvar GetDataService_1 = require(\"../GetDataService\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar GetDataServiceImpl = /** @class */ (function (_super) {\n __extends(GetDataServiceImpl, _super);\n function GetDataServiceImpl() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // The extension/embedding instance uses the same cache for all DataTableReaders.\n _this.viewDataTableCacheId = uuid_1.v4();\n return _this;\n }\n Object.defineProperty(GetDataServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"get-data-service\" /* GetData */;\n },\n enumerable: true,\n configurable: true\n });\n GetDataServiceImpl.prototype.getMaxRowLimit = function () {\n return 10000;\n };\n GetDataServiceImpl.prototype.getViewDataTableCacheId = function () {\n return this.viewDataTableCacheId;\n };\n GetDataServiceImpl.prototype.getLimitedMaxRows = function (requestedRows) {\n var rowCountLimit = this.getMaxRowLimit() + 1;\n return requestedRows > 0 && requestedRows < rowCountLimit ? requestedRows : rowCountLimit;\n };\n GetDataServiceImpl.prototype.getUnderlyingDataAsync = function (visualId, getType, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) {\n var _a;\n var _this = this;\n // Create all of our parameters\n var summaryData = getType === GetDataService_1.GetDataType.Summary;\n var functionName = summaryData ? 'getSummaryDataAsync' : 'getUnderlyingDataAsync';\n var verb = summaryData ? api_internal_contract_js_1.VerbId.GetDataSummaryData : api_internal_contract_js_1.VerbId.GetUnderlyingData;\n var requestMaxRows = verb === api_internal_contract_js_1.VerbId.GetUnderlyingData ? this.getLimitedMaxRows(maxRows) : maxRows;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = functionName,\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases;\n parameters[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection;\n parameters[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns;\n parameters[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById);\n parameters[api_internal_contract_js_1.ParameterId.MaxRows] = requestMaxRows;\n parameters[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption);\n return this.execute(verb, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, responseData.isSummary);\n });\n };\n GetDataServiceImpl.prototype.getSummaryDataReaderAsync = function (visualId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryDataReaderAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataSummaryDataReader, parameters).then(function (response) {\n var responseData = response.result;\n return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId);\n });\n };\n GetDataServiceImpl.prototype.getSummaryColumnsInfoAsync = function (visualId) {\n var _a;\n // Create all the parameters for GetDataType of Summary with 1 row, and only native values\n // Then return just the columns\n var verb = api_internal_contract_js_1.VerbId.GetDataSummaryData;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryColumnsInfoAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = true,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = true,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = true,\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = 1,\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var underlyingDataTable = response.result;\n var dataTable = underlyingDataTable.data;\n var columns = dataTable.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); });\n return columns;\n });\n };\n GetDataServiceImpl.prototype.getSelectedMarksAsync = function (visualId) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSelectedMarksAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetSelectedMarks, parameters).then(function (response) {\n var responseData = response.result;\n return {\n data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }),\n };\n });\n };\n GetDataServiceImpl.prototype.getHighlightedMarksAsync = function (visualId) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getHighlightedMarksAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetHighlightedMarks, parameters).then(function (response) {\n var responseData = response.result;\n return {\n data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }),\n };\n });\n };\n GetDataServiceImpl.prototype.getDataSourceDataAsync = function (dataSourceId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourceDataAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows),\n _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = this.verifyIncludeColumnArray(columnsToInclude),\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataSourceData, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, false);\n });\n };\n GetDataServiceImpl.prototype.getLogicalTableDataAsync = function (datasourceId, logicalTableId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataAsync',\n _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = columnsToInclude,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableData, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, false);\n });\n };\n GetDataServiceImpl.prototype.getLogicalTableDataReaderAsync = function (datasourceId, logicalTableId, pageRowCount, ignoreAliases, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataReaderAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableDataReader, parameters).then(function (response) {\n var responseData = response.result;\n return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId);\n });\n };\n GetDataServiceImpl.prototype.getUnderlyingTableDataAsync = function (visualId, logicalTableId, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableData, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, false);\n });\n };\n GetDataServiceImpl.prototype.getUnderlyingTableDataReaderAsync = function (visualId, logicalTableId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataReaderAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableDataReader, parameters).then(function (response) {\n var responseData = response.result;\n return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId);\n });\n };\n GetDataServiceImpl.prototype.getPageAsync = function (tableId, pageNumber, pageSize) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getPageAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId,\n _a[api_internal_contract_js_1.ParameterId.DataRowIndex] = pageNumber * pageSize,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataTableReaderPage, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsPage(responseData, tableId === GetDataServiceImpl.summaryTableId ? true : false);\n });\n };\n GetDataServiceImpl.prototype.releaseAsync = function (tableId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'release',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ReleaseDataTableReader, parameters).then(function (response) {\n return;\n });\n };\n GetDataServiceImpl.prototype.verifyIncludeColumnArray = function (columns) {\n // columns must be a valid array\n if (!Array.isArray(columns)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'columnsToInclude and columnsToIncludeById must be valid arrays');\n }\n // Remove any duplicates from the input array\n var columnsAsSet = new Set(columns);\n return Array.from(columnsAsSet);\n };\n GetDataServiceImpl.prototype.processResultsTable = function (responseData, isSummary) {\n var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); });\n // TODO This should be controlled by a flag indicating whether this api will respond marks info or not\n var marks;\n if (responseData.marks) {\n marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); });\n }\n // Limit+1 is our sentinal that underlying data contains more rows than user is allowed to fetch.\n // Remove the last element so we always return MaxRowLimit\n var isTotalRowCountLimited = isSummary === false && responseData.dataTable.length === this.getMaxRowLimit() + 1;\n if (isTotalRowCountLimited) {\n responseData.dataTable.length -= 1;\n }\n var table = responseData.dataTable.map(function (row) {\n return row.map(function (cell, index) {\n return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType);\n });\n });\n if (marks) {\n return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary, marks);\n }\n return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary);\n };\n GetDataServiceImpl.prototype.processResultsPage = function (responseData, isSummary) {\n var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); });\n var marks;\n if (responseData.marks) {\n marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); });\n }\n var table = responseData.dataTable.map(function (row) {\n return row.map(function (cell, index) {\n return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType);\n });\n });\n if (marks) {\n return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary, marks);\n }\n return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary);\n };\n GetDataServiceImpl.summaryTableId = '';\n return GetDataServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.GetDataServiceImpl = GetDataServiceImpl;\n//# sourceMappingURL=GetDataServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NotificationServiceImplBase_1 = require(\"./NotificationServiceImplBase\");\nvar NotificationServiceImpl = /** @class */ (function (_super) {\n __extends(NotificationServiceImpl, _super);\n function NotificationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(NotificationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"notification-service\" /* Notification */;\n },\n enumerable: true,\n configurable: true\n });\n return NotificationServiceImpl;\n}(NotificationServiceImplBase_1.NotificationServiceImplBase));\nexports.NotificationServiceImpl = NotificationServiceImpl;\n//# sourceMappingURL=NotificationServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registration = /** @class */ (function () {\n function Registration(_filterFn, _callbackFn) {\n this._filterFn = _filterFn;\n this._callbackFn = _callbackFn;\n // Nothing Here\n }\n Registration.prototype.onNotification = function (notificationModel) {\n if (this._filterFn(notificationModel)) {\n this._callbackFn(notificationModel);\n }\n };\n return Registration;\n}());\nexports.Registration = Registration;\nvar NotificationServiceImplBase = /** @class */ (function () {\n function NotificationServiceImplBase(dispatcher) {\n this.dispatcher = dispatcher;\n this._handlers = {};\n this.dispatcher.registerNotificationHandler(this.onNotification.bind(this));\n }\n NotificationServiceImplBase.prototype.registerHandler = function (id, filterFn, handler) {\n var _this = this;\n var handlers = this._handlers[id] || new Array();\n var registration = new Registration(filterFn, handler);\n handlers.push(registration);\n this._handlers[id] = handlers;\n return function () { return _this.removeRegistration(id, registration); };\n };\n NotificationServiceImplBase.prototype.hasHandlersForNotificationType = function (id) {\n // eslint-disable-next-line no-prototype-builtins\n return this._handlers.hasOwnProperty(id);\n };\n NotificationServiceImplBase.prototype.onNotification = function (notification) {\n if (!this.hasHandlersForNotificationType(notification.notificationId)) {\n return;\n }\n // Go through and check for all the handlers of this particular notification\n this._handlers[notification.notificationId].forEach(function (h) { return h.onNotification(notification.data); });\n };\n NotificationServiceImplBase.prototype.removeRegistration = function (id, registration) {\n if (!this.hasHandlersForNotificationType(id)) {\n return;\n }\n this._handlers[id] = this._handlers[id].filter(function (reg) { return reg !== registration; });\n };\n return NotificationServiceImplBase;\n}());\nexports.NotificationServiceImplBase = NotificationServiceImplBase;\n//# sourceMappingURL=NotificationServiceImplBase.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ParameterImpl_1 = require(\"../../Impl/ParameterImpl\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ParametersServiceImpl = /** @class */ (function (_super) {\n __extends(ParametersServiceImpl, _super);\n function ParametersServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ParametersServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"parameters-service\" /* Parameters */;\n },\n enumerable: true,\n configurable: true\n });\n ParametersServiceImpl.prototype.getParametersForSheetAsync = function (sheetPath) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync',\n _a[api_internal_contract_js_1.ParameterId.SheetPath] = sheetPath,\n _a);\n return this.getParametersAsync(parameters);\n };\n ParametersServiceImpl.prototype.getAllParametersAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync',\n _a);\n return this.getParametersAsync(parameters);\n };\n ParametersServiceImpl.prototype.getParametersAsync = function (inputParameters) {\n var _this = this;\n return this.execute(api_internal_contract_js_1.VerbId.GetParametersForSheet, inputParameters).then(function (response) {\n var result = response.result;\n return result.map(function (parameterInfo) {\n return new ParameterImpl_1.ParameterImpl(parameterInfo, _this._registryId);\n });\n });\n };\n ParametersServiceImpl.prototype.changeParameterValueAsync = function (fieldName, newValue) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeParameterValueAsync',\n _a[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName,\n _a[api_internal_contract_js_1.ParameterId.ParameterValue] = newValue,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ChangeParameterValue, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n ParametersServiceImpl.prototype.findParameterByNameAsync = function (name) {\n return this.findParameterAsync(name, undefined);\n };\n ParametersServiceImpl.prototype.findParameterByGlobalFieldNameAsync = function (fieldName) {\n return this.findParameterAsync(undefined, fieldName);\n };\n ParametersServiceImpl.prototype.findParameterAsync = function (name, fieldName) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'findParameterAsync',\n _a);\n if (name !== undefined) {\n parameters[api_internal_contract_js_1.ParameterId.ParameterCaption] = name;\n }\n else if (fieldName !== undefined) {\n parameters[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName;\n }\n else {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'name or fieldName must be provided to find parameter');\n }\n return this.execute(api_internal_contract_js_1.VerbId.FindParameter, parameters).then(function (response) {\n var instanceOfParameterInfo = function (object) {\n return 'fieldName' in object;\n };\n // We need to check to see if we got a valid response back again\n if (instanceOfParameterInfo(response.result)) {\n var result = response.result;\n return new ParameterImpl_1.ParameterImpl(result, _this._registryId);\n }\n else {\n return undefined;\n }\n });\n };\n return ParametersServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ParametersServiceImpl = ParametersServiceImpl;\n//# sourceMappingURL=ParametersServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar SelectionModels_1 = require(\"../../Models/SelectionModels\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar Param_1 = require(\"../../Utils/Param\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar SelectionServiceImpl = /** @class */ (function (_super) {\n __extends(SelectionServiceImpl, _super);\n function SelectionServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SelectionServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"selection-service\" /* Selection */;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to clear all the selected marks for the given worksheet.\n *\n * @param visualId\n */\n SelectionServiceImpl.prototype.clearSelectedMarksAsync = function (visualId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearSelectedMarksAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ClearSelectedMarks, parameters).then(function (response) {\n return; // Expecting an empty model and hence the void response.\n });\n };\n /**\n * Method to select marks for the given worksheet.\n *\n * @param visualId\n * @param selectionCriteria\n * @param selectionUpdateType\n */\n SelectionServiceImpl.prototype.selectMarksByValueAsync = function (visualId, selectionCriterias, selectionUpdateType) {\n var _a;\n var _this = this;\n if (selectionCriterias.length === 0) {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Selection criteria missing for selecting marks by value');\n }\n var selectionType = this.validateSelectionUpdateType(selectionUpdateType);\n var selectionModelContainer = this.parseSelectionMarks(selectionCriterias);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByValueAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType,\n _a);\n if (selectionModelContainer.hierModelArr && selectionModelContainer.hierModelArr.length) {\n parameters[api_internal_contract_js_1.ParameterId.HierValSelectionModels] = selectionModelContainer.hierModelArr;\n }\n if (selectionModelContainer.quantModelArr && selectionModelContainer.quantModelArr.length) {\n parameters[api_internal_contract_js_1.ParameterId.QuantRangeSelectionModels] = selectionModelContainer.quantModelArr;\n }\n if (selectionModelContainer.dimModelArr && selectionModelContainer.dimModelArr.length) {\n parameters[api_internal_contract_js_1.ParameterId.DimValSelectionModels] = selectionModelContainer.dimModelArr;\n }\n return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) {\n _this.apiFilterHandlerCheckForCommandError(response.result);\n return;\n });\n };\n /**\n * Method to execute hover actions and render tooltip for a given tuple representing a mark in the visualization.\n * If the tooltip parameter is included it will show the tooltip on hover. If not, no tooltip is shown.\n *\n * @param visualId\n * @param hoveredTuple\n * @param tooltip\n * @returns empty promise that resolves when the extension host has successfully been informed of the request and rejects on error\n */\n SelectionServiceImpl.prototype.hoverTupleAsync = function (visualId, hoveredTuple, tooltip) {\n var _a;\n var interactionModel = new SelectionModels_1.HoverTupleInteractionModel(visualId, hoveredTuple, tooltip);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'hoverTupleAsync',\n _a[api_internal_contract_js_1.ParameterId.HoverTupleInteraction] = interactionModel,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.RaiseHoverTupleNotification, parameters).then(function (response) {\n return;\n });\n };\n /**\n * Method to modify selection, execute select actions and render tooltip for a given list of tuples representing a mark or marks in the visualization.\n * If the tooltip parameter is included it will show the tooltip on select. If not, no tooltip is shown.\n *\n * @param visualId\n * @param selectedTuples\n * @param selectOption\n * @param tooltip\n * @returns empty promise that resolves when the extension host has successfully been informed of the request and rejects on error\n */\n SelectionServiceImpl.prototype.selectTuplesAsync = function (visualId, selectedTuples, selectOption, tooltip) {\n var _a;\n var option = this.validateSelectOption(selectOption);\n var interactionModel = new SelectionModels_1.SelectTuplesInteractionModel(visualId, selectedTuples, option, tooltip);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectTuplesAsync',\n _a[api_internal_contract_js_1.ParameterId.SelectTuplesInteraction] = interactionModel,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.RaiseSelectTuplesNotification, parameters).then(function (response) {\n return;\n });\n };\n SelectionServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) {\n if (!serverPm[api_internal_contract_js_1.ParameterId.ParameterError]) {\n return;\n }\n if (serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionFieldName, serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]);\n }\n if (serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionValue, serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]);\n }\n if (serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionDate, serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]);\n }\n };\n /**\n * Method to select marks for the given worksheet.\n *\n * @param visualId\n * @param MarkInfo\n * @param selectionUpdateType\n */\n SelectionServiceImpl.prototype.selectMarksByIdAsync = function (visualId, marks, selectionUpdateType) {\n var _a;\n if (marks.length === 0) {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Marks info missing for selecting marks by Id');\n }\n var selectionType = this.validateSelectionUpdateType(selectionUpdateType);\n var selectionModelContainer = this.parseSelectionIds(marks);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByIdAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType,\n _a[api_internal_contract_js_1.ParameterId.Selection] = selectionModelContainer.selection,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) {\n // Expecting an empty model and hence the void response.\n return;\n // TODO Investigate the error response with multiple output params and throw error accordingly.\n });\n };\n /**\n * Method to prepare the pres models for selection by MarksInfo\n * @param marks\n */\n SelectionServiceImpl.prototype.parseSelectionIds = function (marks) {\n var ids = [];\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n for (var i = 0; i < marks.length; i++) {\n var tupleId = marks[i].tupleId;\n if (tupleId !== undefined && tupleId !== null) {\n // If tuple id is provided use that instead of pair\n ids.push(tupleId.toString()); // collect the tuple ids\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'tupleId parsing error');\n }\n }\n if (ids.length !== 0) {\n // tuple ids based selection\n var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel();\n tupleSelectionModel.selectionType = 'tuples';\n tupleSelectionModel.objectIds = ids;\n selectionModelContainer.selection = tupleSelectionModel;\n }\n return selectionModelContainer;\n };\n /**\n * Method to prepare the pres models for selection by values.\n *\n * Supports 3 types for selection:\n * 1) Hierarchical value based selection\n * 2) Range value based selection\n * 3) Dimension value based selection\n *\n * @param marks\n */\n SelectionServiceImpl.prototype.parseSelectionMarks = function (selectionCriterias) {\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n for (var i = 0; i < selectionCriterias.length; i++) {\n var st = selectionCriterias[i];\n if (!(st.fieldName && st.value !== undefined && st.value !== null)) {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'Selection Criteria parsing error');\n }\n var catRegex = new RegExp('([[A-Za-z0-9]+]).*', 'g');\n var rangeOption = st.value;\n if (catRegex.test(st.fieldName)) {\n // Hierarchical value selection\n var hierModel = this.addToParamsList(st.fieldName, st.value);\n selectionModelContainer.hierModelArr.push(hierModel);\n }\n else if (rangeOption.min !== undefined && rangeOption.max !== undefined) {\n // Range value selection\n var quantModel = this.addToRangeParamsList(st.fieldName, rangeOption);\n selectionModelContainer.quantModelArr.push(quantModel);\n }\n else {\n // Dimension value selection\n var dimModel = this.addToParamsList(st.fieldName, st.value);\n selectionModelContainer.dimModelArr.push(dimModel);\n }\n }\n return selectionModelContainer;\n };\n /**\n * Method to transform the key value pair into value based pres model object.\n *\n * @param valueSelectionModel\n * @param fieldName\n * @param value\n */\n SelectionServiceImpl.prototype.addToParamsList = function (fieldName, value) {\n var valueSelectionModel = new SelectionModels_1.ValueSelectionModel();\n var markValues = [];\n if (value instanceof Array) {\n var valueArr = value;\n for (var i = 0; i < valueArr.length; i++) {\n markValues.push(Param_1.Param.serializeParameterValue(valueArr[i]));\n }\n }\n else {\n markValues.push(Param_1.Param.serializeParameterValue(value));\n }\n valueSelectionModel.qualifiedFieldCaption = fieldName;\n valueSelectionModel.selectValues = markValues;\n return valueSelectionModel;\n };\n /**\n * Method to transform the key value pair into range based selection pres model.\n *\n * TODO: Need to handle the parsing of date type values.\n *\n * @param valueSelectionModel\n * @param fieldName\n * @param value\n */\n SelectionServiceImpl.prototype.addToRangeParamsList = function (fieldName, value) {\n var rangeSelectionModel = new SelectionModels_1.RangeSelectionModel();\n rangeSelectionModel.qualifiedFieldCaption = fieldName;\n if (value.max !== undefined && value.max !== null) {\n rangeSelectionModel.maxValue = Param_1.Param.serializeParameterValue(value.max);\n }\n if (value.min !== undefined && value.min !== null) {\n rangeSelectionModel.minValue = Param_1.Param.serializeParameterValue(value.min);\n }\n rangeSelectionModel.included = this.validateNullOptionType(value.nullOption);\n return rangeSelectionModel;\n };\n /**\n * Method to validate the selection update type.\n *\n * @param selectionUpdateType\n */\n SelectionServiceImpl.prototype.validateSelectionUpdateType = function (selectionUpdateType) {\n if (selectionUpdateType === Contract.SelectionUpdateType.Replace) {\n return api_internal_contract_js_1.SelectionUpdateType.Replace;\n }\n else if (selectionUpdateType === Contract.SelectionUpdateType.Add) {\n return api_internal_contract_js_1.SelectionUpdateType.Add;\n }\n else if (selectionUpdateType === Contract.SelectionUpdateType.Remove) {\n return api_internal_contract_js_1.SelectionUpdateType.Remove;\n }\n return api_internal_contract_js_1.SelectionUpdateType.Replace;\n };\n /**\n * Method to validate the include type for range selection.\n *\n * @param nullOption\n */\n SelectionServiceImpl.prototype.validateNullOptionType = function (nullOption) {\n if (nullOption) {\n if (nullOption === Contract.FilterNullOption.NullValues) {\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNull;\n }\n else if (nullOption === Contract.FilterNullOption.NonNullValues) {\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNonNull;\n }\n else if (nullOption === Contract.FilterNullOption.AllValues) {\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll;\n }\n }\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll;\n };\n /**\n * Method to validate the select option.\n *\n * @param selectOption\n */\n SelectionServiceImpl.prototype.validateSelectOption = function (selectOption) {\n if (selectOption === Contract.SelectOptions.Simple) {\n return api_internal_contract_js_1.SelectOptions.Simple;\n }\n else if (selectOption === Contract.SelectOptions.Toggle) {\n return api_internal_contract_js_1.SelectOptions.Toggle;\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Only simple and toggle select options are currently supported');\n }\n };\n return SelectionServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.SelectionServiceImpl = SelectionServiceImpl;\n//# sourceMappingURL=SelectionServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar InternalToExternalEnumMappings_1 = require(\"../../EnumMappings/InternalToExternalEnumMappings\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar EnumConverter_1 = require(\"../../Utils/EnumConverter\");\n/**\n * Each ServceImpl should extend this base class for the sake of\n * proper error handling. This base handles the conversion\n * from internal errors to external errors that we throw to developers\n */\nvar ServiceImplBase = /** @class */ (function () {\n function ServiceImplBase(_dispatcher, _registryId) {\n this._dispatcher = _dispatcher;\n this._registryId = _registryId;\n }\n ServiceImplBase.prototype.execute = function (verb, params) {\n return this._dispatcher.execute(verb, params).catch(function (error) {\n // Any internal error that comes from the dispatcher should be converted\n // to an external error using the enum mapper for error codes.\n var internalError = error;\n var externalErrorCode = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.errorCode.convert(internalError.errorCode, EnumConverter_1.ShouldThrow.No);\n throw new TableauError_1.TableauError(externalErrorCode, internalError.message);\n });\n };\n return ServiceImplBase;\n}());\nexports.ServiceImplBase = ServiceImplBase;\n//# sourceMappingURL=ServiceImplBase.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar SizeServiceImpl = /** @class */ (function (_super) {\n __extends(SizeServiceImpl, _super);\n function SizeServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SizeServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"size-service\" /* Size */;\n },\n enumerable: true,\n configurable: true\n });\n SizeServiceImpl.prototype.changeSizeAsync = function (name, newSize) {\n var _a;\n var _b, _c, _d, _e;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeSizeAsync',\n _a[api_internal_contract_js_1.ParameterId.SheetName] = name,\n _a[api_internal_contract_js_1.ParameterId.MinHeight] = ((_b = newSize.minSize) === null || _b === void 0 ? void 0 : _b.height) || 0,\n _a[api_internal_contract_js_1.ParameterId.MinWidth] = ((_c = newSize.minSize) === null || _c === void 0 ? void 0 : _c.width) || 0,\n _a[api_internal_contract_js_1.ParameterId.MaxHeight] = ((_d = newSize.maxSize) === null || _d === void 0 ? void 0 : _d.height) || 0,\n _a[api_internal_contract_js_1.ParameterId.MaxWidth] = ((_e = newSize.maxSize) === null || _e === void 0 ? void 0 : _e.width) || 0,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SetSheetSize, parameters).then(function (_response) {\n return;\n });\n };\n return SizeServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.SizeServiceImpl = SizeServiceImpl;\n//# sourceMappingURL=SizeServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar StoryActivationServiceImpl = /** @class */ (function (_super) {\n __extends(StoryActivationServiceImpl, _super);\n function StoryActivationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(StoryActivationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"story-activation-service\" /* StoryActivation */;\n },\n enumerable: true,\n configurable: true\n });\n StoryActivationServiceImpl.prototype.activateNextStoryPointAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ActivateNextStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateNextStoryPointAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n StoryActivationServiceImpl.prototype.activatePreviousStoryPointAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ActivatePreviousStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activatePreviousStoryPointAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n StoryActivationServiceImpl.prototype.activateStoryPointAsync = function (index) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ActivateStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateStoryPointAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index;\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n StoryActivationServiceImpl.prototype.revertStoryPointAsync = function (index) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.RevertStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'revertStoryPointAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index;\n return this.execute(verb, parameters).then(function (response) {\n return response.result;\n });\n };\n return StoryActivationServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.StoryActivationServiceImpl = StoryActivationServiceImpl;\n//# sourceMappingURL=StoryActivationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar VisualModelServiceImpl = /** @class */ (function (_super) {\n __extends(VisualModelServiceImpl, _super);\n function VisualModelServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(VisualModelServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"visual-model-service\" /* VisualModel */;\n },\n enumerable: true,\n configurable: true\n });\n VisualModelServiceImpl.prototype.getVisualSpecificationAsync = function (visualId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getVisualSpecificationAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = visualId.worksheet,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetVisualSpecification, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n return VisualModelServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.VisualModelServiceImpl = VisualModelServiceImpl;\n//# sourceMappingURL=VisualModelServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar CustomViewImpl_1 = require(\"../../Impl/CustomViewImpl\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar VizServiceImpl = /** @class */ (function (_super) {\n __extends(VizServiceImpl, _super);\n function VizServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(VizServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"viz-service\" /* Viz */;\n },\n enumerable: true,\n configurable: true\n });\n VizServiceImpl.prototype.createVizImageAsync = function (inputSpec) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'createVizImageAsync',\n _a[api_internal_contract_js_1.ParameterId.VizAPIInputJson] = JSON.stringify(inputSpec),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.VizAPI, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n VizServiceImpl.prototype.activateSheetAsync = function (name) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateSheetAsync',\n _a[api_internal_contract_js_1.ParameterId.SwitchToSheetName] = name,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ActivateSheet, parameters).then(function () {\n return;\n });\n };\n VizServiceImpl.prototype.getCustomViewsAsync = function () {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCustomViewsAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetCustomViews, parameters).then(function (response) {\n var customViews = response.result;\n return customViews.map(function (customView) {\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n });\n };\n VizServiceImpl.prototype.showCustomViewAsync = function (customViewName) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'showCustomViewAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ShowCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.removeCustomViewAsync = function (customViewName) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeCustomViewAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.RemoveCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.saveCustomViewAsync = function (customViewName) {\n var _a;\n var _this = this;\n // CustomViewIsDefault is a required parameter, but our API has not been updated to allow it to be specified yet.\n // We should add a 'default' parameter to the interface.\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveCustomViewAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName,\n _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = false,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SaveWorkbookAsCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.setActiveCustomViewAsDefaultAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setActiveCustomViewAsDefaultAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SetActiveCustomViewAsDefault, parameters).then(function () {\n return;\n });\n };\n VizServiceImpl.prototype.saveAsync = function (customView) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewLuid] = customView.luid,\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customView.name,\n _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = customView.isDefault,\n _a[api_internal_contract_js_1.ParameterId.CustomViewIsPublic] = customView.shared,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.UpdateCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.getCurrentSrcAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCurrentSrcAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetCurrentSrc, parameters).then(function (response) { return response.result; });\n };\n return VizServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.VizServiceImpl = VizServiceImpl;\n//# sourceMappingURL=VizServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar ErrorHelpers_1 = require(\"../../Utils/ErrorHelpers\");\nvar Param_1 = require(\"../../Utils/Param\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ZoneServiceImpl = /** @class */ (function (_super) {\n __extends(ZoneServiceImpl, _super);\n function ZoneServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ZoneServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"zone-service\" /* Zone */;\n },\n enumerable: true,\n configurable: true\n });\n ZoneServiceImpl.prototype.setVisibilityAsync = function (dashboard, dashboardZoneMap, zoneVisibilityMap) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setVisibilityAsync',\n _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard,\n _a[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap] = {},\n _a);\n // zoneVisibilityMap can be either an object or a Map - convert it to a Map\n var parameterAsMap = Param_1.Param.convertParameterToMap(zoneVisibilityMap, 'zoneVisibilityMap');\n parameterAsMap.forEach(function (value, key) {\n ErrorHelpers_1.ErrorHelpers.verifyZoneIsValid(dashboardZoneMap, Number.parseInt(key, 10));\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(value, api_external_contract_js_1.DashboardObjectVisibilityType, 'DashboardObjectVisibilityType');\n parameters[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap][key] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setVisibilityType.convert(value);\n });\n return this.execute(api_internal_contract_js_1.VerbId.SetZoneVisibility, parameters).then(function (response) {\n return;\n });\n };\n ZoneServiceImpl.prototype.moveAndResizeAsync = function (dashboard, dashboardZoneMap, dashboardObjectPositionAndSizeUpdateArray) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard,\n _a[api_internal_contract_js_1.ParameterId.DashboardObjectPositionAndSizeUpdateList] = dashboardObjectPositionAndSizeUpdateArray,\n _a);\n dashboardObjectPositionAndSizeUpdateArray.forEach(function (dashboardObject) {\n ErrorHelpers_1.ErrorHelpers.verifyZoneIsValidAndFloating(dashboardZoneMap, dashboardObject.dashboardObjectID);\n ErrorHelpers_1.ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate(dashboardObject);\n });\n return this.execute(api_internal_contract_js_1.VerbId.MoveAndResizeZones, parameters).then(function (response) {\n return;\n });\n };\n return ZoneServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ZoneServiceImpl = ZoneServiceImpl;\n//# sourceMappingURL=ZoneServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of a table summary.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar TableSummary = /** @class */ (function () {\n function TableSummary(_tableInfo) {\n this._tableInfo = _tableInfo;\n }\n Object.defineProperty(TableSummary.prototype, \"name\", {\n get: function () {\n return this._tableInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableSummary.prototype, \"id\", {\n get: function () {\n return this._tableInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableSummary.prototype, \"connectionId\", {\n get: function () {\n return this._tableInfo.connectionId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableSummary.prototype, \"customSQL\", {\n get: function () {\n return this._tableInfo.customSQL;\n },\n enumerable: true,\n configurable: true\n });\n return TableSummary;\n}());\nexports.TableSummary = TableSummary;\n//# sourceMappingURL=TableSummary.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Custom error class that extends the default JavaScript Error object.\n * This allows us to provide a field with a specific error code\n * so that developers can more easily programmatically respond\n * to error scenarios.\n */\nvar TableauError = /** @class */ (function (_super) {\n __extends(TableauError, _super);\n function TableauError(_errorCode, message) {\n var _this = _super.call(this, _errorCode + \": \" + message) || this;\n _this._errorCode = _errorCode;\n /*tslint:disable-next-line */\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n // Error inheritance does not work propertly when compiling to ES5, this is a workaround to force\n // the proto chain to be built correctly. See the github link above for details.\n Object.setPrototypeOf(_this, TableauError.prototype);\n return _this;\n }\n Object.defineProperty(TableauError.prototype, \"errorCode\", {\n get: function () {\n return this._errorCode;\n },\n enumerable: true,\n configurable: true\n });\n return TableauError;\n}(Error));\nexports.TableauError = TableauError;\n//# sourceMappingURL=TableauError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar InternalContract = require(\"@tableau/api-internal-contract-js\");\nvar GetDataModels_1 = require(\"../Models/GetDataModels\");\n/**\n * In version 2 of the interface, we should collapse value into nativeValue, and do all this work over\n * in the platform.\n */\nvar DataValueFactory = /** @class */ (function () {\n function DataValueFactory() {\n }\n DataValueFactory.MakeParameterDataValue = function (internalDataValue, dataType) {\n // Parameter values are all strings, convert from string to value\n return new GetDataModels_1.DataValue(internalDataValue.value, InternalContract.DataTypeConverter.convertStringValueToNativeValue(internalDataValue.value, dataType), internalDataValue.formattedValue);\n };\n DataValueFactory.MakeFilterDataValue = function (internalDataValue) {\n // Filters already have native type in value, just use that for nativeValue also\n return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value, internalDataValue.formattedValue);\n };\n DataValueFactory.MakeTableDataValue = function (internalDataValue, dataType) {\n // DataTables contain boolean | number | string | date as string | '%null%\n // convertValueToNativeValue converts dates as string to dates, and any special to null\n // (boolean, numbers, strings are passed through)\n // Because of IncludeDataValuesOption - we can have undefined values, which are different than any special\n return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value !== undefined\n ? InternalContract.DataTypeConverter.convertValueToNativeValue(internalDataValue.value, dataType)\n : undefined, internalDataValue.formattedValue);\n };\n return DataValueFactory;\n}());\nexports.DataValueFactory = DataValueFactory;\n//# sourceMappingURL=DataValueFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A Promise wrapper class allowing for resolving/rejecting the Promise outside the context of its constructor.\n *\n * @export\n * @class Deferred\n * @template TResolve The type used to resolve the promise.\n * @template TReject The type used to reject the promise. Defaults to any.\n * @link https://stackoverflow.com/a/34637436\n */\nvar Deferred = /** @class */ (function () {\n /**\n * Creates an instance of Deferred.\n */\n function Deferred() {\n var _this = this;\n this._promise = new Promise(function (resolve, reject) {\n _this._resolve = resolve;\n _this._reject = reject;\n });\n }\n Object.defineProperty(Deferred.prototype, \"promise\", {\n /**\n * Gets the Promise.\n *\n * @readonly\n * @type {Promise}\n */\n get: function () {\n return this._promise;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resolves the wrapped Promise.\n *\n * @param {(TResolve | PromiseLike)} response The argument to be resolved by the Promise.\n * @returns {*} {void}\n */\n Deferred.prototype.resolve = function (response) {\n if (!this._resolve) {\n return;\n }\n this._resolve(response);\n };\n /**\n *\n *\n * @param {TReject} [reason] The reason why the Promise rejected.\n * @returns {*} {void}\n */\n Deferred.prototype.reject = function (reason) {\n if (!this._reject) {\n return;\n }\n this._reject(reason);\n };\n return Deferred;\n}());\nexports.Deferred = Deferred;\nexports.UnregisterTimeoutInMilliseconds = 30000;\n//# sourceMappingURL=Deferred.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\n/**\n * This class converts from a source enum value to destination enum\n * value given a mapping from source to destination when constructed.\n *\n * Note: This exact same class is defined in api-core. Given its small\n * nature, it is not worth having in a separate project to share this between\n * api-core and api-shared. If more utility functionality is added that is used by api-core\n * and api-shared but has no other dependecies, a utiltity project might be merited,\n * and this class could be moved.\n */\nvar EnumConverter = /** @class */ (function () {\n function EnumConverter(_mappings, _defaultVal) {\n this._mappings = _mappings;\n this._defaultVal = _defaultVal;\n }\n EnumConverter.prototype.convert = function (enumVal, throwIfMissing) {\n if (throwIfMissing === void 0) { throwIfMissing = ShouldThrow.Yes; }\n if (this._mappings.hasOwnProperty(enumVal)) {\n return this._mappings[enumVal];\n }\n if (this._defaultVal !== undefined && throwIfMissing !== ShouldThrow.Yes) {\n return this._defaultVal;\n }\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Enum Mapping not found for: \" + enumVal);\n };\n return EnumConverter;\n}());\nexports.EnumConverter = EnumConverter;\nvar ShouldThrow;\n(function (ShouldThrow) {\n ShouldThrow[\"Yes\"] = \"yes\";\n ShouldThrow[\"No\"] = \"no\";\n})(ShouldThrow = exports.ShouldThrow || (exports.ShouldThrow = {}));\n//# sourceMappingURL=EnumConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar Param_1 = require(\"./Param\");\n/**\n * This class is used to construct common errors throughout the external\n * projects (api-shared, extensions-api, etc.). It has some duplication with\n * the ErrorHelpers class in api-core, but is separate due to the need to throw\n * an external TableauError vs. an InternalTableauError.\n */\nvar ErrorHelpers = /** @class */ (function () {\n function ErrorHelpers() {\n }\n /**\n * Throws with code InternalError.\n *\n * @param apiName name of api that was called.\n */\n ErrorHelpers.apiNotImplemented = function (apiName) {\n return new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, apiName + \" API not yet implemented.\");\n };\n /**\n * Throws an internal error if argument is null or undefined.\n *\n * @param argumentValue value to verify\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyInternalValue = function (argumentValue, argumentName) {\n if (argumentValue === null || argumentValue === undefined) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, argumentValue + \" is invalid value for: \" + argumentName);\n }\n };\n /**\n * Throws an InvalidParameter error if argument is null or undefined.\n *\n * @param argumentValue value to verify\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyParameter = function (argumentValue, argumentName) {\n if (argumentValue === null || argumentValue === undefined) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + \" is invalid value for parameter: \" + argumentName);\n }\n };\n /**\n * Throws an InvalidParameter error if argument is not the specified type.\n * For objects, it just tests that it is an object\n *\n * @param argumentValue value to verify\n * @param expectedType expected result of typeof\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyParameterType = function (argumentValue, expectedType, argumentName) {\n if (typeof argumentValue !== expectedType) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + \" has invalid type for parameter: \" + argumentName + \".\");\n }\n };\n /**\n * Throws an InvalidParameter error if argument is empty string, null or undefined.\n *\n * @param argumentValue value to verify\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyStringParameter = function (argumentValue, argumentName) {\n if (argumentValue === null || argumentValue === undefined || argumentValue === '') {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + \" is invalid value for paramter: \" + argumentName);\n }\n };\n /**\n * Verifies passed value is a valid value for that enum.\n * Throws an InvalidParameter error if the enum value is not valid.\n *\n * String enums are {string : string} dictionaries which are not reverse mappable\n * This is an ugly workaround\n *\n * @param enumValue value to verify\n * @param enumType enum to verify against\n * @param enumName enum name for clear error message\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyEnumValue = function (enumValue, enumType, enumName) {\n var isValid = false;\n Object.keys(enumType).forEach(function (enumKey) {\n if (enumType[enumKey] === enumValue.toString()) {\n isValid = true;\n }\n });\n if (!isValid) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, enumValue + \" is invalid value for enum: \" + enumName + \".\");\n }\n };\n /**\n * Verifies passed value is between [min, max) ... min <= value < max\n * Throws an InvalidParameter error if the value is not valid.\n *\n *\n * @param value value to verify\n * @param min value must be >= min\n * @param max value must be < max\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyRange = function (value, min, max) {\n var isValid = min <= value && value < max;\n if (!isValid) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, value + \" is invalid value for range: [\" + min + \"..\" + max + \")\");\n }\n };\n /**\n * Verifies the params min and max for applying range filter.\n * Throws with error code InvalidParameter if range is invalid.\n *\n * @param min range min\n * @param max range max\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyRangeParamType = function (min, max) {\n if (!min && !max) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, at least one of min or max is required.');\n }\n if (min && !Param_1.Param.isTypeNumber(min) && !Param_1.Param.isTypeDate(min)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter min.');\n }\n if (max && !Param_1.Param.isTypeNumber(max) && !Param_1.Param.isTypeDate(max)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter max.');\n }\n if (min && max && typeof min !== typeof max) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, parameters min and max should be of the same type.');\n }\n };\n /**\n * Verifies that the zoneId is present in the current dashboard.\n * Throws with error code InvalidParameter if either condition is false.\n *\n * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object.\n * @param zoneID ZoneId to be validated\n */\n ErrorHelpers.verifyZoneIsValid = function (dashboardZoneMap, zoneID) {\n if (dashboardZoneMap.has(zoneID)) {\n return;\n }\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, \"Unexpected invalid param value, Dashboard Object Id: \" + zoneID + \" is not present in dashboard.\");\n };\n /**\n * Verifies that the zone is present and floating in the current dashboard.\n * Throws with error code InvalidParameter if either condition is false.\n *\n * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object.\n * @param zoneID ZoneId to be validated\n */\n ErrorHelpers.verifyZoneIsValidAndFloating = function (dashboardZoneMap, zoneID) {\n if (dashboardZoneMap.has(zoneID) && dashboardZoneMap.get(zoneID).isFloating) {\n return;\n }\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, \"Unexpected invalid param value, Dashboard Object Id: \" + zoneID + \" is not present or is a fixed zone in the dashboard.\");\n };\n /**\n * Verifies that width and height are > 0 for each DashboardObjectPositionAndSizeUpdate object.\n * Throws with error code InvalidParameter if either condition is false.\n *\n * @param dashboardObjectPositionAndSizeUpdate DashboardObjectPositionAndSizeUpdate object for which width and height will be validated\n */\n ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate = function (dashboardObjectPositionAndSizeUpdate) {\n if (dashboardObjectPositionAndSizeUpdate.width < 0 || dashboardObjectPositionAndSizeUpdate.height < 0) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, \"Unexpected invalid param value for dashboard object ID \" + dashboardObjectPositionAndSizeUpdate.dashboardObjectID + \":\" +\n \" negative widths and heights are not allowed.\");\n }\n };\n /**\n * Verifies is the given sheet name is in the list of sheets names allowed for exporting.\n * Throws with error code InvalidParameter if the condition above is false.\n *\n * @param exportableSheetNames A list of sheet names allowed for exporting\n * @param sheetName the name of the sheet selected for export\n */\n ErrorHelpers.verifySheetName = function (exportableSheetNames, sheetName) {\n if (!exportableSheetNames.includes(sheetName)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidSelectionSheet, 'sheetName parameter must belong to a worksheet within the current view');\n }\n };\n /**\n * Verifies the ExportDataOptions object\n * Throws with error code InvalidParameter if the parameter is not of ExportDataOptions type.\n *\n * @param options The ExportDataOptions object used to configure the output CSV file for exportDataAsync.\n */\n ErrorHelpers.verifyExportDataOptions = function (options) {\n if ((!Param_1.Param.isNullOrUndefined(options.ignoreAliases) && !Param_1.Param.isTypeBool(options.ignoreAliases)) ||\n (!Param_1.Param.isNullOrUndefined(options.columnsToIncludeById) && !Array.isArray(options.columnsToIncludeById)))\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'options paramater must be of type ExportDataOptions');\n };\n /**\n * Verifies if the sheet names are included in any of the export scenarios.\n * Throws with error code InvalidParameter if the parameter is not an array.\n * Throws with error code InvalidSelectionSheet if there are array entries that dont exist or if there is mixing between sheets from the dashboard and sheet from the workbook.\n *\n * @param sheetNames List of sheet names selected for exporting.\n * @param exportScenarios an object containing the current sheet name, exportable sheets from the dashboard, and exportable sheets from the workbook.\n */\n ErrorHelpers.verifySheetNamesForPDFAndPPT = function (sheetNames, exportScenarios) {\n if (!Array.isArray(sheetNames))\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'sheetNames parameter must be an array');\n if (sheetNames.length === 0)\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'sheetNames should not be empty');\n var isIncludedInDashboard = sheetNames.every(function (sheetName) {\n return exportScenarios.exportableSheetNamesFromDashboard.includes(sheetName);\n });\n if (isIncludedInDashboard) {\n return;\n }\n var isIncludedInWorkbook = sheetNames.every(function (sheetName) {\n return exportScenarios.exportableSheetNamesFromWorkbook.includes(sheetName);\n });\n if (isIncludedInWorkbook) {\n return;\n }\n var isCurrentSheet = sheetNames.length === 1 && sheetNames[0] === exportScenarios.currentSheetName;\n if (isCurrentSheet) {\n return;\n }\n // Export requirement: all sheet names must be included in the list of exportable sheets in the dashboard or\n // all sheet names must be included in the list of exportable sheets in the workbook, or the sheet name is the current sheet\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidSelectionSheet, 'sheetNames parameter must have all its entries be exportable sheet names from the dashboard or all its entries be exportable sheet names from the workbook');\n };\n /**\n * Verifies the external ExportPDFOptions object's properties.\n * Throws with error code InvalidParameter if the parameter is not of external ExportPDFOptions type.\n *\n * @param options The external user-facing ExportPDFOptions object used to configure the output PDF file for exportPDFAsync.\n */\n ErrorHelpers.verifyExportPDFOptions = function (options) {\n try {\n this.verifyEnumValue(options.orientation, api_external_contract_js_1.PrintOrientation, 'PrintOrientation');\n this.verifyEnumValue(options.pageSize, api_external_contract_js_1.PrintPageSize, 'PrintPageSize');\n this.verifyEnumValue(options.scaling, api_external_contract_js_1.PrintScaling, 'PrintScaling');\n }\n catch (_a) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'options parameter must be of type ExportPDFOptions');\n }\n };\n return ErrorHelpers;\n}());\nexports.ErrorHelpers = ErrorHelpers;\n//# sourceMappingURL=ErrorHelpers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\n/**\n * Helper methods for Export APIs.\n *\n * @class ExportHelpers\n */\nvar ExportHelpers = /** @class */ (function () {\n function ExportHelpers() {\n }\n /**\n * Modifies the internal ExportPDFOptions' properties based on the given PDF export configuration.\n * This method will construct the internal ExportPDFOptions identically to how the 'Export PDF' dialog constructs the ExportPdfOptionsPresModel.\n * See the handleExportClick method in @browser-clients/export-pdf-options-dialog for reference.\n *\n * @param internalExportPdfOptions The internal ExportPDFOptions pres model used to configure the output PDF file.\n * @param externalExportPdfOptions The external ExportPDFOptions user-facing object passed to exportPDFAsync.\n * @param sheetNames The list of sheets selected for export.\n */\n ExportHelpers.updateInternalExportPDFOptions = function (internalExportPdfOptions, externalExportPdfOptions, sheetNames) {\n internalExportPdfOptions.currentSheet = sheetNames[0];\n this.updateExportLayoutOptions(internalExportPdfOptions, externalExportPdfOptions);\n this.updateSheetOptions(internalExportPdfOptions, sheetNames);\n };\n /**\n * Helper method for updateInternalExportPDFOptions.\n * Modifies the exportLayoutOptions property of the internal ExportPDFOptions based on the external ExportPDFOptions.\n * See the getExportLayoutOptions method in @browser-clients/export-pdf-options-dialog for reference.\n *\n * @param internalExportPdfOptions The internal ExportPDFOptions pres model used to configure the output PDF file.\n * @param externalExportPdfOptions The external ExportPDFOptions user-facing object passed to exportPDFAsync.\n */\n ExportHelpers.updateExportLayoutOptions = function (internalExportPdfOptions, externalExportPdfOptions) {\n var exportLayoutOptions = internalExportPdfOptions.exportLayoutOptions;\n // setting the image height and width properties to their default values\n exportLayoutOptions.imageHeight = this.DefaultLayoutOptions.imageHeight;\n exportLayoutOptions.imageWidth = this.DefaultLayoutOptions.imageWidth;\n // setting the orientation value for the exportLayoutOptions\n switch (externalExportPdfOptions.orientation) {\n case api_external_contract_js_1.PrintOrientation.Landscape:\n exportLayoutOptions.pageOrientationOption = api_internal_contract_js_1.PageOrientation.Landscape;\n break;\n case api_external_contract_js_1.PrintOrientation.Portrait:\n exportLayoutOptions.pageOrientationOption = api_internal_contract_js_1.PageOrientation.Portrait;\n break;\n default:\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'invalid orientation for ExportPDFOption');\n }\n // setting the page size value for the exportLayoutOptions\n switch (externalExportPdfOptions.pageSize) {\n case api_external_contract_js_1.PrintPageSize.A3:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.A3;\n break;\n case api_external_contract_js_1.PrintPageSize.A4:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.A4;\n break;\n case api_external_contract_js_1.PrintPageSize.A5:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.A5;\n break;\n case api_external_contract_js_1.PrintPageSize.B4:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.B4;\n break;\n case api_external_contract_js_1.PrintPageSize.B5:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.B5;\n break;\n case api_external_contract_js_1.PrintPageSize.Executive:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Executive;\n break;\n case api_external_contract_js_1.PrintPageSize.Folio:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Folio;\n break;\n case api_external_contract_js_1.PrintPageSize.Ledger:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Ledger;\n break;\n case api_external_contract_js_1.PrintPageSize.Legal:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Legal;\n break;\n case api_external_contract_js_1.PrintPageSize.Letter:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Letter;\n break;\n case api_external_contract_js_1.PrintPageSize.Note:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Note;\n break;\n case api_external_contract_js_1.PrintPageSize.Quarto:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Quarto;\n break;\n case api_external_contract_js_1.PrintPageSize.Statement:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Statement;\n break;\n case api_external_contract_js_1.PrintPageSize.Tabloid:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Tabloid;\n break;\n case api_external_contract_js_1.PrintPageSize.Unspecified:\n exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Unspecified;\n break;\n default:\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'invalid pageSize for ExportPDFOption');\n }\n // setting the scaling values for the exportLayoutOptions\n switch (externalExportPdfOptions.scaling) {\n case api_external_contract_js_1.PrintScaling.AtMost1PageHigh:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitOneHigh);\n break;\n case api_external_contract_js_1.PrintScaling.AtMost1PageWide:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitOneWide);\n break;\n case api_external_contract_js_1.PrintScaling.AtMost2PagesHigh:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitTwoHigh);\n break;\n case api_external_contract_js_1.PrintScaling.AtMost2PagesWide:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitTwoWide);\n break;\n case api_external_contract_js_1.PrintScaling.Automatic:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePctAuto);\n break;\n case api_external_contract_js_1.PrintScaling.Perc100:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct100);\n break;\n case api_external_contract_js_1.PrintScaling.Perc200:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct200);\n break;\n case api_external_contract_js_1.PrintScaling.Perc25:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct25);\n break;\n case api_external_contract_js_1.PrintScaling.Perc400:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct400);\n break;\n case api_external_contract_js_1.PrintScaling.Perc50:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct50);\n break;\n case api_external_contract_js_1.PrintScaling.Perc60:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct60);\n break;\n case api_external_contract_js_1.PrintScaling.Perc75:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct75);\n break;\n case api_external_contract_js_1.PrintScaling.Perc80:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct80);\n break;\n case api_external_contract_js_1.PrintScaling.Perc90:\n this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct90);\n break;\n default:\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'invalid scaling for ExportPDFOption');\n }\n };\n /**\n * Helper method for updateInternalExportPDFOptions.\n * Modifies the sheetOptions property of the internal ExportPDFOptions based on the sheets selected for export.\n * See the handleExportClick method in @browser-clients/export-pdf-options-dialog for reference.\n *\n * @param internalExportPdfOptions The internal ExportPDFOptions pres model used to configure the output PDF file.\n * @param sheetNames The list of sheets selected for export.\n */\n ExportHelpers.updateSheetOptions = function (internalExportPdfOptions, sheetNames) {\n var exportLayoutOptions = internalExportPdfOptions.exportLayoutOptions, sheetOptions = internalExportPdfOptions.sheetOptions;\n // updating the export layouts options for each sheet and selecting sheet for export if included in list\n for (var _i = 0, sheetOptions_1 = sheetOptions; _i < sheetOptions_1.length; _i++) {\n var sheetOption = sheetOptions_1[_i];\n sheetOption.exportLayoutOptions = exportLayoutOptions;\n sheetOption.isSelected = sheetNames.includes(sheetOption.sheet);\n }\n };\n /**\n * Helper method for updateExportLayoutOptons.\n * This method is a spoof of the getFitAndScaleValues method used in @browser-clients/export-pdf-options to set the exportLayoutOptions' scaling properties.\n * In the future, this file should be refactored to import the method directly from @browser-clients/export-pdf-options.\n *\n * @param scalingSelection string used for setting the exportLayoutOptions based on the PrintScaling property from the ExternalExportPDFOptions.\n * @param exportLayoutOptions the ExportLayoutOptions used by the internal ExportPDFOptions pres model.\n */\n ExportHelpers.setFitAndScaleValues = function (exportLayoutOptions, scalingSelection) {\n var _a;\n var _b = this.DefaultLayoutOptions, pageFitHorizontal = _b.pageFitHorizontal, pageFitVertical = _b.pageFitVertical, pageScaleMode = _b.pageScaleMode, pageScalePercent = _b.pageScalePercent;\n var fitMatch = this.fitRegex.exec(scalingSelection);\n var percentMatch = this.pctRegex.exec(scalingSelection);\n if (fitMatch) {\n _a = fitMatch.slice(1).map(function (value) { return Number(value); }), pageFitHorizontal = _a[0], pageFitVertical = _a[1];\n pageScaleMode = api_internal_contract_js_1.ScaleMode.ScaleFitPages;\n }\n else if (percentMatch) {\n pageScalePercent = percentMatch.slice(1).map(function (value) { return Number(value); })[0];\n pageScaleMode = api_internal_contract_js_1.ScaleMode.ScalePercentage;\n }\n // getFitAndScaleValues returns the properties below, but instead this method will set them.\n exportLayoutOptions.pageFitHorizontal = pageFitHorizontal;\n exportLayoutOptions.pageFitVertical = pageFitVertical;\n exportLayoutOptions.pageScaleMode = pageScaleMode;\n exportLayoutOptions.pageScalePercent = pageScalePercent;\n };\n ExportHelpers.DefaultDataOptions = {\n ignoreAliases: false,\n columnsToIncludeById: [],\n };\n ExportHelpers.DefaultPDFOptions = {\n scaling: api_external_contract_js_1.PrintScaling.Automatic,\n pageSize: api_external_contract_js_1.PrintPageSize.Letter,\n orientation: api_external_contract_js_1.PrintOrientation.Portrait,\n };\n ExportHelpers.DefaultLayoutOptions = {\n imageHeight: 0,\n imageWidth: 0,\n pageFitHorizontal: 1,\n pageFitVertical: 1,\n pageOrientationOption: api_internal_contract_js_1.PageOrientation.Portrait,\n pageScaleMode: api_internal_contract_js_1.ScaleMode.ScaleAuto,\n pageScalePercent: 100,\n pageSizeOption: api_internal_contract_js_1.PageSizeOption.Letter,\n };\n ExportHelpers.fitRegex = new RegExp('fit([0-9]+)x([0-9]+)');\n ExportHelpers.pctRegex = new RegExp('pct([0-9]+)');\n return ExportHelpers;\n}());\nexports.ExportHelpers = ExportHelpers;\n//# sourceMappingURL=ExportHelpers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"./ErrorHelpers\");\nvar Param = /** @class */ (function () {\n function Param() {\n }\n /**\n * serializes the date into the format that the server expects.\n * @param date the date to serialize\n */\n Param.serializeDateForPlatform = function (date) {\n var year = date.getUTCFullYear();\n var month = date.getUTCMonth() + 1;\n var day = date.getUTCDate();\n var hh = date.getUTCHours();\n var mm = date.getUTCMinutes();\n var sec = date.getUTCSeconds();\n return year + \"-\" + month + \"-\" + day + \" \" + hh + \":\" + mm + \":\" + sec;\n };\n Param.serializeBooleanForPlatform = function (bool) {\n return bool ? 'true' : 'false';\n };\n Param.serializeNumberForPlatform = function (num) {\n return num.toString(10);\n };\n /**\n * Verifies the input is a number\n */\n /* tslint:disable-next-line:no-any */\n Param.isTypeNumber = function (input) {\n return typeof input === 'number' || input instanceof Number;\n };\n /**\n * Verifies the input is a Date\n */\n /* tslint:disable-next-line:no-any */\n Param.isTypeDate = function (input) {\n return input instanceof Date;\n };\n /* tslint:disable-next-line:no-any */\n Param.isTypeString = function (input) {\n return typeof input === 'string' || input instanceof String;\n };\n /* tslint:disable-next-line:no-any */\n Param.isTypeBool = function (input) {\n return typeof input === 'boolean' || input instanceof Boolean;\n };\n /**\n * Determines if the input is null or undefined\n */\n /* tslint:disable-next-line:no-any */\n Param.isNullOrUndefined = function (input) {\n return input === null || input === undefined;\n };\n /* tslint:disable-next-line:no-any */\n Param.serializeParameterValue = function (value) {\n if (Param.isTypeNumber(value)) {\n return Param.serializeNumberForPlatform(value);\n }\n else if (Param.isTypeDate(value)) {\n return Param.serializeDateForPlatform(value);\n }\n else if (Param.isTypeBool(value)) {\n return Param.serializeBooleanForPlatform(value);\n }\n else if (Param.isTypeString(value)) {\n return value;\n }\n else {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Unexpected invalid value for: \" + value);\n }\n };\n /**\n * Verifies that the parameter is already a Map, or converts an object to a Map.\n * If the parameter is an object, we convert it to a Map using Object.entries.\n * @throws if the parameter is not an object or Map\n */\n // tslint:disable-next-line:no-any\n Param.convertParameterToMap = function (param, paramName) {\n ErrorHelpers_1.ErrorHelpers.verifyParameterType(param, 'object', paramName);\n if (Array.isArray(param)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, \"Expecting object or Map for: \" + paramName + \".\");\n }\n return param instanceof Map ? param : new Map(Object.entries(param));\n };\n /* tslint:disable-next-line:no-any */\n Param.tryParseNumber = function (value) {\n if (Param.isNullOrUndefined(value)) {\n return { success: false };\n }\n if (Param.isTypeNumber(value)) {\n return { parsed: value, success: true };\n }\n var valueString = value.toString();\n if (valueString === 'NaN') {\n // 'NaN' parses as NaN which is indistinguishable from a failed parse.\n return { parsed: NaN, success: true };\n }\n var parsed = parseFloat(valueString);\n if (isNaN(parsed)) {\n return { success: false };\n }\n return { parsed: parsed, success: true };\n };\n return Param;\n}());\nexports.Param = Param;\n//# sourceMappingURL=Param.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar SheetUtils = /** @class */ (function () {\n function SheetUtils() {\n }\n // This is a direct port from SheetSize.cs - SheetSizeFactory\n SheetUtils.getSheetSizeFromSizeConstraints = function (sizeConstraint) {\n var minWidth = sizeConstraint.minWidth, minHeight = sizeConstraint.minHeight, maxWidth = sizeConstraint.maxWidth, maxHeight = sizeConstraint.maxHeight;\n if (minHeight === 0 && minWidth === 0) {\n if (maxHeight === 0 && maxWidth === 0) {\n return {\n behavior: Contract.SheetSizeBehavior.Automatic,\n };\n }\n return {\n behavior: Contract.SheetSizeBehavior.AtMost,\n maxSize: { width: maxWidth, height: maxHeight },\n };\n }\n if (maxHeight === 0 && maxWidth === 0) {\n return {\n behavior: Contract.SheetSizeBehavior.AtLeast,\n minSize: { width: minWidth, height: minHeight },\n };\n }\n if (maxHeight === minHeight && maxWidth === minWidth && minWidth > 0) {\n return {\n behavior: Contract.SheetSizeBehavior.Exactly,\n minSize: { width: minWidth, height: minHeight },\n maxSize: { width: minWidth, height: minHeight },\n };\n }\n // 'Fit Width' for a DSD layout\n var isDsdLayout = minWidth === 0 && maxWidth === 0;\n return {\n behavior: Contract.SheetSizeBehavior.Range,\n minSize: { width: minWidth, height: minHeight },\n maxSize: { width: isDsdLayout ? 2147483647 : maxWidth, height: maxHeight },\n };\n };\n SheetUtils.createAutomaticSize = function () {\n var behavior = Contract.SheetSizeBehavior.Automatic;\n var minSize = { width: 0, height: 0 };\n var maxSize = { width: 0, height: 0 };\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n };\n SheetUtils.getPublishedSheetInfoByName = function (name, sheetInfos) {\n var sheetInfo = sheetInfos.find(function (sheet) { return sheet.name === name; });\n return sheetInfo;\n };\n SheetUtils.getSheetTypeEnum = function (internalSheetType) {\n var sheetType;\n switch (internalSheetType) {\n case api_internal_contract_js_1.SheetType.Worksheet: {\n sheetType = Contract.SheetType.Worksheet;\n break;\n }\n case api_internal_contract_js_1.SheetType.Dashboard: {\n sheetType = Contract.SheetType.Dashboard;\n break;\n }\n case api_internal_contract_js_1.SheetType.Story: {\n sheetType = Contract.SheetType.Story;\n break;\n }\n default: {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType');\n }\n }\n return sheetType;\n };\n SheetUtils.isValidSheetSize = function (sizeObject) {\n return sizeObject.behavior !== undefined;\n };\n return SheetUtils;\n}());\nexports.SheetUtils = SheetUtils;\n//# sourceMappingURL=SheetUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar Deferred_1 = require(\"./Deferred\");\n/**\n * A Deferred wrapper class adding functionality to reject unresponsive promises after timeout\n *\n * this class handles two things:\n\n * 1. Adds timeout logic for deferred\n * 2. It blocks multiple calls from executing at the same time.\n *\n * @export\n * @class ShortLivedDeferred\n * @template TResolve The type used to resolve the promise.\n * @template TReject The type used to reject the promise. Defaults to any.\n *\n */\nvar ShortLivedDeferred = /** @class */ (function () {\n function ShortLivedDeferred(_timeoutInMilliseconds) {\n if (_timeoutInMilliseconds === void 0) { _timeoutInMilliseconds = Deferred_1.UnregisterTimeoutInMilliseconds; }\n this._timeoutInMilliseconds = _timeoutInMilliseconds;\n }\n ShortLivedDeferred.prototype.getNewPromiseOrThrowIfBusy = function () {\n var _this = this;\n if (this._deferred) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ApiExecutionError, 'This api cannot be executed till previous call is resolved.');\n }\n this._deferred = new Deferred_1.Deferred();\n this._timeoutId = setTimeout(function () {\n var error = new TableauError_1.TableauError(Contract.SharedErrorCodes.Timeout, \"Api failed to complete in \" + _this._timeoutInMilliseconds / 1000 + \" seconds\");\n _this.reject(error);\n }, this._timeoutInMilliseconds);\n return this._deferred.promise;\n };\n ShortLivedDeferred.prototype.resolve = function (response) {\n if (this._deferred) {\n clearTimeout(this._timeoutId);\n this._deferred.resolve(response);\n this._deferred = undefined;\n }\n };\n ShortLivedDeferred.prototype.reject = function (error) {\n if (this._deferred) {\n clearTimeout(this._timeoutId);\n this._deferred.reject(error);\n this._deferred = undefined;\n }\n };\n return ShortLivedDeferred;\n}());\nexports.ShortLivedDeferred = ShortLivedDeferred;\n//# sourceMappingURL=ShortLivedDeferred.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"./TableauError\");\n/**\n * Represents the current version of the extensions, embedding\n * and extensions-api-types library\n */\nvar VersionNumber = /** @class */ (function () {\n // private constructor so everyone uses the singleton instance\n // build numbers have this form: M.m.f-pre.N\n function VersionNumber(versionString, isAlpha) {\n var partStr = versionString.split('-');\n this.build = this.getBuildNumber(partStr[1]);\n versionString = partStr[0];\n var parts = versionString.split('.').map(function (p) { return parseInt(p, 10); });\n if (parts.length !== 3) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Invalid version number: \" + versionString);\n }\n this.major = parts[0];\n this.minor = parts[1];\n this.fix = parts[2];\n this.isAlpha = isAlpha;\n }\n VersionNumber.prototype.getBuildNumber = function (preReleaseString) {\n var noBuildNumber = -1;\n if (!preReleaseString) {\n return noBuildNumber;\n }\n // The preRelease string has this form: pre.N, but we don't depend on the actual string being 'pre'\n var partStr = preReleaseString.split('.');\n return partStr[1] ? parseInt(partStr[1], 10) : noBuildNumber;\n };\n Object.defineProperty(VersionNumber.prototype, \"formattedValue\", {\n get: function () {\n return this.major + \".\" + this.minor + \".\" + this.fix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(VersionNumber.prototype, \"fullFormattedValue\", {\n get: function () {\n return this.major + \".\" + this.minor + \".\" + this.fix + \"-pre.\" + this.build;\n },\n enumerable: true,\n configurable: true\n });\n return VersionNumber;\n}());\nexports.VersionNumber = VersionNumber;\n//# sourceMappingURL=VersionNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\n/**\n * Implementation of the InternalApiDispatcher which supports upgrading and downgrading the input\n * internal contract to the version that this module is built against\n *\n * @class VersionedExternalApiDispatcher\n * @implements {InternalApiDispatcher}\n */\nvar VersionedExternalApiDispatcher = /** @class */ (function () {\n /**\n * Creates a new instance of the VersionedExternalApiDispatcher\n * We have multiple version converting dispatchers that work together.\n * If needed, the VersionedExternalApiDispatcher wraps either the InternalApiDispatcher (desktop)\n * or the CrossFrameDispatcher (server).\n * The Internal/CrossFrame dispatchers handle an updated platform with an older external library.\n * (The CrossFrameDispatcher sends messages across the frame, and it is handled by the PresLayerHandler.)\n * Meanwhile, the VersionedExternalApiDispatcher handles an updated external library with an older platform.\n \n * @param _apiDelegateDispatcher The delegate that does the actual work.\n * @param platformVersionNumber The version of the internal contract which the platform module is using.\n * This number will be used to figure out how to downgrade incoming commands and upgrade the results\n */\n function VersionedExternalApiDispatcher(_apiDelegateDispatcher, platformVersionNumber) {\n var _this = this;\n this._apiDelegateDispatcher = _apiDelegateDispatcher;\n this._versionConverter = api_internal_contract_js_1.CreateExternalCompatibleVersionConverter(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, platformVersionNumber);\n this._notificationHandlers = [];\n _apiDelegateDispatcher.registerNotificationHandler(function (notification) {\n if (_this._notificationHandlers.length === 0) {\n return;\n }\n var upgradedNotification = _this._versionConverter.upgradeNotification(notification);\n _this._notificationHandlers.forEach(function (handler) {\n handler(upgradedNotification);\n });\n });\n }\n VersionedExternalApiDispatcher.needsVersionConverter = function (platformVersion) {\n // If our platform is less than external library version, then we need a converter\n return api_internal_contract_js_1.VersionLessThan(platformVersion, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION);\n };\n VersionedExternalApiDispatcher.prototype.execute = function (verb, parameters) {\n var _this = this;\n try {\n var downgradeParameters = this._versionConverter.downgradeExecuteCall(verb, parameters);\n return this._apiDelegateDispatcher.execute(downgradeParameters.verb, downgradeParameters.parameters).then(function (response) {\n var upgradeResponse = _this._versionConverter.upgradeExecuteReturn(response, verb, parameters);\n return upgradeResponse;\n });\n }\n catch (e) {\n return Promise.reject(e);\n }\n };\n VersionedExternalApiDispatcher.prototype.registerNotificationHandler = function (handler) {\n this._notificationHandlers.push(handler);\n };\n VersionedExternalApiDispatcher.prototype.unregisterNotificationHandler = function (handler) {\n this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; });\n };\n return VersionedExternalApiDispatcher;\n}());\nexports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher;\n//# sourceMappingURL=VersionedExternalApiDispatcher.js.map","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","\"use strict\";\n/**\n * This is your main. This is where you re-export everything you want to be publicly available.\n *\n * The build enforces that the file has the same name as the global variable that is exported.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// The following polyfills are needed for IE11\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nrequire(\"core-js/es/array/find\");\nrequire(\"core-js/es/array/from\");\nrequire(\"core-js/es/map\");\nrequire(\"core-js/es/number/is-integer\");\nrequire(\"core-js/es/number/is-nan\");\nrequire(\"core-js/es/number/parse-float\");\nrequire(\"core-js/es/number/parse-int\");\nrequire(\"core-js/es/object/assign\");\nrequire(\"core-js/es/object/entries\");\nrequire(\"core-js/es/object/set-prototype-of\");\nrequire(\"core-js/es/promise\");\n// Due to the way we configured webpack, we should be exporting things which will be under\n// a global variable called \"tableau\". Export everything we want to be visible under tableau\n// from this file.\nvar ExtensionsImpl_1 = require(\"./ExtensionsApi/Impl/ExtensionsImpl\");\nvar Extensions_1 = require(\"./ExtensionsApi/Namespaces/Extensions\");\nvar isAlpha = typeof VERSION_IS_ALPHA !== 'undefined' ? VERSION_IS_ALPHA : false;\napi_shared_js_1.ApiVersion.SetVersionNumber(typeof API_VERSION_NUMBER !== 'undefined' ? API_VERSION_NUMBER : '0.0.0', isAlpha);\nvar extensionImpl = new ExtensionsImpl_1.ExtensionsImpl();\nexports.extensions = new Extensions_1.Extensions(extensionImpl);\n// Export Enums\n// These show up under the tableau object. I.e. tableau.ExtensionContext.Server\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nexports.AnalyticsObjectType = api_external_contract_js_1.AnalyticsObjectType;\nexports.AnnotationType = api_external_contract_js_1.AnnotationType;\nexports.ClassNameKey = api_external_contract_js_1.ClassNameKey;\nexports.ColumnType = api_external_contract_js_1.ColumnType;\nexports.DashboardLayoutChange = api_external_contract_js_1.DashboardLayoutChange;\nexports.DashboardObjectType = api_external_contract_js_1.DashboardObjectType;\nexports.DashboardObjectVisibilityType = api_external_contract_js_1.DashboardObjectVisibilityType;\nexports.DataType = api_external_contract_js_1.DataType;\nexports.DateRangeType = api_external_contract_js_1.DateRangeType;\nexports.DialogStyle = api_external_contract_js_1.DialogStyle;\nexports.EncodingType = api_external_contract_js_1.EncodingType;\nexports.ErrorCodes = api_external_contract_js_1.ErrorCodes;\nexports.ExtensionContext = api_external_contract_js_1.ExtensionContext;\nexports.ExtensionMode = api_external_contract_js_1.ExtensionMode;\nexports.FieldAggregationType = api_external_contract_js_1.FieldAggregationType;\nexports.FieldRoleType = api_external_contract_js_1.FieldRoleType;\nexports.FilterDomainType = api_external_contract_js_1.FilterDomainType;\nexports.FilterNullOption = api_external_contract_js_1.FilterNullOption;\nexports.FilterType = api_external_contract_js_1.FilterType;\nexports.FilterUpdateType = api_external_contract_js_1.FilterUpdateType;\nexports.HierarchicalLevelSelectionState = api_external_contract_js_1.HierarchicalLevelSelectionState;\nexports.IncludeDataValuesOption = api_external_contract_js_1.IncludeDataValuesOption;\nexports.MarkType = api_external_contract_js_1.MarkType;\nexports.ParameterValueType = api_external_contract_js_1.ParameterValueType;\nexports.PeriodType = api_external_contract_js_1.PeriodType;\nexports.QuickTableCalcType = api_external_contract_js_1.QuickTableCalcType;\nexports.ReplaySpeedType = api_external_contract_js_1.ReplaySpeedType;\nexports.SelectOptions = api_external_contract_js_1.SelectOptions;\nexports.SelectionUpdateType = api_external_contract_js_1.SelectionUpdateType;\nexports.SheetType = api_external_contract_js_1.SheetType;\nexports.SortDirection = api_external_contract_js_1.SortDirection;\nexports.TableauEventType = api_external_contract_js_1.TableauEventType;\nexports.TrendLineModelType = api_external_contract_js_1.TrendLineModelType;\nexports.VizImageEncodingType = api_external_contract_js_1.VizImageEncodingType;\nexports.VizImagePaletteType = api_external_contract_js_1.VizImagePaletteType;\nexports.VizImageSizeSettingAlignmentType = api_external_contract_js_1.VizImageSizeSettingAlignmentType;\nexports.VizImageSizeSettingType = api_external_contract_js_1.VizImageSizeSettingType;\nexports.VizImageSortDirectionType = api_external_contract_js_1.VizImageSortDirectionType;\nexports.ZoneVisibilityType = api_external_contract_js_1.ZoneVisibilityType;\n//# sourceMappingURL=ExtensionsApi.js.map"],"names":["entryUnbind","module","exports","path","Array","from","Map","Number","isInteger","isNaN","parseFloat","parseInt","Object","assign","entries","setPrototypeOf","Promise","global","isCallable","tryToString","TypeError","argument","isConstructor","String","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","prototype","undefined","f","configurable","value","key","isPrototypeOf","it","Prototype","isObject","bind","call","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","lengthOfArrayLike","createProperty","getIterator","getIteratorMethod","arrayLike","O","IS_CONSTRUCTOR","this","argumentsLength","arguments","length","mapfn","mapping","result","step","iterator","next","iteratorMethod","index","done","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","el","fromIndex","includes","indexOf","uncurryThis","IndexedObject","arraySpeciesCreate","push","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","that","specificCreate","self","boundFunction","target","forEach","map","filter","some","every","find","findIndex","filterReject","slice","isArray","SPECIES","originalArray","C","constructor","arraySpeciesConstructor","anObject","iteratorClose","fn","ENTRIES","error","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","arraySlice","replace","split","join","TEST","Error","stack","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","test","IS_FIREFOX_OR_SAFARI_STACK","dropEntries","defineProperty","redefineAll","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","set","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","ADDER","Constructor","iterable","type","first","last","size","AS_ENTRIES","getInternalState","define","previous","state","entry","getEntry","removed","clear","data","prev","has","get","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","$","isForced","redefine","InternalMetadataModule","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","KEY","uncurriedNativeMethod","enable","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","forced","hasOwn","ownKeys","getOwnPropertyDescriptorModule","source","keys","getOwnPropertyDescriptor","i","F","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","NAME","bitmap","enumerable","writable","toPropertyKey","propertyKey","IS_PURE","FunctionName","createIteratorConstructor","createNonEnumerableProperty","IteratorsCore","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","name","values","proto","document","EXISTS","createElement","window","userAgent","Pebble","classof","process","getBuiltIn","match","version","Deno","versions","v8","CONSTRUCTOR","METHOD","setGlobal","copyConstructorProperties","options","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","isExtensible","preventExtensions","FunctionPrototype","Function","apply","Reflect","aCallable","getDescriptor","callBind","aFunction","namespace","method","getMethod","usingIterator","V","P","func","check","Math","globalThis","g","hasOwnProperty","a","b","console","propertyIsEnumerable","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","inspectSource","cause","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","uid","FREEZING","REQUIRED","METADATA","id","setMetadata","objectID","weakData","meta","getOwnPropertyNames","splice","getWeakData","onFreeze","NATIVE_WEAK_MAP","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","wmget","wmhas","wmset","metadata","facade","STATE","enforce","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","toLowerCase","floor","isFinite","USE_SYMBOL_AS_UID","$Symbol","Result","stopped","ResultPrototype","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","toLength","obj","flush","head","notify","toggle","node","promise","then","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","parent","domain","exit","enter","resolve","nextTick","createTextNode","observe","characterData","task","V8_VERSION","getOwnPropertySymbols","symbol","Symbol","PromiseCapability","reject","$$resolve","$$reject","$default","trim","whitespaces","charAt","n$ParseFloat","trimmedString","$parseInt","hex","radix","S","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","concat","A","B","alphabet","chr","T","j","activeXDocument","defineProperties","enumBugKeys","html","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","Properties","props","IE8_DOM_DEFINE","$defineProperty","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","TO_ENTRIES","input","pref","val","valueOf","newPromiseCapability","x","promiseCapability","enforceInternalState","TEMPLATE","unsafe","simple","TAG","SHARED","mode","copyright","aConstructor","defaultConstructor","toIntegerOrInfinity","requireObjectCoercible","charCodeAt","CONVERT_TO_STRING","pos","second","position","codeAt","whitespace","ltrim","RegExp","rtrim","start","end","location","defer","channel","port","setImmediate","clearImmediate","Dispatch","MessageChannel","counter","queue","run","runner","listener","event","post","postMessage","protocol","host","args","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","max","min","integer","ceil","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","clearErrorStack","installErrorCause","normalizeStringArgument","ERROR_STACK_INSTALLABLE","$AggregateError","errors","message","AggregateErrorPrototype","errorsArray","AggregateError","$find","addToUnscopables","FIND","SKIPS_HOLES","ARRAY_ITERATOR","Arguments","collection","init","$entries","newPromiseCapabilityModule","perform","allSettled","capability","promiseResolve","remaining","alreadyCalled","status","reason","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","NativePromise","speciesConstructor","real","onFinally","isFunction","e","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","microtask","hostReportErrors","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","wrap","r","$promiseResolve","race","STRING_ITERATOR","point","validator","gen","count","out","substring","Guid","guid","EMPTY","isGuid","equals","other","isEmpty","toJSON","raw","extendStatics","__extends","d","p","__","Contract","DashboardLayoutChangedEvent","_super","_dashboardLayoutChangeDetails","_this","TableauEventType","DashboardLayoutChanged","TableauEvent","api_external_contract_js_1","api_shared_js_1","FilterChangedEvent","worksheet","_fieldName","_fieldId","FilterChanged","getFilterAsync","_worksheet","getFiltersAsync","filters","eventedFilter","fieldId","fieldName","TableauError","ErrorCodes","MissingFilter","TableauWorksheetEvent","MarksSelectedEvent","MarkSelectionChanged","getMarksAsync","getSelectedMarksAsync","Parameter_1","ServiceRegistryUtil_1","ParameterChangedEvent","_globalFieldName","sheet","ParameterChanged","getParameterAsync","ApiServiceRegistry","ExtensionsRegistryId","getService","findParameterByGlobalFieldNameAsync","parameterImpl","MissingParameter","Parameter","TableauSheetEvent","SummaryDataChangedEvent","SummaryDataChanged","_type","_sheet","WorkbookFormattingChangedEvent","_formatting","WorkbookFormattingChanged","BentonSansFontFamilyName","BentonSansLowDPIFontFamilyName","BentonSansBookFontFaceName","BentonSansBookItalicFontFaceName","BentonSansSemiDemiFontFaceName","BentonSansSemiDemiItalicFontFaceName","BentonSansLightFontFaceName","BentonSansMediumFontFaceName","SupportedBentonSansFontFaces","ConnectedServer","_userId","_siteId","_siteNamespace","_workbookId","ExtensionWorkbookImpl","getAllDataSourcesAsync","dataSchema","dataSources","ds","createDataSourceFromInfo","dataSourceInfo","dataSourceImpl","DataSourceImpl","dataSource","DataSource","initializeWithPublicInterfaces","WorkbookImpl","__spreadArrays","s","il","k","jl","api_internal_contract_js_1","Dashboard_1","Workbook_1","Worksheet_1","DashboardContent_1","Environment_1","Settings_1","UI_1","WorksheetContent_1","RegisterAllExtensionsServices_1","BentonSansFontNameConstants_1","ExtensionWorkbookImpl_1","LegacyInternalApiDispatcherHolder_1","SettingsImpl_1","TableauBookFontNameConstants_1","UIImpl_1","ExtensionsImpl","initializeAsync","isExtensionDialog","contextMenuCallbacks","_initializationPromise","_a","initOptions","isAlpha","ApiVersion","Instance","LegacyInternalApiDispatcherHolder","hasDesktopApiDispatcherPromise","getDesktopDispatcherPromise","dispatcherFactory","onDispatcherReceived","openPayload","catch","onDispatcherReceivedCallback_1","doCrossFrameBootstrap","INTERNAL_CONTRACT_VERSION","factory","createVizImageAsync","inputSpec","setClickThroughAsync","clickThroughEnabled","extensionZoneId","isDashboardExtensionLocator","locator","dashboardPath","InternalError","contextMenuFunctions","dispatcher","registerInitializationExtensionsServices","initializationService","callbackMapKeys","initializeDashboardExtensionsAsync","platformVersion","extensionEnvironment","major","minor","fix","VersionedExternalApiDispatcher","needsVersionConverter","registerAllSharedServices","registerAllExtensionsServices","extensionDashboardInfo","extensionInstance","dashboardContent","initializeDashboardContent","extensionWorksheetInfo","worksheetContent","initializeWorksheetContent","environment","Environment","settings","initializeSettings","extensionSettingsInfo","ui","UI","UIImpl","workbook","Workbook","workbookFormatting","initializeTableauFonts","applyAllFormatting","initializeContextMenuCallbacks","initializeWorkbookFormattingChangedEventCallback","extensionDialogPayload","formattingModel","_styleElement","stylesheet","cssRules","deleteRule","formattingSheets","currentFormattingSheet","applyFormattingSheetToStyleSheet","styleInfo","cssProperties","fontFamily","fontSize","fontWeight","fontStyle","textDecoration","color","rule","classNameKey","insertRule","registerHandler","NotificationId","eventFormatting","fontNames","SupportedTableauFontFaces","formattingSheet","parameters","ParameterId","FontNameListItems","execute","VerbId","GetFonts","response","loadFonts","fonts","fontNameAndInfo","fontName","loadTableauFonts","loadBentonSansFonts","FontFace","fontBinaryInfo","info","sheetPath","sheetInfoImpl","SheetInfoImpl","SheetType","Dashboard","width","w","height","h","dashboardImpl","DashboardImpl","zones","activeDashboardObjectId","dashboard","DashboardContent","visualId","Worksheet","worksheetImpl","WorksheetImpl","WorksheetContent","settingsInfo","settingsImpl","SettingsImpl","Settings","ContextMenuClick","TableauBookFontFaceName","TableauBookFontFamilyName","weight","TableauLightFontFaceName","TableauLightFontFamilyName","TableauRegularFontFaceName","TableauRegularFontFamilyName","TableauSemiBoldFontFaceName","TableauSemiboldFontFamilyName","TableauBoldFontFaceName","TableauBoldFontFamilyName","TableauMediumFontFamilyName","TableauMediumFontFaceName","__warningIssued","__platformIsOfficialRelease","__tableauDesktopDispatcher","BlockExtension","warn","TableauEvent_1","SettingsChangedEvent","_newSettings","SettingsChanged","_saveInProgress","erase","ErrorHelpers","verifyParameter","_currentSettings","verifySettingsAreUnlocked","_isModified","getAll","saveAsync","saveSettingsAsync","newSettings","verifyStringParameter","initializeEvents","notificationService","results","settingsChangedEvent","SingleEventManagerImpl","triggerEvent","settingsValues","SettingSaveInProgress","ASYNC_SAVE_IN_PROGRESS","displayDialogAsync","url","payload","uiService","unregisterFn","ExtensionDialogUpdate","isCloseEvent","closePayload","DialogClosedByUser","closeDialog","DashboardLayoutChangedEvent_1","WorkbookFormattingChangedEvent_1","DashboardObject_1","Sheet_1","_dashboardImpl","addNewEventType","worksheetsImpl","objects","dashboardObjectImpl","DashboardObject","activeDashboardName","setZoneVisibilityAsync","zoneVisibilityMap","setDashboardObjectVisibilityAsync","dashboardObjectVisibilityMap","getDashboardObjectById","dashboardObjectId","zone","dashboardLayoutChangedEvent","dashboardObjectChanges","updateZones","activeZoneId","workbookFormattingChangedEvent","moveAndResizeDashboardObjectsAsync","dashboardObjectPositionAndSizeUpdateArray","replayAnimationAsync","replaySpeed","applyFilterAsync","updateType","Sheet","_dashboardObjectImpl","isFloating","isVisible","ParameterChangedEvent_1","currentValue","dataType","allowableValues","changeValueAsync","newValue","verifyInternalValue","parameterEvent","model","EventListenerManager","_sheetImpl","sheetType","isValidSize","EmbeddingErrorCodes","ImplementationError","testSize","findParameterAsync","parameterName","getParametersAsync","parametersImpl","_workbookImpl","FilterChangedEvent_1","MarksSelectedEvent_1","SummaryDataChangedEvent_1","_worksheetImpl","parentDashboard","SharedErrorCodes","marksEvent","SelectedMarksChanged","visualIdsAreEqual","filterEvent","filterEventResponse","summaryDataEvent","summaryDataEventResponse","applyRangeFilterAsync","filterOptions","applyHierarchicalFilterAsync","applyRelativeDateFilterAsync","clearFilterAsync","getDataSourcesAsync","getHighlightedMarksAsync","getSummaryDataAsync","getSummaryDataReaderAsync","pageRowCount","getSummaryColumnsInfoAsync","getUnderlyingDataAsync","getUnderlyingTablesAsync","getUnderlyingTableDataAsync","logicalTableId","getUnderlyingTableDataReaderAsync","getVisualSpecificationAsync","clearSelectedMarksAsync","selectMarksByIDAsync","marksInfo","selectMarksByIdAsync","selectMarksByValueAsync","selections","selectionUpdateType","annotateMarkAsync","mark","annotationText","getAnnotationsAsync","removeAnnotationAsync","annotation","hoverTupleAsync","hoveredTuple","tooltip","selectTuplesAsync","selectedTuples","selectOption","storyboard","storyPointID","_dashboard","ConnectedServer_1","WorkbookFormattingEnvUtil_1","_apiVersion","formattedValue","_context","InternalToExternalEnumMappings","extensionContext","convert","WorkbookFormattingEnvUtil","convertToWorkbookFormatting","_language","extensionLanguage","_country","extensionCountry","_locale","extensionLocale","_mode","extensionMode","_operatingSystem","operatingSystem","_tableauVersion","tableauVersion","_uniqueUserId","uniqueUserId","userId","connectedServer","siteId","siteNamespace","workbookId","featureFlags","Extensions","extensionImpl","initializeDialogAsync","_settingsImpl","isModified","_impl","workbookFormattingModel","InitializationServiceImpl","contextMenuIds","params","ExtensionContextMenuIds","IsExtensionDialog","InitializeExtension","ServiceImplBase","SettingsServiceImpl","SettingsValues","SaveExtensionSettings","DEFAULT_DIALOG_STYLE","DialogStyle","Window","UIServiceImpl","ExtensionDialogUrl","ExtensionDialogPayload","dialogStyle","InvalidParameter","ExtensionDialogH","ExtensionDialogW","verifyEnumValue","ExtensionDialogStyle","ExternalToInternalEnumMappings","dialogStyles","DisplayDialog","ExtensionDialogResult","DialogAlreadyOpen","InvalidDomain","InvalidDomainDialog","CloseDialog","verifyParameterType","ExtensionZoneId","ClickThroughEnabled","SetClickThrough","InitializationServiceImpl_1","SettingsServiceImpl_1","UIServiceImpl_1","registerService","__export","m","Enums_1","ApiMenuType","CrosstabFileFormat","DeviceType","EmbeddingTableauEventType","FileFormats","PrintOrientation","PrintPageSize","PrintScaling","SheetSizeBehavior","TableauDialogType","Toolbar","Tableau_1","ExtensionContext","ExtensionMode","VizImageEncodingType","VizImagePaletteType","VizImageSizeSettingAlignmentType","VizImageSizeSettingType","VizImageSortDirectionType","AskDataAttributes","ToolbarButtons","RevertVizSelection","PulseAttributes","VizChildElementAttributes","VizChildElements","VizAuthoringAttributes","VizAttributes","VizSharedAttributes","WebComponentChildElementAttributes","WebComponentAttributes","WebComponentChildElements","Tableau","__assign","t","n","DashboardObjectVisibilityType","HierarchicalLevelSelectionState","ReplaySpeedType","TrendLineModelType","SortDirection","SelectOptions","SelectionUpdateType","QuickTableCalcType","PeriodType","ParameterValueType","MarkType","IncludeDataValuesOption","FilterNullOption","FilterDomainType","FilterUpdateType","FilterType","FieldRoleType","FieldAggregationType","EncodingType","DateRangeType","DashboardLayoutChange","DataType","DashboardObjectType","ClassNameKey","ColumnType","AnnotationType","AnalyticsObjectType","ZoneVisibilityType","internalContractVersion","MESSAGING_VERSION","DataTypeConverter","isSpecial","valueAsString","parseBoolean","booleanString","normalizedBoolean","specialValueIndicator","parseNumber","parseDate","dateAsString","Date","getTime","parseDateTime","formattedDateString","convertValueAsStringToValue","Bool","Int","Float","DateTime","Spatial","convertValueToNativeValue","convertStringValueToNativeValue","FitPages","PageScalingOption","ScaleMode","PageOrientation","PageSizeOption","ApiShowDataTableFormat","ApiShowDataTableSentinel","QuantitativeIncludedValues","DateStepPeriod","DomainRestrictionType","EncodedDataType","AnnotateEnum","AskDataOptionNames","PulseOptionNames","VqlParameterNames","PublicParameterNames","VizOptionNames","JsApiInternalContract_1","CrossFramePreparedMessage_1","MessageTypeChecks_1","MessageTypes_1","CrossFrameMessenger","thisWindow","otherWindow","otherWindowOrigin","startListening","unregisterFunction","boundHandler_1","onMessageReceived","removeEventListener","stopListening","setInitializeMessageHandler","initializeMessageHandler","setCommandResponseMessageHandler","commandResponseMessageHandler","setCommandMessageHandler","commandMessageHandler","setNotificationMessageHandler","notificationMessageHandler","setHandshakeMessageHandler","handshakeMessageHandler","prepareInitializationMessage","apiVersion","crossFrameVersion","msgGuid","msgType","MessageType","Initialize","prepareMessage","prepareCommandMessage","verbId","Command","prepareCommandResponseMessage","commandGuid","CommandResponse","JSON","parse","stringify","prepareNotificationMessage","notificationId","Notification","prepareAckMessage","Ack","msg","CrossFramePreparedMessage","isMessage","isInitMessage","isCommandResponseMessage","isCommandMessage","isNotificationMessage","Handshake","isHandshakeMessage","setOtherWindow","setOtherWindowOrigin","origin","_message","_target","_origin","send","Notifications_1","expectedEmptyNotifications","Set","EditButtonClicked","EditInDesktopButtonClicked","WorkbookPublished","WorkbookReadyToClose","ReadyToReceiveAuthToken","isVersion","versionNumber","v","initMessage","crMessage","commandMessage","notificationMessage","IdentityVersionConverter","upgradeExecuteCall","verb","downgradeExecuteReturn","executeResponse","downgradeNotification","notification","StackingVersionConverter","_externalMajorVersion","_platformMajorVersion","_upgradeExecuteTranslations","_downgradeExecuteTranslations","_downgradeNotificationTranslations","fromData","externalVersion","upgradeExecuteTranslations","downgradeExecuteTranslations","downgradeNotificationTranslations","upgraded","_i","upgradeTranslation","downgraded","downgradeTranslation","IdentityVersionConverter_1","StackingVersionConverter_1","VersionTranslations_1","VersionEqualTo","lhs","rhs","CreateVersionConverterWithTranslators","upgrades","downgrades","notificationDowngrades","externalMajorVersion","externalMinorVersion","platformMajorVersion","neededExecuteUpgrades","GetNeededTranslations","neededExecuteDowngrades","neededNotificationDowngrades","reverse","majorMinorTranslators","neededTranslations","maximumMinorVersion","GetMaximumMinorIndex","minorVersions","reduce","VersionLessThan","ExecuteMinorUpgrades","ExecuteMinorDowngrades","DowngradeWorksheetNames","NotificationMinorDowngrades","DowngradeFlipboardZoneID","CreateVersionConverter","bootstrapInfo","sheetInfo","visualModel","flipboardZoneID","ExternalIdentityVersionConverter","downgradeExecuteCall","upgradeExecuteReturn","upgradeNotification","ExternalStackingVersionConverter","_externalVersion","_platformVersion","_downgradeExecuteCallTranslations","_upgradeExecuteReturnTranslations","_upgradeNotificationTranslations","VersionConverterFactory_1","ExternalIdentityVersionConverter_1","ExternalStackingVersionConverter_1","ExternalVersionTranslations_1","CreateExternalCompatibleVersionConverterWithTranslators","upgradeNotifications","platformMinorVersion","neededExecuteCallDowngrade","GetNeededExternalTranslations","neededExecuteReturnUpgrades","neededNotificationUpgrades","ExecuteMinorDowngradeCallExternal","DowngradeUnderlyingTableDataAsync","DowngradeLogicalTableDataAsync","ExecuteMinorUpgradeReturnExternal","UpgradeDataTableTypes","UpgradeDataTableRowsAndColumns","ExecuteMinorUpgradeNotification","CreateExternalCompatibleVersionConverter","convertDataValues","table","dataTable","row","dataValue","columnIndex","headers","validateParametersForObjectModel","LogicalTableId","SingleTableId","oldUnderlyingDataTable","isSummary","oldSelectedMarksTable","marksTable","GetUnderlyingTableData","GetUnderlyingData","GetLogicalTableData","GetDataSourceData","GetDataSummaryData","isGetSummaryDataVerb","MaxRows","maxRows","underlyingDataTable","adjustDataRowLength","isGetTableDataVerb","ColumnsToIncludeById","columnsToInclude","newHeaders","header","valueIndex","newIndex","adjustDataColumns","ApiVersion_1","CrossFrameDispatcher_1","CrossFrameDispatcher","DataSource_1","ExternalToInternalEnumMappings_1","InternalToExternalEnumMappings_1","EventListenerManager_1","Field_1","Field","CustomViewImpl_1","CustomViewImpl","DashboardImpl_1","DashboardObjectImpl_1","DashboardObjectImpl","DataSourceImpl_1","ParameterImpl_1","ParameterImpl","SheetImpl_1","SheetImpl","SheetInfoImpl_1","SingleEventManagerImpl_1","StoryImpl_1","StoryImpl","StoryPointImpl_1","StoryPointImpl","StoryPointInfoImpl_1","StoryPointInfoImpl","WorkbookImpl_1","WorksheetImpl_1","Point_1","Point","ClientInfoServiceImpl_1","ClientInfoServiceImpl","NotificationServiceImpl_1","NotificationServiceImpl","NotificationServiceImplBase_1","NotificationServiceImplBase","Registration","ServiceImplBase_1","SizeServiceImpl_1","SizeServiceImpl","StoryActivationServiceImpl_1","StoryActivationServiceImpl","TableauError_1","Deferred_1","Deferred","ErrorHelpers_1","ExportHelpers_1","ExportHelpers","SheetUtils_1","SheetUtils","VersionNumber_1","VersionNumber","VersionedExternalApiDispatcher_1","_instance","SetVersionNumber","numString","ConnectionSummary","_connectionInfo","serverURI","inIframe","opener","messenger","initializationMessage","messageGuid","_messenger","_pendingPromises","_notificationHandlers","onCommandResponse","onNotification","preparedMessage","registerNotificationHandler","unregisterNotificationHandler","pendingPromise","errorCode","IncompatibleVersionError","_dataSourceImpl","fields","extractUpdateTime","isExtract","isPublished","publishedUrl","refreshAsync","getActiveTablesAsync","getConnectionSummariesAsync","getLogicalTablesAsync","getLogicalTableDataAsync","getLogicalTableDataReaderAsync","_b","_c","_d","_e","_f","_g","_h","_j","_k","EnumConverter_1","filterDomainType","EnumConverter","Relevant","Database","nullOptions","AllValues","NonNullValues","NullValues","filterUpdateType","Add","All","Remove","Replace","setVisibilityType","Show","Hide","setReplaySpeedType","Slow","Normal","Fast","Story","showDataTableFormatType","NativeAndFormattedValues","OnlyNativeValues","NativeValuesOnly","OnlyFormattedValues","FormattedValuesOnly","periodType","Years","Quarters","Months","Weeks","Days","Hours","Minutes","Seconds","dateRangeType","Last","LastN","Next","NextN","Current","ToDate","Modal","Modeless","_l","_m","_o","_p","_q","_r","_s","_t","Desktop","Server","Authoring","Viewing","columnType","Continuous","Discrete","fieldAggregationType","Attr","Avg","Collect","Count","Countd","Day","End","Hour","InOut","Kurtosis","Max","Mdy","Median","Min","Minute","MonthYear","None","Qtr","Quart1","Quart3","Second","Skewness","Stdev","Stdevp","Sum","TruncDay","TruncHour","TruncMinute","TruncMonth","TruncQtr","TruncSecond","TruncWeek","TruncYear","User","Var","Varp","Week","Weekday","Year","fieldRoleType","Dimension","Measure","Unknown","dashboardObjectType","Extension","Blank","Image","Legend","PageFilter","ParameterControl","QuickFilter","Text","Title","WebPage","List","Range","dateStepPeriod","INITIALIZATION_ERROR","INTERNAL_ERROR","MISSING_ENUM_MAPPING","MISSING_PARAMETER","PERMISSION_DENIED","PRES_MODEL_PARSING_ERROR","UNKNOWN_VERB_ID","VERSION_NOT_CONFIGURED","APINotInitialized","VISIBILITY_ERROR","VisibilityError","filterType","Categorical","RelativeDate","Hierarchical","DashboardTitle","StoryTitle","Tooltip","WorksheetTitle","hierarchicalLevelSelectionState","AllSelected","NoneSelected","SomeSelected","UnknownSelected","annotationType","Area","Mark","markType","Bar","Circle","GanttBar","Heatmap","Line","Pie","Polygon","Shape","Square","VizExtension","_eventListenerManagers","eventType","UnsupportedEventName","eventManager","_fieldImpl","aggregation","role","isHidden","isGenerated","isCalculatedField","apiNotImplemented","isCombinedField","isPresentOnPublishedDatasource","ApiShared_1","customViewModel","_registryId","_luid","luid","_name","_shared","_isDefault","isDefault","_ownerName","owner","userFriendlyName","_url","ServiceRegistry_1","_sheetInfo","_zones","_sheetPath","_parentStoryPointImpl","_activeDashboardObjectId","_worksheetsImpl","_objects","sheetName","zoneMap","zoneSize","zoneType","worksheetName","worksheetUrl","vizId","_sheetInfoImpl","zonePoint","y","zoneId","setVisibilityAsync","newZones","newActiveZoneId","newActiveDashboardName","oldDashboardObjects","oldZoneMap","oldActiveZoneId","oldActiveDashboardName","newDashboardObjects","newZoneMap","zoneChanges","oldObject","oldId","newObject","addChange","IsFloatingChanged","IsVisibleChanged","NameChanged","PositionChanged","SizeChanged","Removed","Added","Selected","Deselected","DashboardChanged","change","moveAndResizeAsync","replayAsync","verifyActiveSheetOrEmbeddedInActiveStoryPoint","getDashboardFiltersAsync","applyDashboardFilterAsync","getWorksheetNamesFromZones","worksheetNames","isRootAndActiveDashboard","active","isWithinActiveStoryPoint","parentStoryPoint","NotActiveSheet","_position","_size","_isFloating","_isVisible","_id","ConnectionSummary_1","LogicalTable_1","TableSummary_1","FieldImpl_1","_dataSourceInfo","_fields","fieldModel","fieldImpl","FieldImpl","getMaxPageRowLimit","summaries","summary","tableInfos","tableInfo","TableSummary","getDataSourceDataAsync","ignoreAliases","columnsToIncludeById","includeDataValuesOption","logicalTableInfos","logicalTableInfo","LogicalTable","_fieldInfo","_parentDataSource","DataValueFactory_1","Param_1","parameterInfo","setParameterInfo","_parameterInfo","DataValueFactory","MakeParameterDataValue","_allowableValues","coercedValue","Param","serializeParameterValue","changeParameterValueAsync","listValues","minValue","maxValue","stepSize","allowableValuesType","sheetSize","isActive","getSheetSize","isValidSheetSize","findParameterByNameAsync","getParametersForSheetAsync","changeSizeAsync","newSize","invalidSizeError","InvalidSize","behavior","partialSheetSize","normalizeSheetSize","isAutomatic","Automatic","minSize","maxSize","InvalidSizeBehaviorOnWorksheet","processedNewSize","processNewSize","getClientInfoAsync","publishedSheets","getSheetSizeFromSizeConstraints","sizeConstraint","parseDimensions","minSizeMaybe","maxSizeMaybe","hasMinWidth","isNullOrUndefined","hasMinHeight","hasMaxWidth","hasMaxHeight","hasValidMinSize","hasValidMaxSize","AtMost","MissingMaxSize","AtLeast","MissingMinSize","MissingMinMaxSize","Exactly","tryParseNumber","widthParsed","success","parsedWidth","parsed","heightParsed","parsedHeight","_sheetType","_sheetSize","_index","_isActive","_isHidden","isDashboard","_eventType","_handlers","beforeCount","eventGenerator","ShortLivedDeferred_1","storyModel","_publishedSheetInfos","_storyPointInfoImpls","_deferred","ShortLivedDeferred","initializeStory","storyPoints","storyPointModel","activeStoryPointIndex","storyPointInfoImpl","caption","storyPointId","updated","_activeStoryPointImpl","containedSheetInfo","updateStoryInfo","storyInfoImpl","StoryPointIdMismatch","updateStory","activeStoryPoint","activateNextStoryPointAsync","getNewPromiseOrThrowIfBusy","activatePreviousStoryPointAsync","activateStoryPointAsync","IndexOutOfRange","revertStoryPointAsync","clearPendingPromises","_storyPointInfoImpl","sheetInfos","registryId","_containedSheetImpl","createContainedSheet","parentStory","sheetImpl","publishedSheetInfo","getPublishedSheetInfoByName","containedSheetSize","createAutomaticSize","isContainedSheetHidden","containedSheetUrl","containedSheetInfoImpl","getSheetTypeEnum","dashboardZones","ServerError","_caption","_storyPointId","_active","_updated","_parentStoryImpl","isUpdated","GetDataService_1","_visualId","_parentDashboardImpl","verifyActiveSheet","nullOption","verifyRangeParamType","levels","rangeType","worksheetDataSourceInfo","worksheetDataSchemaMap","primaryId","primaryDataSource","referencedDataSourceList","secondaryId","GetDataType","Summary","ignoreSelection","Underlying","includeAllColumns","appendContextMenuAsync","targetMenu","config","removeContextMenuAsync","menuItemId","executeContextMenuAsync","renameContextMenuAsync","menuHeader","menuDescription","isInsideDashboardExtension","isRootAndActiveWorksheet","isInsideActiveDashboard","isInsideActiveStoryPoint","_logicalTable","Filter","_worksheetName","_filterType","getFieldAsync","getAppliedWorksheetsAsync","setAppliedWorksheetsAsync","applyToWorksheets","uniqueWorksheets","CategoricalFilter","_appliedValues","_isExcludeMode","_isAllSelected","getDomainAsync","domainType","getCategoricalDomainAsync","HierarchicalDataValue","_value","_hierarchicalPath","_level","HierarchicalLevelDetail","_levelSelectionState","HierarchicalFilter","_dimensionName","_hierarchyCaption","_numberOfLevels","_levelDetails","RangeFilter","_min","_max","_includeNullValues","service","getRangeDomainAsync","RelativeDateFilter","_anchorDate","_periodType","_rangeType","_rangeN","CategoricalDomain","_values","_domainType","RangeDomain","DataTable","_data","_columns","_totalRowCount","_isTotalRowCountLimited","_isSummaryData","_marksInfo","MarkInfo","_color","_tupleId","Column","_dataType","_isReferenced","DataValue","_nativeValue","_formattedValue","__awaiter","thisArg","_arguments","generator","fulfilled","rejected","__generator","body","_","label","sent","trys","ops","op","pop","DataTableReader","_pageRowCount","_pageCount","getPageAsync","pageNumber","verifyRange","getAllPagesAsync","firstPage","rowsRequested","pagesRequested","pagesToFetch","isDataLimited","remainingData","page","fullData","totalRowCount","columns","isTotalRowCountLimited","isSummaryData","releaseAsync","SelectionModel","ValueSelectionModel","selectValues","HierarchicalSelectionModel","RangeSelectionModel","DimensionSelectionModel","TupleSelectionModel","objectIds","SelectionModelsContainer","hierModelArr","dimModelArr","quantModelArr","SelectTuplesInteractionModel","visualIdPresModel","tupleIds","selectOptions","tooltipContext","HoverTupleInteractionModel","tupleId","_x","_y","AnimationServiceImpl_1","AnnotationServiceImpl_1","DataSourceServiceImpl_1","ExportServiceImpl_1","ExternalContextMenuServiceImpl_1","FilterServiceImpl_1","GetDataServiceImpl_1","ParametersServiceImpl_1","SelectionServiceImpl_1","VisualModelServiceImpl_1","VizServiceImpl_1","ZoneServiceImpl_1","AnimationServiceImpl","DataSourceServiceImpl","ExportServiceImpl","GetDataServiceImpl","FilterServiceImpl","ParametersServiceImpl","SelectionServiceImpl","AnnotationServiceImpl","ZoneServiceImpl","VisualModelServiceImpl","VizServiceImpl","ExternalContextMenuServiceImpl","__tableauApiServiceRegistry","ServiceRegistryImpl","_services","serviceName","setInstance","serviceRegistry","clearRegistry","ReplaySpeed","ReplayAnimation","SelectionModels_1","selectionModelContainer","parseMarkSelectionIds","formattedText","VisualId","TargetPoint","SelectionList","selection","FormattedText","CreateAnnotation","GetAnnotations","annotationsList","annotationFilterMap","parseAnnotationSelectionIds","RemoveAnnotation","marks","ids","tupleSelectionModel","selectionType","annotations","annotationId","mapAnnotation","annotationHTML","annotationPlainText","annotateEnum","GetEmbeddingClientInfo","InternalContract","SENTINEL_LOGICAL_TABLE_INFO","SingleTableCaption","platformVersionObjectModelSupport","dataSourceId","DeltaTimeMs","ShouldRefreshDS","DataSourceId","RefreshDataSource","joinParameters","GetActiveTables","joinResponse","tables","UnsupportedMethodForDataSourceType","GetDataSources","GetAllDataSources","GetConnectionDescriptionSummaries","globalfieldName","GetFieldAndDataSource","FieldId","field","convertField","convertDataSource","isObjectModelSupportedByPlatform","GetLogicalTables","GetUnderlyingTables","getExportCrosstabSheetMapAsync","currentSheetType","GetExportCrosstabSheetMap","CurrentSheetType","exportCrosstabAsync","format","exportableWorksheetNames","sheetNameToIdMap","verifySheetName","SheetIdentifier","SendNotifications","CSV","ExportCrosstabCsvDownload","UseTabDelimiters","Excel","ExportCrosstabExcelDownload","CrosstabCreationError","exportDataAsync","verifyExportDataOptions","columnsAsSet","ExportDataDownload","IgnoreAliases","DataCreationError","exportPowerPointAsync","sheetNames","exportScenarios","verifySheetNamesForPDFAndPPT","ExportPowerpointDownload","ExportOriginUrl","SelectedSheetNames","PowerPointCreationError","exportPDFAsync","externalExportPdfOptions","internalExportPdfOptions","verifyExportPDFOptions","getExportPDFOptionsAsync","updateInternalExportPDFOptions","ExportPdfDownload","ExportPdfOptions","PDFCreationError","GetExportPdfOptions","AppendExternalMenuItem","WorksheetName","ExternalMenuItemDisplayName","displayName","RemoveExternalMenuItem","ExternalMenuItemId","ExecuteExternalMenuItem","RenameExternalMenu","ExternalMenuHeader","ExternalMenuDescription","FilterModels_1","ApplyCategoricalFilter","FieldName","FilterValues","IsExcludeMode","isExcludeMode","ApplyRangeFilter","serializeDateForPlatform","FilterRangeMin","FilterRangeMax","FilterRangeNullOption","apiFilterHandlerCheckForCommandError","hierarchicalLevels","FilterLevels","ClearFilter","resposne","ApplyRelativeDateFilter","rangeN","MissingRangeNForRelativeDateFilters","RangeN","anchorDate","AnchorDate","convertAnchorDate","GetFilters","convertDomainFilters","GetCategoricalDomain","DomainType","convertCategoricalDomain","GetRangeDomain","convertRangeDomain","GetDashboardFilters","DashboardCategoricalFilter","sharedFilterModel","executeGetAppliedWorksheets","worksheets","worksheetInfo","isSelected","allowedWorksheets","activeWorksheet","isEnabled","ChangeSharedFilter","SharedFilterSheets","telemetryFunctionName","GetSharedFilter","domainFilters","domainFilter","convertCategoricalFilter","convertHierarchicalFilter","convertRangeFilter","convertRelativeDateFilter","appliedValues","dv","MakeFilterDataValue","fieldCaption","isExclude","isAllSelected","hierarchicalDataValue","hierarchicalPath","level","levelDetails","levelInfo","aLevel","levelSelectionState","dimensionName","hierarchyCaption","includeNullValues","anchorDateValue","domainDv","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hh","getUTCHours","mm","getUTCMinutes","sec","getUTCSeconds","InvalidDateParameter","serverPm","ParameterError","InvalidFieldCaption","InvalidFilterFieldName","InvalidValues","InvalidFilterFieldValue","InvalidAggFieldName","InvalidAggregationFieldName","uuid_1","GetDataModels_1","GetDataTableReaderModels_1","viewDataTableCacheId","v4","getMaxRowLimit","getViewDataTableCacheId","getLimitedMaxRows","requestedRows","rowCountLimit","getType","summaryData","functionName","requestMaxRows","IgnoreSelection","IncludeAllColumns","verifyIncludeColumnArray","ShowDataTableFormat","responseData","processResultsTable","ViewDataTableCacheId","PageRowCount","GetDataSummaryDataReader","isReferenced","GetSelectedMarks","GetHighlightedMarks","ColumnsToInclude","datasourceId","GetLogicalTableDataReader","GetUnderlyingTableDataReader","tableId","pageSize","ViewDataTableId","DataRowIndex","GetDataTableReaderPage","processResultsPage","summaryTableId","ReleaseDataTableReader","cell","MakeTableDataValue","_filterFn","_callbackFn","notificationModel","filterFn","handlers","registration","removeRegistration","hasHandlersForNotificationType","reg","SheetPath","getAllParametersAsync","inputParameters","GetParametersForSheet","ParameterFieldName","ParameterValue","ChangeParameterValue","ParameterCaption","FindParameter","ClearSelectedMarks","selectionCriterias","validateSelectionUpdateType","parseSelectionMarks","HierValSelectionModels","QuantRangeSelectionModels","DimValSelectionModels","SelectByValue","interactionModel","HoverTupleInteraction","RaiseHoverTupleNotification","option","validateSelectOption","SelectTuplesInteraction","RaiseSelectTuplesNotification","InvalidFields","InvalidSelectionFieldName","InvalidSelectionValue","InvalidDates","InvalidSelectionDate","parseSelectionIds","Selection","st","catRegex","rangeOption","hierModel","addToParamsList","quantModel","addToRangeParamsList","dimModel","valueSelectionModel","markValues","valueArr","qualifiedFieldCaption","rangeSelectionModel","included","validateNullOptionType","IncludeNull","IncludeNonNull","IncludeAll","Simple","Toggle","_dispatcher","internalError","externalErrorCode","ShouldThrow","No","SheetName","MinHeight","MinWidth","MaxHeight","MaxWidth","SetSheetSize","_response","ActivateNextStoryPoint","ActivatePreviousStoryPoint","ActivateStoryPoint","StoryPointIndex","RevertStoryPoint","GetVisualSpecification","VizAPIInputJson","VizAPI","activateSheetAsync","SwitchToSheetName","ActivateSheet","getCustomViewsAsync","GetCustomViews","customView","showCustomViewAsync","customViewName","CustomViewName","ShowCustomView","removeCustomViewAsync","RemoveCustomView","saveCustomViewAsync","CustomViewIsDefault","SaveWorkbookAsCustomView","setActiveCustomViewAsDefaultAsync","SetActiveCustomViewAsDefault","CustomViewLuid","CustomViewIsPublic","UpdateCustomView","getCurrentSrcAsync","GetCurrentSrc","dashboardZoneMap","ZoneIdsVisibilityMap","convertParameterToMap","verifyZoneIsValid","SetZoneVisibility","DashboardObjectPositionAndSizeUpdateList","dashboardObject","verifyZoneIsValidAndFloating","dashboardObjectID","verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate","MoveAndResizeZones","_tableInfo","connectionId","customSQL","_errorCode","internalDataValue","_promise","_resolve","_reject","UnregisterTimeoutInMilliseconds","_mappings","_defaultVal","enumVal","throwIfMissing","Yes","apiName","argumentValue","argumentName","expectedType","enumValue","enumType","enumName","isValid","enumKey","isTypeNumber","isTypeDate","zoneID","dashboardObjectPositionAndSizeUpdate","exportableSheetNames","InvalidSelectionSheet","isTypeBool","exportableSheetNamesFromDashboard","exportableSheetNamesFromWorkbook","currentSheetName","orientation","scaling","currentSheet","updateExportLayoutOptions","updateSheetOptions","exportLayoutOptions","imageHeight","DefaultLayoutOptions","imageWidth","Landscape","pageOrientationOption","Portrait","A3","pageSizeOption","A4","A5","B4","B5","Executive","Folio","Ledger","Legal","Letter","Note","Quarto","Statement","Tabloid","Unspecified","AtMost1PageHigh","setFitAndScaleValues","FitOneHigh","AtMost1PageWide","FitOneWide","AtMost2PagesHigh","FitTwoHigh","AtMost2PagesWide","FitTwoWide","ScalePctAuto","Perc100","ScalePct100","Perc200","ScalePct200","Perc25","ScalePct25","Perc400","ScalePct400","Perc50","ScalePct50","Perc60","ScalePct60","Perc75","ScalePct75","Perc80","ScalePct80","Perc90","ScalePct90","sheetOptions_1","sheetOptions","sheetOption","scalingSelection","pageFitHorizontal","pageFitVertical","pageScaleMode","pageScalePercent","fitMatch","fitRegex","percentMatch","pctRegex","ScaleFitPages","ScalePercentage","DefaultDataOptions","DefaultPDFOptions","ScaleAuto","date","serializeBooleanForPlatform","bool","serializeNumberForPlatform","num","isTypeString","Boolean","param","paramName","valueString","NaN","minWidth","minHeight","maxWidth","maxHeight","isDsdLayout","internalSheetType","sizeObject","_timeoutInMilliseconds","ApiExecutionError","_timeoutId","Timeout","clearTimeout","versionString","partStr","build","getBuildNumber","parts","preReleaseString","_apiDelegateDispatcher","platformVersionNumber","_versionConverter","upgradedNotification","downgradeParameters","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","uuid","byteToHex","substr","arr","offset","_nodeId","_clockseq","_lastMSecs","_lastNSecs","buf","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","hashfunc","generateUUID","str","unescape","encodeURIComponent","bytes","stringToBytes","err","DNS","URL","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","q","cnt","md5ff","c","md5gg","md5hh","md5ii","v35","output","length32","hexTab","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","rnds","z","ROTL","K","H","l","N","M","pow","_i2","W","_t2","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","o","prop","toStringTag","ExtensionsImpl_1","Extensions_1","VERSION_IS_ALPHA","extensions"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/tableau.extensions.1.11.0.js b/lib/tableau.extensions.1.11.0.js new file mode 100644 index 00000000..2c61bd95 --- /dev/null +++ b/lib/tableau.extensions.1.11.0.js @@ -0,0 +1,19980 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "../../node_modules/core-js/es/array/find.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-js/es/array/find.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.array.find */ "../../node_modules/core-js/modules/es.array.find.js"); +var entryUnbind = __webpack_require__(/*! ../../internals/entry-unbind */ "../../node_modules/core-js/internals/entry-unbind.js"); + +module.exports = entryUnbind('Array', 'find'); + + +/***/ }), + +/***/ "../../node_modules/core-js/es/array/from.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-js/es/array/from.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.string.iterator */ "../../node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! ../../modules/es.array.from */ "../../node_modules/core-js/modules/es.array.from.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Array.from; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/map/index.js": +/*!**************************************************!*\ + !*** ../../node_modules/core-js/es/map/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.array.iterator */ "../../node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.map */ "../../node_modules/core-js/modules/es.map.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "../../node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "../../node_modules/core-js/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Map; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/is-integer.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/es/number/is-integer.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.is-integer */ "../../node_modules/core-js/modules/es.number.is-integer.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.isInteger; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/is-nan.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/es/number/is-nan.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.is-nan */ "../../node_modules/core-js/modules/es.number.is-nan.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.isNaN; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/parse-float.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/es/number/parse-float.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.parse-float */ "../../node_modules/core-js/modules/es.number.parse-float.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.parseFloat; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/parse-int.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/es/number/parse-int.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.parse-int */ "../../node_modules/core-js/modules/es.number.parse-int.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.parseInt; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/object/assign.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/es/object/assign.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.object.assign */ "../../node_modules/core-js/modules/es.object.assign.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Object.assign; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/object/entries.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/es/object/entries.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.object.entries */ "../../node_modules/core-js/modules/es.object.entries.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Object.entries; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/object/set-prototype-of.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/es/object/set-prototype-of.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.object.set-prototype-of */ "../../node_modules/core-js/modules/es.object.set-prototype-of.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Object.setPrototypeOf; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/promise/index.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/es/promise/index.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.aggregate-error */ "../../node_modules/core-js/modules/es.aggregate-error.js"); +__webpack_require__(/*! ../../modules/es.array.iterator */ "../../node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "../../node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.promise */ "../../node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! ../../modules/es.promise.all-settled */ "../../node_modules/core-js/modules/es.promise.all-settled.js"); +__webpack_require__(/*! ../../modules/es.promise.any */ "../../node_modules/core-js/modules/es.promise.any.js"); +__webpack_require__(/*! ../../modules/es.promise.finally */ "../../node_modules/core-js/modules/es.promise.finally.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "../../node_modules/core-js/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Promise; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/a-callable.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/a-callable.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); + +var TypeError = global.TypeError; + +// `Assert: IsCallable(argument) is true` +module.exports = function (argument) { + if (isCallable(argument)) return argument; + throw TypeError(tryToString(argument) + ' is not a function'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/a-constructor.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/a-constructor.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "../../node_modules/core-js/internals/is-constructor.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); + +var TypeError = global.TypeError; + +// `Assert: IsConstructor(argument) is true` +module.exports = function (argument) { + if (isConstructor(argument)) return argument; + throw TypeError(tryToString(argument) + ' is not a constructor'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/a-possible-prototype.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/a-possible-prototype.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +var String = global.String; +var TypeError = global.TypeError; + +module.exports = function (argument) { + if (typeof argument == 'object' || isCallable(argument)) return argument; + throw TypeError("Can't set " + String(argument) + ' as a prototype'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/add-to-unscopables.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/add-to-unscopables.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); + +var UNSCOPABLES = wellKnownSymbol('unscopables'); +var ArrayPrototype = Array.prototype; + +// Array.prototype[@@unscopables] +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +if (ArrayPrototype[UNSCOPABLES] == undefined) { + definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); +} + +// add a key to Array.prototype[@@unscopables] +module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/an-instance.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/an-instance.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); + +var TypeError = global.TypeError; + +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw TypeError('Incorrect invocation'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/an-object.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/an-object.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var String = global.String; +var TypeError = global.TypeError; + +// `Assert: Type(argument) is Object` +module.exports = function (argument) { + if (isObject(argument)) return argument; + throw TypeError(String(argument) + ' is not an object'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-from.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/array-from.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "../../node_modules/core-js/internals/call-with-safe-iteration-closing.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "../../node_modules/core-js/internals/is-array-iterator-method.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "../../node_modules/core-js/internals/is-constructor.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); +var createProperty = __webpack_require__(/*! ../internals/create-property */ "../../node_modules/core-js/internals/create-property.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "../../node_modules/core-js/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../../node_modules/core-js/internals/get-iterator-method.js"); + +var Array = global.Array; + +// `Array.from` method implementation +// https://tc39.es/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (;!(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : Array(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-includes.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-includes.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "../../node_modules/core-js/internals/to-absolute-index.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-iteration.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-iteration.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../../node_modules/core-js/internals/indexed-object.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "../../node_modules/core-js/internals/array-species-create.js"); + +var push = uncurryThis([].push); + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that); + var length = lengthOfArrayLike(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-slice.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/array-slice.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +module.exports = uncurryThis([].slice); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-species-constructor.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-species-constructor.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isArray = __webpack_require__(/*! ../internals/is-array */ "../../node_modules/core-js/internals/is-array.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "../../node_modules/core-js/internals/is-constructor.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); +var Array = global.Array; + +// a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? Array : C; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-species-create.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-species-create.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var arraySpeciesConstructor = __webpack_require__(/*! ../internals/array-species-constructor */ "../../node_modules/core-js/internals/array-species-constructor.js"); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/call-with-safe-iteration-closing.js": +/*!********************************************************************************!*\ + !*** ../../node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! + \********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "../../node_modules/core-js/internals/iterator-close.js"); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/check-correctness-of-iteration.js": +/*!******************************************************************************!*\ + !*** ../../node_modules/core-js/internals/check-correctness-of-iteration.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/classof-raw.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/classof-raw.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); + +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/classof.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/classof.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "../../node_modules/core-js/internals/to-string-tag-support.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var Object = global.Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/clear-error-stack.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/clear-error-stack.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "../../node_modules/core-js/internals/array-slice.js"); + +var replace = uncurryThis(''.replace); +var split = uncurryThis(''.split); +var join = uncurryThis([].join); + +var TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd'); +var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; +var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); +var IS_FIREFOX_OR_SAFARI_STACK = /@[^\n]*\n/.test(TEST) && !/zxcasd/.test(TEST); + +module.exports = function (stack, dropEntries) { + if (typeof stack != 'string') return stack; + if (IS_V8_OR_CHAKRA_STACK) { + while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ''); + } else if (IS_FIREFOX_OR_SAFARI_STACK) { + return join(arraySlice(split(stack, '\n'), dropEntries), '\n'); + } return stack; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/collection-strong.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/collection-strong.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js").f; +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "../../node_modules/core-js/internals/redefine-all.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../../node_modules/core-js/internals/an-instance.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../../node_modules/core-js/internals/define-iterator.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "../../node_modules/core-js/internals/set-species.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var fastKey = __webpack_require__(/*! ../internals/internal-metadata */ "../../node_modules/core-js/internals/internal-metadata.js").fastKey; +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + state.first = state.last = undefined; + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + + redefineAll(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) defineProperty(Prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { value: undefined, done: true }; + } + // return step by kind + if (kind == 'keys') return { value: entry.key, done: false }; + if (kind == 'values') return { value: entry.value, done: false }; + return { value: [entry.key, entry.value], done: false }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + setSpecies(CONSTRUCTOR_NAME); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/collection.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/collection.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "../../node_modules/core-js/internals/is-forced.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ "../../node_modules/core-js/internals/internal-metadata.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../../node_modules/core-js/internals/an-instance.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../../node_modules/core-js/internals/check-correctness-of-iteration.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ "../../node_modules/core-js/internals/inherit-if-required.js"); + +module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]); + redefine(NativePrototype, KEY, + KEY == 'add' ? function add(value) { + uncurriedNativeMethod(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : function set(key, value) { + uncurriedNativeMethod(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + var REPLACE = isForced( + CONSTRUCTOR_NAME, + !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () { + new NativeConstructor().entries().next(); + })) + ); + + if (REPLACE) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.enable(); + } else if (isForced(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new -- required for testing + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, NativePrototype); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, forced: Constructor != NativeConstructor }, exported); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/copy-constructor-properties.js": +/*!***************************************************************************!*\ + !*** ../../node_modules/core-js/internals/copy-constructor-properties.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "../../node_modules/core-js/internals/own-keys.js"); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); + +module.exports = function (target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/correct-prototype-getter.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/correct-prototype-getter.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-iterator-constructor.js": +/*!***************************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-iterator-constructor.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ "../../node_modules/core-js/internals/iterators-core.js").IteratorPrototype; +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-non-enumerable-property.js": +/*!******************************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-non-enumerable-property.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-property-descriptor.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-property-descriptor.js ***! + \**************************************************************************/ +/***/ ((module) => { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-property.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-property.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "../../node_modules/core-js/internals/to-property-key.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); + +module.exports = function (object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/define-iterator.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/define-iterator.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var FunctionName = __webpack_require__(/*! ../internals/function-name */ "../../node_modules/core-js/internals/function-name.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ "../../node_modules/core-js/internals/create-iterator-constructor.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../../node_modules/core-js/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "../../node_modules/core-js/internals/iterators-core.js"); + +var PROPER_FUNCTION_NAME = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + redefine(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + + return methods; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/descriptors.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/descriptors.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/document-create-element.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/document-create-element.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-browser.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-browser.js ***! + \*****************************************************************/ +/***/ ((module) => { + +module.exports = typeof window == 'object'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-ios-pebble.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-ios-pebble.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-ios.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-ios.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); + +module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-node.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-node.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = classof(global.process) == 'process'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-webos-webkit.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-webos-webkit.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); + +module.exports = /web0s(?!.*chrome)/i.test(userAgent); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-user-agent.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-user-agent.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); + +module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-v8-version.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-v8-version.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); + +var process = global.process; +var Deno = global.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } +} + +module.exports = version; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/entry-unbind.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/entry-unbind.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +module.exports = function (CONSTRUCTOR, METHOD) { + return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/enum-bug-keys.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/enum-bug-keys.js ***! + \*************************************************************/ +/***/ ((module) => { + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/error-stack-installable.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/error-stack-installable.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); + +module.exports = !fails(function () { + var error = Error('a'); + if (!('stack' in error)) return true; + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7)); + return error.stack !== 7; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/export.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/internals/export.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js").f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../../node_modules/core-js/internals/set-global.js"); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "../../node_modules/core-js/internals/copy-constructor-properties.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "../../node_modules/core-js/internals/is-forced.js"); + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/fails.js": +/*!*****************************************************!*\ + !*** ../../node_modules/core-js/internals/fails.js ***! + \*****************************************************/ +/***/ ((module) => { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/freezing.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/freezing.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-apply.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-apply.js ***! + \**************************************************************/ +/***/ ((module) => { + +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var bind = FunctionPrototype.bind; +var call = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +module.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-bind-context.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-bind-context.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); + +var bind = uncurryThis(uncurryThis.bind); + +// optional / simple context binding +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-call.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-call.js ***! + \*************************************************************/ +/***/ ((module) => { + +var call = Function.prototype.call; + +module.exports = call.bind ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-name.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-name.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); + +var FunctionPrototype = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn(FunctionPrototype, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-uncurry-this.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-uncurry-this.js ***! + \*********************************************************************/ +/***/ ((module) => { + +var FunctionPrototype = Function.prototype; +var bind = FunctionPrototype.bind; +var call = FunctionPrototype.call; +var callBind = bind && bind.bind(call); + +module.exports = bind ? function (fn) { + return fn && callBind(call, fn); +} : function (fn) { + return fn && function () { + return call.apply(fn, arguments); + }; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-built-in.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/get-built-in.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method]; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-iterator-method.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/get-iterator-method.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "../../node_modules/core-js/internals/get-method.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (it != undefined) return getMethod(it, ITERATOR) + || getMethod(it, '@@iterator') + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-iterator.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/get-iterator.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../../node_modules/core-js/internals/get-iterator-method.js"); + +var TypeError = global.TypeError; + +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); + throw TypeError(tryToString(argument) + ' is not iterable'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-method.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/get-method.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +module.exports = function (V, P) { + var func = V[P]; + return func == null ? undefined : aCallable(func); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/global.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/internals/global.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/has-own-property.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/has-own-property.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); + +var hasOwnProperty = uncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/hidden-keys.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/hidden-keys.js ***! + \***********************************************************/ +/***/ ((module) => { + +module.exports = {}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/host-report-errors.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/host-report-errors.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = function (a, b) { + var console = global.console; + if (console && console.error) { + arguments.length == 1 ? console.error(a) : console.error(a, b); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/html.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/internals/html.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/ie8-dom-define.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/ie8-dom-define.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "../../node_modules/core-js/internals/document-create-element.js"); + +// Thank's IE8 for his funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- requied for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/indexed-object.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/indexed-object.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); + +var Object = global.Object; +var split = uncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split(it, '') : Object(it); +} : Object; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/inherit-if-required.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/inherit-if-required.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); + +// makes subclassing work correct for wrapped built-ins +module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) setPrototypeOf($this, NewTargetPrototype); + return $this; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/inspect-source.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/inspect-source.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var store = __webpack_require__(/*! ../internals/shared-store */ "../../node_modules/core-js/internals/shared-store.js"); + +var functionToString = uncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/install-error-cause.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/install-error-cause.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); + +// `InstallErrorCause` abstract operation +// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause +module.exports = function (O, options) { + if (isObject(options) && 'cause' in options) { + createNonEnumerableProperty(O, 'cause', options.cause); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/internal-metadata.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/internal-metadata.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js").f; +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../../node_modules/core-js/internals/object-get-own-property-names.js"); +var getOwnPropertyNamesExternalModule = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ "../../node_modules/core-js/internals/object-get-own-property-names-external.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "../../node_modules/core-js/internals/uid.js"); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ "../../node_modules/core-js/internals/freezing.js"); + +var REQUIRED = false; +var METADATA = uid('meta'); +var id = 0; + +// eslint-disable-next-line es/no-object-isextensible -- safe +var isExtensible = Object.isExtensible || function () { + return true; +}; + +var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + id++, // object ID + weakData: {} // weak collections IDs + } }); +}; + +var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; +}; + +var getWeakData = function (it, create) { + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; +}; + +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it); + return it; +}; + +var enable = function () { + meta.enable = function () { /* empty */ }; + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = uncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + + // prevent exposing of metadata key + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function (it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } return result; + }; + + $({ target: 'Object', stat: true, forced: true }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } +}; + +var meta = module.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze +}; + +hiddenKeys[METADATA] = true; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/internal-state.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/internal-state.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "../../node_modules/core-js/internals/native-weak-map.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var shared = __webpack_require__(/*! ../internals/shared-store */ "../../node_modules/core-js/internals/shared-store.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../../node_modules/core-js/internals/shared-key.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = global.TypeError; +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + var wmget = uncurryThis(store.get); + var wmhas = uncurryThis(store.has); + var wmset = uncurryThis(store.set); + set = function (it, metadata) { + if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget(store, it) || {}; + }; + has = function (it) { + return wmhas(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-array-iterator-method.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/is-array-iterator-method.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-array.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-array.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); + +// `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es/no-array-isarray -- safe +module.exports = Array.isArray || function isArray(argument) { + return classof(argument) == 'Array'; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-callable.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-callable.js ***! + \***********************************************************/ +/***/ ((module) => { + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +module.exports = function (argument) { + return typeof argument == 'function'; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-constructor.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/is-constructor.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); + +var noop = function () { /* empty */ }; +var empty = []; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); + +var isConstructorModern = function (argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, empty, argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function (argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + // we can't check .prototype since constructors produced by .bind haven't it + } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); +}; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-forced.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-forced.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-integral-number.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/is-integral-number.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var floor = Math.floor; + +// `IsIntegralNumber` abstract operation +// https://tc39.es/ecma262/#sec-isintegralnumber +// eslint-disable-next-line es/no-number-isinteger -- safe +module.exports = Number.isInteger || function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-object.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-object.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +module.exports = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-pure.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/is-pure.js ***! + \*******************************************************/ +/***/ ((module) => { + +module.exports = false; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-symbol.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-symbol.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "../../node_modules/core-js/internals/use-symbol-as-uid.js"); + +var Object = global.Object; + +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterate.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/iterate.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "../../node_modules/core-js/internals/is-array-iterator-method.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "../../node_modules/core-js/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../../node_modules/core-js/internals/get-iterator-method.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "../../node_modules/core-js/internals/iterator-close.js"); + +var TypeError = global.TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterator-close.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/iterator-close.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "../../node_modules/core-js/internals/get-method.js"); + +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterators-core.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/iterators-core.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../../node_modules/core-js/internals/object-get-prototype-of.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +// `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +/* eslint-disable es/no-array-prototype-keys -- safe */ +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype[ITERATOR].call(test) !== test; +}); + +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; +else if (IS_PURE) IteratorPrototype = create(IteratorPrototype); + +// `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator +if (!isCallable(IteratorPrototype[ITERATOR])) { + redefine(IteratorPrototype, ITERATOR, function () { + return this; + }); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterators.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/iterators.js ***! + \*********************************************************/ +/***/ ((module) => { + +module.exports = {}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/length-of-array-like.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/length-of-array-like.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toLength = __webpack_require__(/*! ../internals/to-length */ "../../node_modules/core-js/internals/to-length.js"); + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +module.exports = function (obj) { + return toLength(obj.length); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/microtask.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/microtask.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js").f; +var macrotask = __webpack_require__(/*! ../internals/task */ "../../node_modules/core-js/internals/task.js").set; +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ "../../node_modules/core-js/internals/engine-is-ios.js"); +var IS_IOS_PEBBLE = __webpack_require__(/*! ../internals/engine-is-ios-pebble */ "../../node_modules/core-js/internals/engine-is-ios-pebble.js"); +var IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/engine-is-webos-webkit */ "../../node_modules/core-js/internals/engine-is-webos-webkit.js"); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ "../../node_modules/core-js/internals/engine-is-node.js"); + +var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; +var document = global.document; +var process = global.process; +var Promise = global.Promise; +// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` +var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); +var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + +var flush, head, last, notify, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify(); + else last = undefined; + throw error; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise; + then = bind(promise.then, promise); + notify = function () { + then(flush); + }; + // Node.js without promises + } else if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + // strange IE + webpack dev server bug - use .bind(global) + macrotask = bind(macrotask, global); + notify = function () { + macrotask(flush); + }; + } +} + +module.exports = queueMicrotask || function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/native-promise-constructor.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/core-js/internals/native-promise-constructor.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = global.Promise; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/native-symbol.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/native-symbol.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "../../node_modules/core-js/internals/engine-v8-version.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol(); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + return !String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/native-weak-map.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/native-weak-map.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); + +var WeakMap = global.WeakMap; + +module.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap)); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/new-promise-capability.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/new-promise-capability.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); +}; + +// `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/normalize-string-argument.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/core-js/internals/normalize-string-argument.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); + +module.exports = function (argument, $default) { + return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/number-parse-float.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/number-parse-float.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var trim = __webpack_require__(/*! ../internals/string-trim */ "../../node_modules/core-js/internals/string-trim.js").trim; +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "../../node_modules/core-js/internals/whitespaces.js"); + +var charAt = uncurryThis(''.charAt); +var n$ParseFloat = global.parseFloat; +var Symbol = global.Symbol; +var ITERATOR = Symbol && Symbol.iterator; +var FORCED = 1 / n$ParseFloat(whitespaces + '-0') !== -Infinity + // MS Edge 18- broken with boxed symbols + || (ITERATOR && !fails(function () { n$ParseFloat(Object(ITERATOR)); })); + +// `parseFloat` method +// https://tc39.es/ecma262/#sec-parsefloat-string +module.exports = FORCED ? function parseFloat(string) { + var trimmedString = trim(toString(string)); + var result = n$ParseFloat(trimmedString); + return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result; +} : n$ParseFloat; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/number-parse-int.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/number-parse-int.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var trim = __webpack_require__(/*! ../internals/string-trim */ "../../node_modules/core-js/internals/string-trim.js").trim; +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "../../node_modules/core-js/internals/whitespaces.js"); + +var $parseInt = global.parseInt; +var Symbol = global.Symbol; +var ITERATOR = Symbol && Symbol.iterator; +var hex = /^[+-]?0x/i; +var exec = uncurryThis(hex.exec); +var FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22 + // MS Edge 18- broken with boxed symbols + || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); })); + +// `parseInt` method +// https://tc39.es/ecma262/#sec-parseint-string-radix +module.exports = FORCED ? function parseInt(string, radix) { + var S = trim(toString(string)); + return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10)); +} : $parseInt; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-assign.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-assign.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../../node_modules/core-js/internals/object-keys.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "../../node_modules/core-js/internals/object-get-own-property-symbols.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../../node_modules/core-js/internals/object-property-is-enumerable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../../node_modules/core-js/internals/indexed-object.js"); + +// eslint-disable-next-line es/no-object-assign -- safe +var $assign = Object.assign; +// eslint-disable-next-line es/no-object-defineproperty -- required for testing +var defineProperty = Object.defineProperty; +var concat = uncurryThis([].concat); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +module.exports = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; +} : $assign; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-create.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-create.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* global ActiveXObject -- old IE, WSH */ +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "../../node_modules/core-js/internals/object-define-properties.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../../node_modules/core-js/internals/enum-bug-keys.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); +var html = __webpack_require__(/*! ../internals/html */ "../../node_modules/core-js/internals/html.js"); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "../../node_modules/core-js/internals/document-create-element.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../../node_modules/core-js/internals/shared-key.js"); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : defineProperties(result, Properties); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-define-properties.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-define-properties.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../../node_modules/core-js/internals/object-keys.js"); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-define-property.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-define-property.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "../../node_modules/core-js/internals/ie8-dom-define.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "../../node_modules/core-js/internals/to-property-key.js"); + +var TypeError = global.TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js": +/*!**********************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-descriptor.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../../node_modules/core-js/internals/object-property-is-enumerable.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "../../node_modules/core-js/internals/to-property-key.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "../../node_modules/core-js/internals/ie8-dom-define.js"); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-names-external.js": +/*!**************************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-names-external.js ***! + \**************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable es/no-object-getownpropertynames -- safe */ +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var $getOwnPropertyNames = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../../node_modules/core-js/internals/object-get-own-property-names.js").f; +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "../../node_modules/core-js/internals/array-slice.js"); + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } +}; + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) == 'Window' + ? getWindowNames(it) + : $getOwnPropertyNames(toIndexedObject(it)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-names.js": +/*!*****************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-names.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "../../node_modules/core-js/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../../node_modules/core-js/internals/enum-bug-keys.js"); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-symbols.js": +/*!*******************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-symbols.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-prototype-of.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-prototype-of.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../../node_modules/core-js/internals/shared-key.js"); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "../../node_modules/core-js/internals/correct-prototype-getter.js"); + +var IE_PROTO = sharedKey('IE_PROTO'); +var Object = global.Object; +var ObjectPrototype = Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-is-prototype-of.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-is-prototype-of.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +module.exports = uncurryThis({}.isPrototypeOf); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-keys-internal.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-keys-internal.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ "../../node_modules/core-js/internals/array-includes.js").indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); + +var push = uncurryThis([].push); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-keys.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/object-keys.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "../../node_modules/core-js/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../../node_modules/core-js/internals/enum-bug-keys.js"); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-property-is-enumerable.js": +/*!*****************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-property-is-enumerable.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-set-prototype-of.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-set-prototype-of.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable no-proto -- safe */ +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "../../node_modules/core-js/internals/a-possible-prototype.js"); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-to-array.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-to-array.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../../node_modules/core-js/internals/object-keys.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var $propertyIsEnumerable = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../../node_modules/core-js/internals/object-property-is-enumerable.js").f; + +var propertyIsEnumerable = uncurryThis($propertyIsEnumerable); +var push = uncurryThis([].push); + +// `Object.{ entries, values }` methods implementation +var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS || propertyIsEnumerable(O, key)) { + push(result, TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; +}; + +module.exports = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod(false) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-to-string.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-to-string.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "../../node_modules/core-js/internals/to-string-tag-support.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); + +// `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/ordinary-to-primitive.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/ordinary-to-primitive.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var TypeError = global.TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/own-keys.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/own-keys.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../../node_modules/core-js/internals/object-get-own-property-names.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "../../node_modules/core-js/internals/object-get-own-property-symbols.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); + +var concat = uncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/path.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/internals/path.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = global; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/perform.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/perform.js ***! + \*******************************************************/ +/***/ ((module) => { + +module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/promise-resolve.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/promise-resolve.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/redefine-all.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/redefine-all.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); + +module.exports = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/redefine.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/redefine.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../../node_modules/core-js/internals/set-global.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var CONFIGURABLE_FUNCTION_NAME = __webpack_require__(/*! ../internals/function-name */ "../../node_modules/core-js/internals/function-name.js").CONFIGURABLE; + +var getInternalState = InternalStateModule.get; +var enforceInternalState = InternalStateModule.enforce; +var TEMPLATE = String(String).split('String'); + +(module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + var name = options && options.name !== undefined ? options.name : key; + var state; + if (isCallable(value)) { + if (String(name).slice(0, 7) === 'Symbol(') { + name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'; + } + if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + createNonEnumerableProperty(value, 'name', name); + } + state = enforceInternalState(value); + if (!state.source) { + state.source = TEMPLATE.join(typeof name == 'string' ? name : ''); + } + } + if (O === global) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, 'toString', function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/require-object-coercible.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/require-object-coercible.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +var TypeError = global.TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/set-global.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/set-global.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +module.exports = function (key, value) { + try { + defineProperty(global, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global[key] = value; + } return value; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/set-species.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/set-species.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/set-to-string-tag.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/set-to-string-tag.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js").f; +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC) { + if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/shared-key.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/shared-key.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var shared = __webpack_require__(/*! ../internals/shared */ "../../node_modules/core-js/internals/shared.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "../../node_modules/core-js/internals/uid.js"); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/shared-store.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/shared-store.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../../node_modules/core-js/internals/set-global.js"); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/shared.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/internals/shared.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var store = __webpack_require__(/*! ../internals/shared-store */ "../../node_modules/core-js/internals/shared-store.js"); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.19.0', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/species-constructor.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/species-constructor.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var aConstructor = __webpack_require__(/*! ../internals/a-constructor */ "../../node_modules/core-js/internals/a-constructor.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/string-multibyte.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/string-multibyte.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "../../node_modules/core-js/internals/to-integer-or-infinity.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); + +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var stringSlice = uncurryThis(''.slice); + +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/string-trim.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/string-trim.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "../../node_modules/core-js/internals/whitespaces.js"); + +var replace = uncurryThis(''.replace); +var whitespace = '[' + whitespaces + ']'; +var ltrim = RegExp('^' + whitespace + whitespace + '*'); +var rtrim = RegExp(whitespace + whitespace + '*$'); + +// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation +var createMethod = function (TYPE) { + return function ($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) string = replace(string, ltrim, ''); + if (TYPE & 2) string = replace(string, rtrim, ''); + return string; + }; +}; + +module.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/task.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/internals/task.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "../../node_modules/core-js/internals/function-apply.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var html = __webpack_require__(/*! ../internals/html */ "../../node_modules/core-js/internals/html.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "../../node_modules/core-js/internals/array-slice.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "../../node_modules/core-js/internals/document-create-element.js"); +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ "../../node_modules/core-js/internals/engine-is-ios.js"); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ "../../node_modules/core-js/internals/engine-is-node.js"); + +var set = global.setImmediate; +var clear = global.clearImmediate; +var process = global.process; +var Dispatch = global.Dispatch; +var Function = global.Function; +var MessageChannel = global.MessageChannel; +var String = global.String; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var location, defer, channel, port; + +try { + // Deno throws a ReferenceError on `location` access without `--location` flag + location = global.location; +} catch (error) { /* empty */ } + +var run = function (id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var listener = function (event) { + run(event.data); +}; + +var post = function (id) { + // old engines have not location.origin + global.postMessage(String(id), location.protocol + '//' + location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(fn) { + var args = arraySlice(arguments, 1); + queue[++counter] = function () { + apply(isCallable(fn) ? fn : Function(fn), undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (IS_NODE) { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global.addEventListener && + isCallable(global.postMessage) && + !global.importScripts && + location && location.protocol !== 'file:' && + !fails(post) + ) { + defer = post; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +module.exports = { + set: set, + clear: clear +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-absolute-index.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-absolute-index.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "../../node_modules/core-js/internals/to-integer-or-infinity.js"); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-indexed-object.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-indexed-object.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../../node_modules/core-js/internals/indexed-object.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-integer-or-infinity.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-integer-or-infinity.js ***! + \**********************************************************************/ +/***/ ((module) => { + +var ceil = Math.ceil; +var floor = Math.floor; + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +module.exports = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- safe + return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-length.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/to-length.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "../../node_modules/core-js/internals/to-integer-or-infinity.js"); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-object.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/to-object.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); + +var Object = global.Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-primitive.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-primitive.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "../../node_modules/core-js/internals/is-symbol.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "../../node_modules/core-js/internals/get-method.js"); +var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ "../../node_modules/core-js/internals/ordinary-to-primitive.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TypeError = global.TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-property-key.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-property-key.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "../../node_modules/core-js/internals/to-primitive.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "../../node_modules/core-js/internals/is-symbol.js"); + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-string-tag-support.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-string-tag-support.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-string.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/to-string.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); + +var String = global.String; + +module.exports = function (argument) { + if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); + return String(argument); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/try-to-string.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/try-to-string.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +var String = global.String; + +module.exports = function (argument) { + try { + return String(argument); + } catch (error) { + return 'Object'; + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/uid.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-js/internals/uid.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); + +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/use-symbol-as-uid.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/use-symbol-as-uid.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "../../node_modules/core-js/internals/native-symbol.js"); + +module.exports = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/well-known-symbol.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/well-known-symbol.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "../../node_modules/core-js/internals/shared.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "../../node_modules/core-js/internals/uid.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "../../node_modules/core-js/internals/native-symbol.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "../../node_modules/core-js/internals/use-symbol-as-uid.js"); + +var WellKnownSymbolsStore = shared('wks'); +var Symbol = global.Symbol; +var symbolFor = Symbol && Symbol['for']; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) { + var description = 'Symbol.' + name; + if (NATIVE_SYMBOL && hasOwn(Symbol, name)) { + WellKnownSymbolsStore[name] = Symbol[name]; + } else if (USE_SYMBOL_AS_UID && symbolFor) { + WellKnownSymbolsStore[name] = symbolFor(description); + } else { + WellKnownSymbolsStore[name] = createWellKnownSymbol(description); + } + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/whitespaces.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/whitespaces.js ***! + \***********************************************************/ +/***/ ((module) => { + +// a string of all valid unicode whitespaces +module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.aggregate-error.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.aggregate-error.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../../node_modules/core-js/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "../../node_modules/core-js/internals/copy-constructor-properties.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); +var clearErrorStack = __webpack_require__(/*! ../internals/clear-error-stack */ "../../node_modules/core-js/internals/clear-error-stack.js"); +var installErrorCause = __webpack_require__(/*! ../internals/install-error-cause */ "../../node_modules/core-js/internals/install-error-cause.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ "../../node_modules/core-js/internals/normalize-string-argument.js"); +var ERROR_STACK_INSTALLABLE = __webpack_require__(/*! ../internals/error-stack-installable */ "../../node_modules/core-js/internals/error-stack-installable.js"); + +var Error = global.Error; +var push = [].push; + +var $AggregateError = function AggregateError(errors, message /* , options */) { + var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype); + var options = arguments.length > 2 ? arguments[2] : undefined; + if (setPrototypeOf) { + that = setPrototypeOf(new Error(undefined), getPrototypeOf(that)); + } + createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, '')); + if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1)); + installErrorCause(that, options); + var errorsArray = []; + iterate(errors, push, { that: errorsArray }); + createNonEnumerableProperty(that, 'errors', errorsArray); + return that; +}; + +if (setPrototypeOf) setPrototypeOf($AggregateError, Error); +else copyConstructorProperties($AggregateError, Error); + +var AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, { + constructor: createPropertyDescriptor(1, $AggregateError), + message: createPropertyDescriptor(1, ''), + name: createPropertyDescriptor(1, 'AggregateError') +}); + +// `AggregateError` constructor +// https://tc39.es/ecma262/#sec-aggregate-error-constructor +$({ global: true }, { + AggregateError: $AggregateError +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.array.find.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/modules/es.array.find.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var $find = __webpack_require__(/*! ../internals/array-iteration */ "../../node_modules/core-js/internals/array-iteration.js").find; +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "../../node_modules/core-js/internals/add-to-unscopables.js"); + +var FIND = 'find'; +var SKIPS_HOLES = true; + +// Shouldn't skip holes +if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.find` method +// https://tc39.es/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.array.from.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/modules/es.array.from.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var from = __webpack_require__(/*! ../internals/array-from */ "../../node_modules/core-js/internals/array-from.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../../node_modules/core-js/internals/check-correctness-of-iteration.js"); + +var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + // eslint-disable-next-line es/no-array-from -- required for testing + Array.from(iterable); +}); + +// `Array.from` method +// https://tc39.es/ecma262/#sec-array.from +$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.array.iterator.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.array.iterator.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "../../node_modules/core-js/internals/add-to-unscopables.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../../node_modules/core-js/internals/define-iterator.js"); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject +Iterators.Arguments = Iterators.Array; + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.map.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/modules/es.map.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var collection = __webpack_require__(/*! ../internals/collection */ "../../node_modules/core-js/internals/collection.js"); +var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ "../../node_modules/core-js/internals/collection-strong.js"); + +// `Map` constructor +// https://tc39.es/ecma262/#sec-map-objects +collection('Map', function (init) { + return function Map() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.is-integer.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.is-integer.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var isIntegralNumber = __webpack_require__(/*! ../internals/is-integral-number */ "../../node_modules/core-js/internals/is-integral-number.js"); + +// `Number.isInteger` method +// https://tc39.es/ecma262/#sec-number.isinteger +$({ target: 'Number', stat: true }, { + isInteger: isIntegralNumber +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.is-nan.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.is-nan.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); + +// `Number.isNaN` method +// https://tc39.es/ecma262/#sec-number.isnan +$({ target: 'Number', stat: true }, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare -- NaN check + return number != number; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.parse-float.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.parse-float.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var parseFloat = __webpack_require__(/*! ../internals/number-parse-float */ "../../node_modules/core-js/internals/number-parse-float.js"); + +// `Number.parseFloat` method +// https://tc39.es/ecma262/#sec-number.parseFloat +// eslint-disable-next-line es/no-number-parsefloat -- required for testing +$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, { + parseFloat: parseFloat +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.parse-int.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.parse-int.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var parseInt = __webpack_require__(/*! ../internals/number-parse-int */ "../../node_modules/core-js/internals/number-parse-int.js"); + +// `Number.parseInt` method +// https://tc39.es/ecma262/#sec-number.parseint +// eslint-disable-next-line es/no-number-parseint -- required for testing +$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, { + parseInt: parseInt +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.assign.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.assign.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var assign = __webpack_require__(/*! ../internals/object-assign */ "../../node_modules/core-js/internals/object-assign.js"); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es/no-object-assign -- required for testing +$({ target: 'Object', stat: true, forced: Object.assign !== assign }, { + assign: assign +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.entries.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.entries.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var $entries = __webpack_require__(/*! ../internals/object-to-array */ "../../node_modules/core-js/internals/object-to-array.js").entries; + +// `Object.entries` method +// https://tc39.es/ecma262/#sec-object.entries +$({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.set-prototype-of.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.set-prototype-of.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +$({ target: 'Object', stat: true }, { + setPrototypeOf: setPrototypeOf +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.to-string.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.to-string.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "../../node_modules/core-js/internals/to-string-tag-support.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var toString = __webpack_require__(/*! ../internals/object-to-string */ "../../node_modules/core-js/internals/object-to-string.js"); + +// `Object.prototype.toString` method +// https://tc39.es/ecma262/#sec-object.prototype.tostring +if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, { unsafe: true }); +} + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.all-settled.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.all-settled.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "../../node_modules/core-js/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); + +// `Promise.allSettled` method +// https://tc39.es/ecma262/#sec-promise.allsettled +$({ target: 'Promise', stat: true }, { + allSettled: function allSettled(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'fulfilled', value: value }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'rejected', reason: error }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.any.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.any.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "../../node_modules/core-js/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); + +var PROMISE_ANY_ERROR = 'No one promise resolved'; + +// `Promise.any` method +// https://tc39.es/ecma262/#sec-promise.any +$({ target: 'Promise', stat: true }, { + any: function any(iterable) { + var C = this; + var AggregateError = getBuiltIn('AggregateError'); + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyRejected || alreadyResolved) return; + alreadyResolved = true; + resolve(value); + }, function (error) { + if (alreadyRejected || alreadyResolved) return; + alreadyRejected = true; + errors[index] = error; + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.finally.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.finally.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "../../node_modules/core-js/internals/native-promise-constructor.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "../../node_modules/core-js/internals/species-constructor.js"); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "../../node_modules/core-js/internals/promise-resolve.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); + +// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 +var NON_GENERIC = !!NativePromise && fails(function () { + NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); +}); + +// `Promise.prototype.finally` method +// https://tc39.es/ecma262/#sec-promise.prototype.finally +$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { + 'finally': function (onFinally) { + var C = speciesConstructor(this, getBuiltIn('Promise')); + var isFunction = isCallable(onFinally); + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); + } +}); + +// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromise)) { + var method = getBuiltIn('Promise').prototype['finally']; + if (NativePromise.prototype['finally'] !== method) { + redefine(NativePromise.prototype, 'finally', method, { unsafe: true }); + } +} + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "../../node_modules/core-js/internals/native-promise-constructor.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "../../node_modules/core-js/internals/redefine-all.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "../../node_modules/core-js/internals/set-species.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../../node_modules/core-js/internals/an-instance.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../../node_modules/core-js/internals/check-correctness-of-iteration.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "../../node_modules/core-js/internals/species-constructor.js"); +var task = __webpack_require__(/*! ../internals/task */ "../../node_modules/core-js/internals/task.js").set; +var microtask = __webpack_require__(/*! ../internals/microtask */ "../../node_modules/core-js/internals/microtask.js"); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "../../node_modules/core-js/internals/promise-resolve.js"); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ "../../node_modules/core-js/internals/host-report-errors.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "../../node_modules/core-js/internals/perform.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "../../node_modules/core-js/internals/is-forced.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var IS_BROWSER = __webpack_require__(/*! ../internals/engine-is-browser */ "../../node_modules/core-js/internals/engine-is-browser.js"); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ "../../node_modules/core-js/internals/engine-is-node.js"); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "../../node_modules/core-js/internals/engine-v8-version.js"); + +var SPECIES = wellKnownSymbol('species'); +var PROMISE = 'Promise'; + +var getInternalState = InternalStateModule.get; +var setInternalState = InternalStateModule.set; +var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); +var NativePromisePrototype = NativePromise && NativePromise.prototype; +var PromiseConstructor = NativePromise; +var PromisePrototype = NativePromisePrototype; +var TypeError = global.TypeError; +var document = global.document; +var process = global.process; +var newPromiseCapability = newPromiseCapabilityModule.f; +var newGenericPromiseCapability = newPromiseCapability; + +var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); +var NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; +var SUBCLASSING = false; + +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +var FORCED = isForced(PROMISE, function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; + // We need Promise#finally in the pure version for preventing prototype pollution + if (IS_PURE && !PromisePrototype['finally']) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false; + // Detect correctness of subclassing with @@species support + var promise = new PromiseConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT; +}); + +var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); +}); + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + call(task, global, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + call(task, global, function () { + var promise = state.facade; + if (IS_NODE) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + call(then, value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + PromisePrototype = PromiseConstructor.prototype; + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromisePrototype, { + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reactions = state.reactions; + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + state.parent = true; + reactions[reactions.length] = reaction; + if (state.state != PENDING) notify(state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.es/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` + redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } +} + +$({ global: true, wrap: true, forced: FORCED }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false, true); +setSpecies(PROMISE); + +PromiseWrapper = getBuiltIn(PROMISE); + +// statics +$({ target: PROMISE, stat: true, forced: FORCED }, { + // `Promise.reject` method + // https://tc39.es/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + call(capability.reject, undefined, r); + return capability.promise; + } +}); + +$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { + // `Promise.resolve` method + // https://tc39.es/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); + } +}); + +$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { + // `Promise.all` method + // https://tc39.es/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.es/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.string.iterator.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.string.iterator.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var charAt = __webpack_require__(/*! ../internals/string-multibyte */ "../../node_modules/core-js/internals/string-multibyte.js").charAt; +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../../node_modules/core-js/internals/define-iterator.js"); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; +}); + + +/***/ }), + +/***/ "../../node_modules/guid/guid.js": +/*!***************************************!*\ + !*** ../../node_modules/guid/guid.js ***! + \***************************************/ +/***/ ((module) => { + +(function () { + var validator = new RegExp("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$", "i"); + + function gen(count) { + var out = ""; + for (var i=0; i { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TableauEvent = /** @class */ (function () { + function TableauEvent(type) { + this._type = type; + } + Object.defineProperty(TableauEvent.prototype, "type", { + get: function () { + return this._type; + }, + enumerable: true, + configurable: true + }); + return TableauEvent; +}()); +exports.TableauEvent = TableauEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/TableauSheetEvent.js": +/*!***********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/TableauSheetEvent.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TableauEvent_1 = __webpack_require__(/*! ./TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var TableauSheetEvent = /** @class */ (function (_super) { + __extends(TableauSheetEvent, _super); + function TableauSheetEvent(type, sheet) { + var _this = _super.call(this, type) || this; + _this._sheet = sheet; + return _this; + } + Object.defineProperty(TableauSheetEvent.prototype, "sheet", { + get: function () { + return this._sheet; + }, + enumerable: true, + configurable: true + }); + return TableauSheetEvent; +}(TableauEvent_1.TableauEvent)); +exports.TableauSheetEvent = TableauSheetEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js": +/*!***************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TableauSheetEvent_1 = __webpack_require__(/*! ./TableauSheetEvent */ "./lib/src/ExtensionsApi/Events/TableauSheetEvent.js"); +var TableauWorksheetEvent = /** @class */ (function (_super) { + __extends(TableauWorksheetEvent, _super); + function TableauWorksheetEvent(type, _worksheet) { + var _this = _super.call(this, type, _worksheet) || this; + _this._worksheet = _worksheet; + return _this; + } + Object.defineProperty(TableauWorksheetEvent.prototype, "worksheet", { + get: function () { + return this._worksheet; + }, + enumerable: true, + configurable: true + }); + return TableauWorksheetEvent; +}(TableauSheetEvent_1.TableauSheetEvent)); +exports.TableauWorksheetEvent = TableauWorksheetEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js": +/*!************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js ***! + \************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauEvent_1 = __webpack_require__(/*! ./TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var WorkbookFormattingChangedEvent = /** @class */ (function (_super) { + __extends(WorkbookFormattingChangedEvent, _super); + function WorkbookFormattingChangedEvent(_formatting) { + var _this = _super.call(this, Contract.TableauEventType.WorkbookFormattingChanged) || this; + _this._formatting = _formatting; + return _this; + } + Object.defineProperty(WorkbookFormattingChangedEvent.prototype, "formatting", { + get: function () { + return this._formatting; + }, + enumerable: true, + configurable: true + }); + return WorkbookFormattingChangedEvent; +}(TableauEvent_1.TableauEvent)); +exports.WorkbookFormattingChangedEvent = WorkbookFormattingChangedEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js": +/*!*******************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BentonSansFontFamilyName = 'Benton Sans'; +exports.BentonSansLowDPIFontFamilyName = 'Benton Sans Low-DPI'; +exports.BentonSansBookFontFaceName = 'Benton Sans Book'; +exports.BentonSansBookItalicFontFaceName = 'Benton Sans Book Italic'; +exports.BentonSansSemiDemiFontFaceName = 'Benton Sans SemiDemi'; +exports.BentonSansSemiDemiItalicFontFaceName = 'Benton Sans SemiDemi Italic'; +exports.BentonSansLightFontFaceName = 'Benton Sans Light'; +exports.BentonSansMediumFontFaceName = 'Benton Sans Medium'; +exports.SupportedBentonSansFontFaces = [ + exports.BentonSansBookFontFaceName, + exports.BentonSansBookItalicFontFaceName, + exports.BentonSansSemiDemiFontFaceName, + exports.BentonSansSemiDemiItalicFontFaceName, + exports.BentonSansLightFontFaceName, + exports.BentonSansMediumFontFaceName, +]; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/ConnectedServer.js": +/*!*******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/ConnectedServer.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ConnectedServer = /** @class */ (function () { + function ConnectedServer(_userId, _siteId, _siteNamespace, _workbookId) { + this._userId = _userId; + this._siteId = _siteId; + this._siteNamespace = _siteNamespace; + this._workbookId = _workbookId; + } + Object.defineProperty(ConnectedServer.prototype, "userId", { + get: function () { + return this._userId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectedServer.prototype, "siteId", { + get: function () { + return this._siteId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectedServer.prototype, "siteNamespace", { + get: function () { + return this._siteNamespace; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectedServer.prototype, "workbookId", { + get: function () { + return this._workbookId; + }, + enumerable: true, + configurable: true + }); + return ConnectedServer; +}()); +exports.ConnectedServer = ConnectedServer; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js": +/*!*************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var ExtensionWorkbookImpl = /** @class */ (function (_super) { + __extends(ExtensionWorkbookImpl, _super); + function ExtensionWorkbookImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + ExtensionWorkbookImpl.prototype.getAllDataSourcesAsync = function () { + var _this = this; + var service = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("data-source-service" /* DataSourceService */); + return service.getAllDataSourcesAsync().then(function (result) { + var dataSchema = result; + var dataSources = []; + // Loop through all data sources and add them. + Object.values(dataSchema.dataSources).forEach(function (ds) { + dataSources.push(_this.createDataSourceFromInfo(ds)); + }); + return dataSources; + }); + }; + ExtensionWorkbookImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) { + var dataSourceImpl = new api_shared_js_1.DataSourceImpl(dataSourceInfo, ServiceRegistryUtil_1.ExtensionsRegistryId); + var dataSource = new api_shared_js_1.DataSource(dataSourceImpl); + dataSourceImpl.initializeWithPublicInterfaces(dataSource); + return dataSource; + }; + return ExtensionWorkbookImpl; +}(api_shared_js_1.WorkbookImpl)); +exports.ExtensionWorkbookImpl = ExtensionWorkbookImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js": +/*!******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var Dashboard_1 = __webpack_require__(/*! ../Models/Dashboard */ "./lib/src/ExtensionsApi/Models/Dashboard.js"); +var Workbook_1 = __webpack_require__(/*! ../Models/Workbook */ "./lib/src/ExtensionsApi/Models/Workbook.js"); +var Worksheet_1 = __webpack_require__(/*! ../Models/Worksheet */ "./lib/src/ExtensionsApi/Models/Worksheet.js"); +var DashboardContent_1 = __webpack_require__(/*! ../Namespaces/DashboardContent */ "./lib/src/ExtensionsApi/Namespaces/DashboardContent.js"); +var Environment_1 = __webpack_require__(/*! ../Namespaces/Environment */ "./lib/src/ExtensionsApi/Namespaces/Environment.js"); +var Settings_1 = __webpack_require__(/*! ../Namespaces/Settings */ "./lib/src/ExtensionsApi/Namespaces/Settings.js"); +var UI_1 = __webpack_require__(/*! ../Namespaces/UI */ "./lib/src/ExtensionsApi/Namespaces/UI.js"); +var WorksheetContent_1 = __webpack_require__(/*! ../Namespaces/WorksheetContent */ "./lib/src/ExtensionsApi/Namespaces/WorksheetContent.js"); +var RegisterAllExtensionsServices_1 = __webpack_require__(/*! ../Services/RegisterAllExtensionsServices */ "./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var BentonSansFontNameConstants_1 = __webpack_require__(/*! ./BentonSansFontNameConstants */ "./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js"); +var ExtensionWorkbookImpl_1 = __webpack_require__(/*! ./ExtensionWorkbookImpl */ "./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js"); +var LegacyInternalApiDispatcherHolder_1 = __webpack_require__(/*! ./LegacyInternalApiDispatcherHolder */ "./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js"); +var SettingsImpl_1 = __webpack_require__(/*! ./SettingsImpl */ "./lib/src/ExtensionsApi/Impl/SettingsImpl.js"); +var TableauBookFontNameConstants_1 = __webpack_require__(/*! ./TableauBookFontNameConstants */ "./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js"); +var UIImpl_1 = __webpack_require__(/*! ./UIImpl */ "./lib/src/ExtensionsApi/Impl/UIImpl.js"); +var ExtensionsImpl = /** @class */ (function () { + function ExtensionsImpl() { + } + ExtensionsImpl.prototype.initializeAsync = function (isExtensionDialog, contextMenuCallbacks) { + var _this = this; + if (!this._initializationPromise) { + this._initializationPromise = new Promise(function (resolve, reject) { + var _a; + var initOptions = { isAlpha: api_shared_js_1.ApiVersion.Instance.isAlpha }; + // First thing we want to do is check to see if there is a desktop dispatcher already registered for us + if (LegacyInternalApiDispatcherHolder_1.LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise(initOptions)) { + // Running in a pre-2019.3 desktop, use our legacy dispatcher promise + var desktopDispatcherPromise = LegacyInternalApiDispatcherHolder_1.LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise(initOptions); + (_a = desktopDispatcherPromise) === null || _a === void 0 ? void 0 : _a.then(function (dispatcherFactory) { return _this.onDispatcherReceived(dispatcherFactory, isExtensionDialog, contextMenuCallbacks); }).then(function (openPayload) { + resolve(openPayload); + }).catch(function (error) { + reject(error); + }); + } + else { + // We must be running in server, so we should try to kick of the server dispatcher bootstrapping + var onDispatcherReceivedCallback_1 = _this.onDispatcherReceived.bind(_this); + api_shared_js_1.doCrossFrameBootstrap(window, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, initOptions) + .then(function (factory) { + return onDispatcherReceivedCallback_1(factory, isExtensionDialog, contextMenuCallbacks); + }) + .then(function (openPayload) { + resolve(openPayload); + }) + .catch(function (error) { + reject(error); + }); + } + }); + } + return this._initializationPromise; + }; + ExtensionsImpl.prototype.createVizImageAsync = function (inputSpec) { + var vizService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("viz-service" /* Viz */); + return vizService.createVizImageAsync(inputSpec); + }; + ExtensionsImpl.prototype.setClickThroughAsync = function (clickThroughEnabled) { + var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("UIService" /* UIService */); + return uiService.setClickThroughAsync(clickThroughEnabled, this.extensionZoneId); + }; + ExtensionsImpl.prototype.isDashboardExtensionLocator = function (locator) { + var dashboardExtensionLocator = locator; + if (!dashboardExtensionLocator.dashboardPath) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error during initialization.'); + } + return true; + }; + ExtensionsImpl.prototype.onDispatcherReceived = function (dispatcherFactory, isExtensionDialog, contextMenuFunctions) { + var _this = this; + var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION); + // Call to register all the services which will use the newly initialized dispatcher + RegisterAllExtensionsServices_1.registerInitializationExtensionsServices(dispatcher); + // Get the initialization service and initialize this extension + var initializationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("InitializationService" /* InitializationService */); + var callbackMapKeys = contextMenuFunctions ? Object.keys(contextMenuFunctions) : []; + return initializationService.initializeDashboardExtensionsAsync(isExtensionDialog, callbackMapKeys).then(function (result) { + // If we receive an invalid plaform version, this means that platform is runnning 1.4 or 2.1 and + // doesn't pass the platform version to external. In this case we assume the platform version to be 1.9 + var platformVersion = result.extensionEnvironment.platformVersion + ? result.extensionEnvironment.platformVersion + : { major: 1, minor: 9, fix: 0 }; + // Wrap our existing dispatcher in a dispatcher that can downgrade/upgrade for an older platform. + if (api_shared_js_1.VersionedExternalApiDispatcher.needsVersionConverter(platformVersion)) { + dispatcher = new api_shared_js_1.VersionedExternalApiDispatcher(dispatcher, platformVersion); + } + // Registration of services must happen before initializing content and environment + // Extensions doesn't need to pass in a registryId. By default, the service registry instance is associated with registryId=0. + api_shared_js_1.registerAllSharedServices(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId, platformVersion); + RegisterAllExtensionsServices_1.registerAllExtensionsServices(dispatcher); + if (result.extensionDashboardInfo && _this.isDashboardExtensionLocator(result.extensionInstance.locator)) { + _this.dashboardContent = _this.initializeDashboardContent(result.extensionDashboardInfo, result.extensionInstance.locator.dashboardPath); + _this.extensionZoneId = result.extensionDashboardInfo.extensionZoneId; + } + if (result.extensionWorksheetInfo) { + _this.worksheetContent = _this.initializeWorksheetContent(result.extensionWorksheetInfo); + } + _this.environment = new Environment_1.Environment(result.extensionEnvironment); + _this.settings = _this.initializeSettings(result.extensionSettingsInfo); + _this.ui = new UI_1.UI(new UIImpl_1.UIImpl()); + _this.workbook = new Workbook_1.Workbook(new ExtensionWorkbookImpl_1.ExtensionWorkbookImpl()); + if (result.extensionEnvironment.workbookFormatting) { + _this.initializeTableauFonts(dispatcher, result.extensionEnvironment.workbookFormatting); + _this.applyAllFormatting(result.extensionEnvironment.workbookFormatting); + } + // After initialization has completed, setup listeners for the callback functions that + // are meant to be triggered whenever a context menu item is clicked. + _this.initializeContextMenuCallbacks(contextMenuFunctions); + // Also set up listeners for ExtensionStylesChangedEvent + _this.initializeWorkbookFormattingChangedEventCallback(dispatcher); + // In the normal initialization case, this will be an empty string. When returning from initializeAsync to the + // developer, we just ingore that string. In the case of initializing from an extension dialog, this string + // is an optional payload sent from the parent extension. + return result.extensionDialogPayload; + }); + }; + ExtensionsImpl.prototype.applyAllFormatting = function (formattingModel) { + var _this = this; + if (!this._styleElement) { + this._styleElement = document.createElement('style'); + this._styleElement.id = 'Tableau-Extension-Formatting'; + document.head.appendChild(this._styleElement); + } + if (!this._styleElement.sheet || !formattingModel) { + return; + } + var stylesheet = this._styleElement.sheet; + while (stylesheet.cssRules.length > 0) { + stylesheet.deleteRule(stylesheet.cssRules.length - 1); + } + formattingModel.formattingSheets.map(function (currentFormattingSheet) { + _this.applyFormattingSheetToStyleSheet(currentFormattingSheet, stylesheet); + }); + }; + ExtensionsImpl.prototype.applyFormattingSheetToStyleSheet = function (currentFormattingSheet, stylesheet) { + var styleInfo = ''; + var cssProperties = currentFormattingSheet.cssProperties; + if (cssProperties.fontFamily) { + styleInfo += 'font-family: ' + cssProperties.fontFamily.toString() + '; '; + } + if (cssProperties.fontSize) { + styleInfo += 'font-size: ' + cssProperties.fontSize.toString() + '; '; + } + if (cssProperties.fontWeight) { + styleInfo += 'font-weight: ' + cssProperties.fontWeight.toString() + '; '; + } + if (cssProperties.fontStyle) { + styleInfo += 'font-style: ' + cssProperties.fontStyle.toString() + '; '; + } + if (cssProperties.textDecoration) { + styleInfo += 'text-decoration: ' + cssProperties.textDecoration.toString() + '; '; + } + if (cssProperties.color) { + styleInfo += 'color: ' + cssProperties.color + '; '; + } + var selector = '.' + currentFormattingSheet.classNameKey; + var rule = selector + ' { ' + styleInfo + ' }'; + stylesheet.insertRule(rule, stylesheet.cssRules.length); + }; + ExtensionsImpl.prototype.initializeWorkbookFormattingChangedEventCallback = function (dispatcher) { + var _this = this; + var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + // Unregister function not used since these notifications should be + // observed for the full lifetime of the extension. + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) { + if (eventFormatting) { + _this.initializeTableauFonts(dispatcher, eventFormatting); + _this.applyAllFormatting(eventFormatting); + } + }); + }; + ExtensionsImpl.prototype.initializeTableauFonts = function (dispatcher, workbookFormatting) { + var _a; + var _this = this; + var fontNames = __spreadArrays(BentonSansFontNameConstants_1.SupportedBentonSansFontFaces, TableauBookFontNameConstants_1.SupportedTableauFontFaces); + workbookFormatting.formattingSheets.forEach(function (formattingSheet) { + if (formattingSheet.cssProperties.fontFamily) { + fontNames.push(formattingSheet.cssProperties.fontFamily); + } + }); + if (fontNames.length > 0) { + var parameters = (_a = {}, _a[api_internal_contract_js_1.ParameterId.FontNameListItems] = fontNames, _a); + dispatcher + .execute(api_internal_contract_js_1.VerbId.GetFonts, parameters) + .then(function (response) { + _this.loadFonts(response.result); + }) + .catch(); + } + }; + ExtensionsImpl.prototype.loadFonts = function (fonts) { + var _this = this; + fonts.forEach(function (fontNameAndInfo) { + if (TableauBookFontNameConstants_1.SupportedTableauFontFaces.includes(fontNameAndInfo.fontName)) { + _this.loadTableauFonts(fontNameAndInfo); + } + else if (BentonSansFontNameConstants_1.SupportedBentonSansFontFaces.includes(fontNameAndInfo.fontName)) { + _this.loadBentonSansFonts(fontNameAndInfo); + } + else { + document.fonts.add(new FontFace(fontNameAndInfo.fontName, fontNameAndInfo.fontBinaryInfo)); + } + }); + }; + ExtensionsImpl.prototype.initializeDashboardContent = function (info, sheetPath) { + // sheets are always active for Extensions + var sheetInfoImpl = new api_shared_js_1.SheetInfoImpl(info.name, api_external_contract_js_1.SheetType.Dashboard, { width: info.size.w, height: info.size.h }, undefined, true); + var dashboardImpl = new api_shared_js_1.DashboardImpl(sheetInfoImpl, info.zones, sheetPath, ServiceRegistryUtil_1.ExtensionsRegistryId, null, info.activeDashboardObjectId); + var dashboard = new Dashboard_1.Dashboard(dashboardImpl); + return new DashboardContent_1.DashboardContent(dashboard); + }; + ExtensionsImpl.prototype.initializeWorksheetContent = function (info) { + var sheetInfoImpl = new api_shared_js_1.SheetInfoImpl(info.visualId.worksheet, api_external_contract_js_1.SheetType.Worksheet, { width: info.size.w, height: info.size.h }, undefined, // index property is embedding specific + true); + var worksheetImpl = new api_shared_js_1.WorksheetImpl(sheetInfoImpl, ServiceRegistryUtil_1.ExtensionsRegistryId, info.visualId, null, // parentDashboard is always null for worksheet in WorksheetContent + null); + var worksheet = new Worksheet_1.Worksheet(worksheetImpl); + return new WorksheetContent_1.WorksheetContent(worksheet); + }; + ExtensionsImpl.prototype.initializeSettings = function (settingsInfo) { + var settingsImpl = new SettingsImpl_1.SettingsImpl(settingsInfo); + return new Settings_1.Settings(settingsImpl); + }; + ExtensionsImpl.prototype.initializeContextMenuCallbacks = function (contextMenuFunctions) { + var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + // Unregister function not used since these notifications should be + // observed for the full lifetime of the extension. + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ContextMenuClick, function () { + // Let through any context menu event, these are already filtered on api-core + // based on the extension locator. + return true; + }, function (event) { + // Execute the function associated with this context menu ID + if (contextMenuFunctions) { + if (!contextMenuFunctions[event.id]) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Received unexpected context menu Id from event: " + event.id); + } + contextMenuFunctions[event.id](); + } + }); + }; + ExtensionsImpl.prototype.loadTableauFonts = function (fontNameAndInfo) { + switch (fontNameAndInfo.fontName) { + case TableauBookFontNameConstants_1.TableauBookFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauLightFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauRegularFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauSemiBoldFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauBoldFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauMediumFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + default: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "'attempted to load unsupported font: " + fontNameAndInfo.fontName + ".'"); + } + }; + ExtensionsImpl.prototype.loadBentonSansFonts = function (fontNameAndInfo) { + switch (fontNameAndInfo.fontName) { + case BentonSansFontNameConstants_1.BentonSansBookFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansLightFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansMediumFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansSemiDemiFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansBookItalicFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' })); + break; + case BentonSansFontNameConstants_1.BentonSansSemiDemiItalicFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' })); + break; + default: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "'attempted to load unsupported font: " + fontNameAndInfo.fontName + ".'"); + } + }; + return ExtensionsImpl; +}()); +exports.ExtensionsImpl = ExtensionsImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js": +/*!*************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +/** + * LegacyInternalApiDispatcherHolder has been moved (and renamed) from api-internal-contract. + * It supports running a newer external library against a pre 2019.3 desktop. + * Starting in 2019.3, we have a merged bootstrap style for both desktop and server. + * In addition, the alpha checking that is happening here is not necessary in external-api-js + * after 2019.3 because that checking happens in api-platform-js (ApiDispatcherTest.ts) + * TFSID: 1091561 tracks an improvement to this system to make it less complex and tie it directly to + * tableau beta release versions. + * @deprecated + */ +// eslint-disable-next-line @typescript-eslint/no-namespace +var LegacyInternalApiDispatcherHolder; +(function (LegacyInternalApiDispatcherHolder) { + /** + * @param options + */ + function getDesktopDispatcherPromise(options) { + var _a; + if ((!options || typeof options.isAlpha === 'undefined') && !window.__warningIssued) { + // tslint:disable-next-line:no-console + console.warn('This is a beta version of the Extensions API. Please upgrade to an official release.'); + window.__warningIssued = true; + } + else if (((_a = options) === null || _a === void 0 ? void 0 : _a.isAlpha) && window.__platformIsOfficialRelease) { + window.__tableauDesktopDispatcher + .then(function (dispatcherFactory) { + var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION); + dispatcher.execute(api_internal_contract_js_1.VerbId.BlockExtension, {}).catch(); + }) + .catch(); + } + // this will be undefined if promise is rejected or throws + return window.__tableauDesktopDispatcher; + } + LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise = getDesktopDispatcherPromise; + /** + * @param options + */ + function hasDesktopApiDispatcherPromise(options) { + return !!getDesktopDispatcherPromise(options); + } + LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise = hasDesktopApiDispatcherPromise; +})(LegacyInternalApiDispatcherHolder = exports.LegacyInternalApiDispatcherHolder || (exports.LegacyInternalApiDispatcherHolder = {})); + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/SettingsImpl.js": +/*!****************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/SettingsImpl.js ***! + \****************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var TableauEvent_1 = __webpack_require__(/*! ../Events/TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var SettingsChangedEvent = /** @class */ (function (_super) { + __extends(SettingsChangedEvent, _super); + function SettingsChangedEvent(_newSettings) { + var _this = _super.call(this, Contract.TableauEventType.SettingsChanged) || this; + _this._newSettings = _newSettings; + return _this; + } + Object.defineProperty(SettingsChangedEvent.prototype, "newSettings", { + get: function () { + return this._newSettings; + }, + enumerable: true, + configurable: true + }); + return SettingsChangedEvent; +}(TableauEvent_1.TableauEvent)); +var SettingsImpl = /** @class */ (function () { + function SettingsImpl(settingsInfo) { + // Since promises can't be introspected for state, keep a variable that + // indicates a save is in progress, so that set/erase can't be called during a save. + this._saveInProgress = false; + this.initializeSettings(settingsInfo); + } + SettingsImpl.prototype.erase = function (key) { + api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key'); + // Only make a modification if we have the key already + if (this._currentSettings[key]) { + this.verifySettingsAreUnlocked(); + delete this._currentSettings[key]; + this._isModified = true; + } + }; + SettingsImpl.prototype.get = function (key) { + api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key'); + return this._currentSettings[key]; + }; + SettingsImpl.prototype.getAll = function () { + // Returns a mutable copy of the settings + return Object.assign({}, this._currentSettings); + }; + Object.defineProperty(SettingsImpl.prototype, "isModified", { + get: function () { + return this._isModified; + }, + enumerable: true, + configurable: true + }); + SettingsImpl.prototype.saveAsync = function () { + var _this = this; + this.verifySettingsAreUnlocked(); + // Just resolve immediately if settings are unchanged + if (!this._isModified) { + return Promise.resolve(this._currentSettings); + } + this._saveInProgress = true; + // Use the settings service to save settings to twb + var settingsService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("SettingsService" /* SettingsService */); + return settingsService.saveSettingsAsync(this._currentSettings).then(function (newSettings) { + _this._saveInProgress = false; + _this._isModified = false; + if (_this._currentSettings === undefined) { + _this._currentSettings = newSettings; + } + else { + Object.assign(_this._currentSettings, newSettings); + } + return newSettings; + }, function (reason) { + _this._saveInProgress = false; + return Promise.reject(reason); + }); + }; + SettingsImpl.prototype.set = function (key, value) { + api_shared_js_1.ErrorHelpers.verifyStringParameter(key, 'key'); // Key shouldn't be an empty string. + api_shared_js_1.ErrorHelpers.verifyParameter(value, 'value'); // Empty string value is allowed. + this.verifySettingsAreUnlocked(); + this._currentSettings[key] = value; + this._isModified = true; + }; + /** + * Initializes all events relevant to settings object. This is only a settingsUpdate event currently. + * + * @returns {Array} Collection of event managers to pass to an EventListenerManager. + */ + SettingsImpl.prototype.initializeEvents = function () { + var _this = this; + var results = new Array(); + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return + return results; + } + var settingsChangedEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.SettingsChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SettingsChanged, function () { return true; }, function (event) { + _this._currentSettings = event.newSettings; + settingsChangedEvent.triggerEvent(function () { return new SettingsChangedEvent(event.newSettings); }); + }); + results.push(settingsChangedEvent); + return results; + }; + SettingsImpl.prototype.initializeSettings = function (settingsInfo) { + api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo, 'settingsInfo'); + api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo.settingsValues, 'settingsInfo.SettingsValues'); + this._currentSettings = settingsInfo.settingsValues; + // Reset the isModified flag + this._isModified = false; + }; + /** + * This helper should be called before any local update to this.currentSettings. + * Checks if a current save call is still in progress and throws an error if so. + */ + SettingsImpl.prototype.verifySettingsAreUnlocked = function () { + if (this._saveInProgress) { + throw new api_shared_js_1.TableauError(Contract.ErrorCodes.SettingSaveInProgress, SettingsImpl.ASYNC_SAVE_IN_PROGRESS); + } + }; + SettingsImpl.ASYNC_SAVE_IN_PROGRESS = 'Async Save is in progress, updating settings is not allowed.'; + return SettingsImpl; +}()); +exports.SettingsImpl = SettingsImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js": +/*!********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TableauBookFontFamilyName = 'Tableau Book'; +exports.TableauLightFontFamilyName = 'Tableau Light'; +exports.TableauRegularFontFamilyName = 'Tableau Regular'; +exports.TableauMediumFontFamilyName = 'Tableau Medium'; +exports.TableauSemiboldFontFamilyName = 'Tableau Semibold'; +exports.TableauBoldFontFamilyName = 'Tableau Bold'; +exports.TableauBookFontFaceName = 'Tableau Book'; +exports.TableauBoldFontFaceName = 'Tableau Bold'; +exports.TableauLightFontFaceName = 'Tableau Light'; +exports.TableauMediumFontFaceName = 'Tableau Medium'; +exports.TableauRegularFontFaceName = 'Tableau Regular'; +exports.TableauSemiBoldFontFaceName = 'Tableau Semi Bold'; +exports.SupportedTableauFontFaces = [ + exports.TableauBookFontFaceName, + exports.TableauBoldFontFaceName, + exports.TableauLightFontFaceName, + exports.TableauMediumFontFaceName, + exports.TableauRegularFontFaceName, + exports.TableauSemiBoldFontFaceName, +]; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/UIImpl.js": +/*!**********************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/UIImpl.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var UIImpl = /** @class */ (function () { + function UIImpl() { + } + UIImpl.prototype.displayDialogAsync = function (url, payload, options) { + var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("UIService" /* UIService */); + var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + return new Promise(function (resolve, reject) { + uiService + .displayDialogAsync(url, payload || '', options) + .then(function () { + var unregisterFn = notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ExtensionDialogUpdate, function () { + // Let through any dialog update event + return true; + }, function (event) { + if (event.isCloseEvent) { + if (event.closePayload === undefined) { + throw new api_shared_js_1.TableauError(Contract.ErrorCodes.InternalError, 'closePayload is undefined'); + } + resolve(event.closePayload); + } + else { + reject(new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogClosedByUser, 'Extension dialog closed by user.')); + } + unregisterFn(); + }); + }) + .catch(function (error) { + reject(error); + }); + }); + }; + UIImpl.prototype.closeDialog = function (payload) { + var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("UIService" /* UIService */); + uiService.closeDialog(payload); + }; + return UIImpl; +}()); +exports.UIImpl = UIImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Dashboard.js": +/*!***************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Dashboard.js ***! + \***************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var DashboardLayoutChangedEvent_1 = __webpack_require__(/*! ../Events/DashboardLayoutChangedEvent */ "./lib/src/ExtensionsApi/Events/DashboardLayoutChangedEvent.js"); +var WorkbookFormattingChangedEvent_1 = __webpack_require__(/*! ../Events/WorkbookFormattingChangedEvent */ "./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var DashboardObject_1 = __webpack_require__(/*! ./DashboardObject */ "./lib/src/ExtensionsApi/Models/DashboardObject.js"); +var Sheet_1 = __webpack_require__(/*! ./Sheet */ "./lib/src/ExtensionsApi/Models/Sheet.js"); +var Worksheet_1 = __webpack_require__(/*! ./Worksheet */ "./lib/src/ExtensionsApi/Models/Worksheet.js"); +var Dashboard = /** @class */ (function (_super) { + __extends(Dashboard, _super); + function Dashboard(_dashboardImpl) { + var _this = _super.call(this, _dashboardImpl) || this; + _this._dashboardImpl = _dashboardImpl; + _dashboardImpl.initializeWithPublicInterfaces(); + _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Object.defineProperty(Dashboard.prototype, "worksheets", { + get: function () { + return this._dashboardImpl.worksheetsImpl.map(function (worksheetImpl) { + return new Worksheet_1.Worksheet(worksheetImpl); + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dashboard.prototype, "objects", { + get: function () { + return this._dashboardImpl.objects.map(function (dashboardObjectImpl) { + return new DashboardObject_1.DashboardObject(dashboardObjectImpl); + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dashboard.prototype, "activeDashboardObjectId", { + get: function () { + return this._dashboardImpl.activeDashboardObjectId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dashboard.prototype, "activeDashboardName", { + get: function () { + return this._dashboardImpl.activeDashboardName; + }, + enumerable: true, + configurable: true + }); + Dashboard.prototype.setZoneVisibilityAsync = function (zoneVisibilityMap) { + return this._dashboardImpl.setDashboardObjectVisibilityAsync(zoneVisibilityMap); + }; + Dashboard.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) { + return this._dashboardImpl.setDashboardObjectVisibilityAsync(dashboardObjectVisibilityMap); + }; + Dashboard.prototype.getDashboardObjectById = function (dashboardObjectId) { + var zone = this._dashboardImpl.getDashboardObjectById(dashboardObjectId); + return zone && new DashboardObject_1.DashboardObject(zone); + }; + Dashboard.prototype.initializeEvents = function () { + var _this = this; + var results = new Array(); + // Initializing events and registering notification service + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return (allows unit testing without NotificationService mock) + return results; + } + var dashboardLayoutChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.DashboardLayoutChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.DashboardLayoutChanged, function () { return true; }, function (event) { + var dashboardObjectChanges = _this._dashboardImpl.updateZones(event.zones, event.activeZoneId, event.activeDashboardName); + dashboardLayoutChangedEvent.triggerEvent(function () { return new DashboardLayoutChangedEvent_1.DashboardLayoutChangedEvent(dashboardObjectChanges); }); + }); + results.push(dashboardLayoutChangedEvent); + var workbookFormattingChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.WorkbookFormattingChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) { + workbookFormattingChangedEvent.triggerEvent(function () { return new WorkbookFormattingChangedEvent_1.WorkbookFormattingChangedEvent(eventFormatting); }); + }); + results.push(workbookFormattingChangedEvent); + return results; + }; + Dashboard.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) { + return this._dashboardImpl.moveAndResizeDashboardObjectsAsync(dashboardObjectPositionAndSizeUpdateArray); + }; + Dashboard.prototype.replayAnimationAsync = function (replaySpeed) { + return this._dashboardImpl.replayAnimationAsync(replaySpeed); + }; + Dashboard.prototype.getFiltersAsync = function () { + return this._dashboardImpl.getFiltersAsync(); + }; + Dashboard.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + return this._dashboardImpl.applyFilterAsync(fieldName, values, updateType, options); + }; + return Dashboard; +}(Sheet_1.Sheet)); +exports.Dashboard = Dashboard; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/DashboardObject.js": +/*!*********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/DashboardObject.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Dashboard_1 = __webpack_require__(/*! ./Dashboard */ "./lib/src/ExtensionsApi/Models/Dashboard.js"); +var Worksheet_1 = __webpack_require__(/*! ./Worksheet */ "./lib/src/ExtensionsApi/Models/Worksheet.js"); +/** + * Implementation of the dashboard objects - the zones in a dashboard. + */ +var DashboardObject = /** @class */ (function () { + function DashboardObject(_dashboardObjectImpl) { + this._dashboardObjectImpl = _dashboardObjectImpl; + } + Object.defineProperty(DashboardObject.prototype, "dashboard", { + get: function () { + return new Dashboard_1.Dashboard(this._dashboardObjectImpl.dashboardImpl); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "type", { + get: function () { + return this._dashboardObjectImpl.type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "position", { + get: function () { + return this._dashboardObjectImpl.position; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "size", { + get: function () { + return this._dashboardObjectImpl.size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "worksheet", { + get: function () { + if (this._dashboardObjectImpl.worksheetImpl) { + return new Worksheet_1.Worksheet(this._dashboardObjectImpl.worksheetImpl); + } + return undefined; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "name", { + get: function () { + return this._dashboardObjectImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "isFloating", { + get: function () { + return this._dashboardObjectImpl.isFloating; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "isVisible", { + get: function () { + return this._dashboardObjectImpl.isVisible; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "id", { + get: function () { + return this._dashboardObjectImpl.id; + }, + enumerable: true, + configurable: true + }); + return DashboardObject; +}()); +exports.DashboardObject = DashboardObject; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Parameter.js": +/*!***************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Parameter.js ***! + \***************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ParameterChangedEvent_1 = __webpack_require__(/*! ../Events/ParameterChangedEvent */ "./lib/src/ExtensionsApi/Events/ParameterChangedEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +/** + * Implementation of the Parameter contract. Calls down to the impl + * class for almost all of the work it does. + */ +var Parameter = /** @class */ (function (_super) { + __extends(Parameter, _super); + function Parameter(parameterImpl, sheet) { + var _this = _super.call(this) || this; + _this.parameterImpl = parameterImpl; + // Initialize our event handling for this class + _this.initializeEvents(sheet).forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Object.defineProperty(Parameter.prototype, "name", { + get: function () { + return this.parameterImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "currentValue", { + get: function () { + return this.parameterImpl.currentValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "dataType", { + get: function () { + return this.parameterImpl.dataType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "allowableValues", { + get: function () { + return this.parameterImpl.allowableValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "id", { + get: function () { + return this.parameterImpl.id; + }, + enumerable: true, + configurable: true + }); + Parameter.prototype.changeValueAsync = function (newValue) { + return this.parameterImpl.changeValueAsync(newValue); + }; + /** + * Helper method which goes through and registers each event type this impl knows about + * with the NotificationService. It returns an array of SingleEventManager objects which + * can then be passed to an EventListenerManager to handle user registration / unregistration. + * + * @param sheet The sheet object which will be included with the event notifications + * @returns {Array} Collection of event managers to pass to an EventListenerManager + */ + Parameter.prototype.initializeEvents = function (sheet) { + var _this = this; + api_shared_js_1.ErrorHelpers.verifyInternalValue(sheet, 'sheet'); + var results = new Array(); + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return + return results; + } + // Initialize all of the event managers we'll need (one for each event type) + var parameterEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.ParameterChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ParameterChanged, function (model) { + var fieldName = model; + return fieldName === _this.parameterImpl.id; + }, function (fieldName) { + parameterEvent.triggerEvent(function () { return new ParameterChangedEvent_1.ParameterChangedEvent(fieldName, sheet); }); + }); + results.push(parameterEvent); + return results; + }; + return Parameter; +}(api_shared_js_1.EventListenerManager)); +exports.Parameter = Parameter; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Sheet.js": +/*!***********************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Sheet.js ***! + \***********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var Parameter_1 = __webpack_require__(/*! ./Parameter */ "./lib/src/ExtensionsApi/Models/Parameter.js"); +var Sheet = /** @class */ (function (_super) { + __extends(Sheet, _super); + function Sheet(_sheetImpl) { + var _this = _super.call(this) || this; + _this._sheetImpl = _sheetImpl; + return _this; + } + Object.defineProperty(Sheet.prototype, "name", { + get: function () { + return this._sheetImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Sheet.prototype, "sheetType", { + get: function () { + return this._sheetImpl.sheetType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Sheet.prototype, "size", { + get: function () { + if (this.isValidSize(this._sheetImpl.size)) { + return this._sheetImpl.size; + } + throw new api_shared_js_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, 'Size not implemented'); + }, + enumerable: true, + configurable: true + }); + Sheet.prototype.isValidSize = function (size) { + var testSize = size; + if (testSize.width !== undefined && testSize.height !== undefined) { + return true; + } + return false; + }; + Sheet.prototype.findParameterAsync = function (parameterName) { + var _this = this; + return this._sheetImpl.findParameterAsync(parameterName).then(function (parameterImpl) { + if (parameterImpl) { + return new Promise(function (resolve) { return resolve(new Parameter_1.Parameter(parameterImpl, _this)); }); + } + else { + return new Promise(function (resolve) { return resolve(undefined); }); + } + }); + }; + Sheet.prototype.getParametersAsync = function () { + var _this = this; + return this._sheetImpl.getParametersAsync().then(function (parametersImpl) { + return parametersImpl.map(function (parameterImpl) { + return new Parameter_1.Parameter(parameterImpl, _this); + }); + }); + }; + return Sheet; +}(api_shared_js_1.EventListenerManager)); +exports.Sheet = Sheet; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Workbook.js": +/*!**************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Workbook.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Workbook = /** @class */ (function () { + function Workbook(_workbookImpl) { + this._workbookImpl = _workbookImpl; + } + Workbook.prototype.getAllDataSourcesAsync = function () { + return this._workbookImpl.getAllDataSourcesAsync(); + }; + return Workbook; +}()); +exports.Workbook = Workbook; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Worksheet.js": +/*!***************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Worksheet.js ***! + \***************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var FilterChangedEvent_1 = __webpack_require__(/*! ../Events/FilterChangedEvent */ "./lib/src/ExtensionsApi/Events/FilterChangedEvent.js"); +var MarksSelectedEvent_1 = __webpack_require__(/*! ../Events/MarksSelectedEvent */ "./lib/src/ExtensionsApi/Events/MarksSelectedEvent.js"); +var SummaryDataChangedEvent_1 = __webpack_require__(/*! ../Events/SummaryDataChangedEvent */ "./lib/src/ExtensionsApi/Events/SummaryDataChangedEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var Dashboard_1 = __webpack_require__(/*! ./Dashboard */ "./lib/src/ExtensionsApi/Models/Dashboard.js"); +var Sheet_1 = __webpack_require__(/*! ./Sheet */ "./lib/src/ExtensionsApi/Models/Sheet.js"); +var Worksheet = /** @class */ (function (_super) { + __extends(Worksheet, _super); + function Worksheet(_worksheetImpl) { + var _this = _super.call(this, _worksheetImpl) || this; + _this._worksheetImpl = _worksheetImpl; + // Call to initialize events and then call down to the event listener manager to handle things + _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Object.defineProperty(Worksheet.prototype, "parentDashboard", { + get: function () { + // This should never happen for Extensions if the DashboardImpls are created correctly + if (this._worksheetImpl.parentDashboard == null) { + throw new api_shared_js_1.TableauError(Contract.SharedErrorCodes.ImplementationError, "Parent dashboard not implemented"); + } + return new Dashboard_1.Dashboard(this._worksheetImpl.parentDashboard); + }, + enumerable: true, + configurable: true + }); + /** + * Helper method which goes through and registers each event type this impl knows about + * with the NotificationService. It returns an array of SingleEventManager objects which + * can then be passed to an EventListenerManager to handle user registration / unregistration. + * + * @param {Worksheet} worksheet The worksheet object which will be included with the event notifications + * @returns {Array} Collection of event managers to pass to an EventListenerManager + */ + Worksheet.prototype.initializeEvents = function () { + var _this = this; + var results = new Array(); + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return + return results; + } + // Initialize all of the event managers we'll need (one for each event type) + var marksEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.MarkSelectionChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SelectedMarksChanged, function (model) { + var visualId = model; + return _this.visualIdsAreEqual(visualId, _this._worksheetImpl.visualId); + }, function () { return marksEvent.triggerEvent(function () { return new MarksSelectedEvent_1.MarksSelectedEvent(_this); }); }); + var filterEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.FilterChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.FilterChanged, function (model) { + var filterEventResponse = model; + return _this._worksheetImpl.visualId.worksheet === filterEventResponse.visualId.worksheet; + }, function (event) { + filterEvent.triggerEvent(function () { return new FilterChangedEvent_1.FilterChangedEvent(_this, event.fieldName, event.fieldId); }); + }); + var summaryDataEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.SummaryDataChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SummaryDataChanged, function (model) { + var summaryDataEventResponse = model; + return _this._worksheetImpl.visualId.worksheet === summaryDataEventResponse.visualId.worksheet; + }, function (event) { + summaryDataEvent.triggerEvent(function () { return new SummaryDataChangedEvent_1.SummaryDataChangedEvent(_this); }); + }); + results.push(marksEvent); + results.push(filterEvent); + results.push(summaryDataEvent); + return results; + }; + Worksheet.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + return this._worksheetImpl.applyFilterAsync(fieldName, values, updateType, options); + }; + Worksheet.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) { + return this._worksheetImpl.applyRangeFilterAsync(fieldName, filterOptions); + }; + Worksheet.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) { + return this._worksheetImpl.applyHierarchicalFilterAsync(fieldName, values, updateType, options); + }; + Worksheet.prototype.applyRelativeDateFilterAsync = function (fieldName, options) { + return this._worksheetImpl.applyRelativeDateFilterAsync(fieldName, options); + }; + Worksheet.prototype.clearFilterAsync = function (fieldName) { + return this._worksheetImpl.clearFilterAsync(fieldName); + }; + Worksheet.prototype.getDataSourcesAsync = function () { + return this._worksheetImpl.getDataSourcesAsync(); + }; + Worksheet.prototype.getFiltersAsync = function () { + return this._worksheetImpl.getFiltersAsync(); + }; + Worksheet.prototype.getSelectedMarksAsync = function () { + return this._worksheetImpl.getSelectedMarksAsync(); + }; + Worksheet.prototype.getHighlightedMarksAsync = function () { + return this._worksheetImpl.getHighlightedMarksAsync(); + }; + Worksheet.prototype.getSummaryDataAsync = function (options) { + return this._worksheetImpl.getSummaryDataAsync(options); + }; + Worksheet.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) { + return this._worksheetImpl.getSummaryDataReaderAsync(pageRowCount, options); + }; + Worksheet.prototype.getSummaryColumnsInfoAsync = function () { + return this._worksheetImpl.getSummaryColumnsInfoAsync(); + }; + Worksheet.prototype.getUnderlyingDataAsync = function (options) { + console.warn('Worksheet.getUnderlyingDataAsync is deprecated. Please use ' + + 'Worksheet.getUnderlyingTablesAsync and Worksheet.getUnderlyingTableDataAsync'); + return this._worksheetImpl.getUnderlyingDataAsync(options); + }; + Worksheet.prototype.getUnderlyingTablesAsync = function () { + return this._worksheetImpl.getUnderlyingTablesAsync(); + }; + Worksheet.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) { + return this._worksheetImpl.getUnderlyingTableDataAsync(logicalTableId, options); + }; + Worksheet.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + return this._worksheetImpl.getUnderlyingTableDataReaderAsync(logicalTableId, pageRowCount, options); + }; + Worksheet.prototype.getVisualSpecificationAsync = function () { + return this._worksheetImpl.getVisualSpecificationAsync(); + }; + Worksheet.prototype.clearSelectedMarksAsync = function () { + return this._worksheetImpl.clearSelectedMarksAsync(); + }; + Worksheet.prototype.selectMarksByIDAsync = function (marksInfo, updateType) { + return this._worksheetImpl.selectMarksByIdAsync(marksInfo, updateType); + }; + Worksheet.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) { + return this._worksheetImpl.selectMarksByValueAsync(selections, selectionUpdateType); + }; + Worksheet.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) { + return this._worksheetImpl.selectMarksByIdAsync(selections, selectionUpdateType); + }; + Worksheet.prototype.annotateMarkAsync = function (mark, annotationText) { + return this._worksheetImpl.annotateMarkAsync(mark, annotationText); + }; + Worksheet.prototype.getAnnotationsAsync = function () { + return this._worksheetImpl.getAnnotationsAsync(); + }; + Worksheet.prototype.removeAnnotationAsync = function (annotation) { + return this._worksheetImpl.removeAnnotationAsync(annotation); + }; + Worksheet.prototype.hoverTupleAsync = function (hoveredTuple, tooltip) { + return this._worksheetImpl.hoverTupleAsync(hoveredTuple, tooltip); + }; + Worksheet.prototype.selectTuplesAsync = function (selectedTuples, selectOption, tooltip) { + return this._worksheetImpl.selectTuplesAsync(selectedTuples, selectOption, tooltip); + }; + Worksheet.prototype.visualIdsAreEqual = function (a, b) { + return (a && + b && + a.worksheet === b.worksheet && + a.dashboard === b.dashboard && + a.storyboard === b.storyboard && + a.storyPointID === b.storyPointID); + }; + return Worksheet; +}(Sheet_1.Sheet)); +exports.Worksheet = Worksheet; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/DashboardContent.js": +/*!**************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/DashboardContent.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external DashboardContent namespace. + * This does not follow the Impl pattern as DashboardContent is + * currently just a (single) property bag. + */ +var DashboardContent = /** @class */ (function () { + function DashboardContent(_dashboard) { + this._dashboard = _dashboard; + } + Object.defineProperty(DashboardContent.prototype, "dashboard", { + get: function () { + return this._dashboard; + }, + enumerable: true, + configurable: true + }); + return DashboardContent; +}()); +exports.DashboardContent = DashboardContent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/Environment.js": +/*!*********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/Environment.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ConnectedServer_1 = __webpack_require__(/*! ../Impl/ConnectedServer */ "./lib/src/ExtensionsApi/Impl/ConnectedServer.js"); +var WorkbookFormattingEnvUtil_1 = __webpack_require__(/*! ./WorkbookFormattingEnvUtil */ "./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js"); +/** + * Implementation of the external environment namespace. + * Environment does not follow the Impl pattern as it is + * just a property bag. + * First class extensions can get to ConnectedServer with: environment['connectedServer'] + */ +var Environment = /** @class */ (function () { + function Environment(extensionEnvironment) { + this._apiVersion = api_shared_js_1.ApiVersion.Instance && api_shared_js_1.ApiVersion.Instance.formattedValue; // maj.min.fix (no build) + this._context = api_shared_js_1.InternalToExternalEnumMappings.extensionContext.convert(extensionEnvironment.extensionContext); + this._formatting = WorkbookFormattingEnvUtil_1.WorkbookFormattingEnvUtil.convertToWorkbookFormatting(extensionEnvironment.workbookFormatting); + this._language = extensionEnvironment.extensionLanguage; + this._country = extensionEnvironment.extensionCountry; + this._locale = extensionEnvironment.extensionLocale; + this._mode = api_shared_js_1.InternalToExternalEnumMappings.extensionMode.convert(extensionEnvironment.extensionMode); + this._operatingSystem = extensionEnvironment.operatingSystem; + this._tableauVersion = extensionEnvironment.tableauVersion; + this._uniqueUserId = extensionEnvironment.uniqueUserId; + // If we have a userId, then we are a first class extension + if (extensionEnvironment.userId) { + this.connectedServer = new ConnectedServer_1.ConnectedServer(extensionEnvironment.userId, extensionEnvironment.siteId, extensionEnvironment.siteNamespace, extensionEnvironment.workbookId); + this.featureFlags = extensionEnvironment.featureFlags; + } + } + Object.defineProperty(Environment.prototype, "apiVersion", { + get: function () { + return this._apiVersion; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "context", { + get: function () { + return this._context; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "workbookFormatting", { + get: function () { + return this._formatting; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "language", { + get: function () { + return this._language; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "country", { + get: function () { + return this._country; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "locale", { + get: function () { + return this._locale; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "mode", { + get: function () { + return this._mode; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "operatingSystem", { + get: function () { + return this._operatingSystem; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "tableauVersion", { + get: function () { + return this._tableauVersion; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "uniqueUserId", { + get: function () { + return this._uniqueUserId; + }, + enumerable: true, + configurable: true + }); + return Environment; +}()); +exports.Environment = Environment; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/Extensions.js": +/*!********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/Extensions.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external Extensions namespace. + */ +var Extensions = /** @class */ (function () { + function Extensions(extensionImpl) { + this.extensionImpl = extensionImpl; + this.extensionImpl = extensionImpl; + } + Object.defineProperty(Extensions.prototype, "dashboardContent", { + get: function () { + return this.extensionImpl.dashboardContent; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "worksheetContent", { + get: function () { + return this.extensionImpl.worksheetContent; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "environment", { + get: function () { + return this.extensionImpl.environment; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "settings", { + get: function () { + return this.extensionImpl.settings; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "ui", { + get: function () { + return this.extensionImpl.ui; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "workbook", { + get: function () { + return this.extensionImpl.workbook; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "dashboardObjectId", { + get: function () { + return this.extensionImpl.extensionZoneId; + }, + enumerable: true, + configurable: true + }); + Extensions.prototype.initializeAsync = function (contextMenuCallbacks) { + return this.extensionImpl.initializeAsync(false, contextMenuCallbacks).then(); + }; + Extensions.prototype.initializeDialogAsync = function () { + return this.extensionImpl.initializeAsync(true); + }; + Extensions.prototype.createVizImageAsync = function (inputSpec) { + return this.extensionImpl.createVizImageAsync(inputSpec); + }; + Extensions.prototype.setClickThroughAsync = function (clickThroughEnabled) { + return this.extensionImpl.setClickThroughAsync(clickThroughEnabled); + }; + return Extensions; +}()); +exports.Extensions = Extensions; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/Settings.js": +/*!******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/Settings.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +/** + * Implementation of the external settings namespace. + */ +var Settings = /** @class */ (function (_super) { + __extends(Settings, _super); + function Settings(_settingsImpl) { + var _this = _super.call(this) || this; + _this._settingsImpl = _settingsImpl; + // Initialize our event handling for this class + _this._settingsImpl.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Settings.prototype.erase = function (key) { + this._settingsImpl.erase(key); + }; + Settings.prototype.get = function (key) { + return this._settingsImpl.get(key); + }; + Settings.prototype.getAll = function () { + return this._settingsImpl.getAll(); + }; + Object.defineProperty(Settings.prototype, "isModified", { + get: function () { + return this._settingsImpl.isModified; + }, + enumerable: true, + configurable: true + }); + Settings.prototype.saveAsync = function () { + return this._settingsImpl.saveAsync(); + }; + Settings.prototype.set = function (key, value) { + this._settingsImpl.set(key, value); + }; + return Settings; +}(api_shared_js_1.EventListenerManager)); +exports.Settings = Settings; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/UI.js": +/*!************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/UI.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external UI namespace. + */ +var UI = /** @class */ (function () { + function UI(_impl) { + this._impl = _impl; + } + UI.prototype.displayDialogAsync = function (url, payload, options) { + return this._impl.displayDialogAsync(url, payload, options); + }; + UI.prototype.closeDialog = function (payload) { + this._impl.closeDialog(payload); + }; + return UI; +}()); +exports.UI = UI; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js": +/*!***********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var WorkbookFormattingEnvUtil = /** @class */ (function () { + function WorkbookFormattingEnvUtil() { + } + WorkbookFormattingEnvUtil.convertToWorkbookFormatting = function (workbookFormattingModel) { + if (!workbookFormattingModel) { + return undefined; + } + else { + var formattingMap = workbookFormattingModel.formattingSheets.map(function (currentFormattingSheet) { + var formattingSheet = { + classNameKey: api_shared_js_1.InternalToExternalEnumMappings.classNameKey.convert(currentFormattingSheet.classNameKey), + cssProperties: { + fontFamily: currentFormattingSheet.cssProperties.fontFamily, + fontSize: currentFormattingSheet.cssProperties.fontSize, + fontWeight: currentFormattingSheet.cssProperties.fontWeight, + fontStyle: currentFormattingSheet.cssProperties.fontStyle, + textDecoration: currentFormattingSheet.cssProperties.textDecoration, + color: currentFormattingSheet.cssProperties.color, + }, + }; + return formattingSheet; + }); + var result = { + formattingSheets: formattingMap, + }; + return result; + } + }; + return WorkbookFormattingEnvUtil; +}()); +exports.WorkbookFormattingEnvUtil = WorkbookFormattingEnvUtil; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/WorksheetContent.js": +/*!**************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/WorksheetContent.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external WorksheetContent namespace. + * This does not follow the Impl pattern as WorksheetContent is + * currently just a (single) property bag. + */ +var WorksheetContent = /** @class */ (function () { + function WorksheetContent(_worksheet) { + this._worksheet = _worksheet; + } + Object.defineProperty(WorksheetContent.prototype, "worksheet", { + get: function () { + return this._worksheet; + }, + enumerable: true, + configurable: true + }); + return WorksheetContent; +}()); +exports.WorksheetContent = WorksheetContent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js": +/*!**************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js ***! + \**************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var InitializationServiceImpl = /** @class */ (function (_super) { + __extends(InitializationServiceImpl, _super); + function InitializationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(InitializationServiceImpl.prototype, "serviceName", { + get: function () { + return "InitializationService" /* InitializationService */; + }, + enumerable: true, + configurable: true + }); + InitializationServiceImpl.prototype.initializeDashboardExtensionsAsync = function (isExtensionDialog, contextMenuIds) { + var _a; + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'initializeDashboardExtensionsAsync', + _a[api_internal_contract_js_1.ParameterId.ExtensionContextMenuIds] = contextMenuIds, + _a[api_internal_contract_js_1.ParameterId.IsExtensionDialog] = isExtensionDialog, + _a); + return this.execute(api_internal_contract_js_1.VerbId.InitializeExtension, params).then(function (response) { + // TODO - Validate return value + var result = response.result; + return result; + }); + }; + return InitializationServiceImpl; +}(api_shared_js_1.ServiceImplBase)); +exports.InitializationServiceImpl = InitializationServiceImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js": +/*!********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var SettingsServiceImpl = /** @class */ (function (_super) { + __extends(SettingsServiceImpl, _super); + function SettingsServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(SettingsServiceImpl.prototype, "serviceName", { + get: function () { + return "SettingsService" /* SettingsService */; + }, + enumerable: true, + configurable: true + }); + SettingsServiceImpl.prototype.saveSettingsAsync = function (settings) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveSettingsAsync', + _a[api_internal_contract_js_1.ParameterId.SettingsValues] = settings, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SaveExtensionSettings, parameters).then(function (value) { + var result = value.result; + if (!result || !result.settingsValues) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error savings settings.'); + } + return result.settingsValues; + }); + }; + return SettingsServiceImpl; +}(api_shared_js_1.ServiceImplBase)); +exports.SettingsServiceImpl = SettingsServiceImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js": +/*!**************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js ***! + \**************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var DEFAULT_DIALOG_HEIGHT = 400; // in pixels +var DEFAULT_DIALOG_WIDTH = 600; // in pixels +var DEFAULT_DIALOG_STYLE = api_external_contract_js_1.DialogStyle.Window; +var UIServiceImpl = /** @class */ (function (_super) { + __extends(UIServiceImpl, _super); + function UIServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(UIServiceImpl.prototype, "serviceName", { + get: function () { + return "UIService" /* UIService */; + }, + enumerable: true, + configurable: true + }); + UIServiceImpl.prototype.displayDialogAsync = function (url, payload, options) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'displayDialogAsync', + _a[api_internal_contract_js_1.ParameterId.ExtensionDialogUrl] = url, + _a[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload, + _a); + var h = options && options.height ? options.height : DEFAULT_DIALOG_HEIGHT; + var w = options && options.width ? options.width : DEFAULT_DIALOG_WIDTH; + var dialogStyle = options && options.dialogStyle ? options.dialogStyle : DEFAULT_DIALOG_STYLE; + // On the platform side, we do something reasonable regardess of whether the passed + // height and width are too large or too small. But this likely indicates a developer error, + // so we throw an error here to help with debugging. + if (h <= 0 || w <= 0) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'Size parameters for displayDialogAsync must be positive'); + } + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogH] = h; + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogW] = w; + api_shared_js_1.ErrorHelpers.verifyEnumValue(dialogStyle, api_external_contract_js_1.DialogStyle, 'DialogStyle'); + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogStyle] = api_shared_js_1.ExternalToInternalEnumMappings.dialogStyles.convert(dialogStyle); + return this.execute(api_internal_contract_js_1.VerbId.DisplayDialog, parameters).then(function (response) { + var dialogResult = response.result; + switch (dialogResult) { + case api_internal_contract_js_1.ExtensionDialogResult.DialogAlreadyOpen: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogAlreadyOpen, 'There already exists an open dialog for this extension.'); + case api_internal_contract_js_1.ExtensionDialogResult.InvalidDomain: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidDomainDialog, 'The url of an extension dialog must match the domain of the parent extension.'); + default: + // Success case + return; + } + }); + }; + UIServiceImpl.prototype.closeDialog = function (payload) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'closeDialog', + _a); + if (payload) { + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload; + } + return this.execute(api_internal_contract_js_1.VerbId.CloseDialog, parameters).then(function () { + return; + }); + }; + UIServiceImpl.prototype.setClickThroughAsync = function (clickThroughEnabled, extensionZoneId) { + var _a; + api_shared_js_1.ErrorHelpers.verifyParameterType(clickThroughEnabled, 'boolean', 'clickThroughEnabled'); + if (extensionZoneId === undefined || extensionZoneId <= 0) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Extension Id is invalid.'); + } + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.ExtensionZoneId] = extensionZoneId, + _a[api_internal_contract_js_1.ParameterId.ClickThroughEnabled] = clickThroughEnabled, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SetClickThrough, parameters).then(function () { + return; + }); + }; + return UIServiceImpl; +}(api_shared_js_1.ServiceImplBase)); +exports.UIServiceImpl = UIServiceImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js": +/*!*************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var InitializationServiceImpl_1 = __webpack_require__(/*! ./Impl/InitializationServiceImpl */ "./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js"); +var SettingsServiceImpl_1 = __webpack_require__(/*! ./Impl/SettingsServiceImpl */ "./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js"); +var UIServiceImpl_1 = __webpack_require__(/*! ./Impl/UIServiceImpl */ "./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ./ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +function registerAllExtensionsServices(dispatcher) { + api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new SettingsServiceImpl_1.SettingsServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId)); + api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new UIServiceImpl_1.UIServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId)); +} +exports.registerAllExtensionsServices = registerAllExtensionsServices; +function registerInitializationExtensionsServices(dispatcher) { + api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new InitializationServiceImpl_1.InitializationServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId)); +} +exports.registerInitializationExtensionsServices = registerInitializationExtensionsServices; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js": +/*!***************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ExtensionsRegistryId = 0; + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js": +/*!***************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// This file re-exports everything which is part of the extensions api public interface +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__webpack_require__(/*! ./ExternalContract/Embedding/AskDataInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js")); +var Enums_1 = __webpack_require__(/*! ./ExternalContract/Embedding/Enums */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js"); +exports.ApiMenuType = Enums_1.ApiMenuType; +exports.CrosstabFileFormat = Enums_1.CrosstabFileFormat; +exports.DeviceType = Enums_1.DeviceType; +exports.EmbeddingErrorCodes = Enums_1.EmbeddingErrorCodes; +exports.EmbeddingTableauEventType = Enums_1.TableauEventType; +exports.FileFormats = Enums_1.FileFormats; +exports.PrintOrientation = Enums_1.PrintOrientation; +exports.PrintPageSize = Enums_1.PrintPageSize; +exports.PrintScaling = Enums_1.PrintScaling; +exports.SheetSizeBehavior = Enums_1.SheetSizeBehavior; +exports.TableauDialogType = Enums_1.TableauDialogType; +exports.Toolbar = Enums_1.Toolbar; +__export(__webpack_require__(/*! ./ExternalContract/Embedding/PulseInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/PulseInterfaces.js")); +__export(__webpack_require__(/*! ./ExternalContract/Embedding/VizInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js")); +__export(__webpack_require__(/*! ./ExternalContract/Embedding/WebComponentInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js")); +__export(__webpack_require__(/*! ./SharedApiExternalContract */ "../api-external-contract-js/lib/src/SharedApiExternalContract.js")); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js": +/*!****************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// This file re-exports everything which is part of the extensions api public interface +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Tableau_1 = __webpack_require__(/*! ./ExternalContract/Extensions/Namespaces/Tableau */ "../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js"); +exports.ErrorCodes = Tableau_1.ErrorCodes; +exports.ExtensionContext = Tableau_1.ExtensionContext; +exports.ExtensionMode = Tableau_1.ExtensionMode; +exports.TableauEventType = Tableau_1.TableauEventType; +exports.VizImageEncodingType = Tableau_1.VizImageEncodingType; +exports.VizImagePaletteType = Tableau_1.VizImagePaletteType; +exports.VizImageSizeSettingAlignmentType = Tableau_1.VizImageSizeSettingAlignmentType; +exports.VizImageSizeSettingType = Tableau_1.VizImageSizeSettingType; +exports.VizImageSortDirectionType = Tableau_1.VizImageSortDirectionType; +__export(__webpack_require__(/*! ./SharedApiExternalContract */ "../api-external-contract-js/lib/src/SharedApiExternalContract.js")); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract.js": +/*!***************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +/** + * This is your main. This is where you re-export everything you want to be publicly available. + * + * The build enforces that the file has the same name as the global variable that is exported. + */ +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__webpack_require__(/*! ./EmbeddingApiExternalContract */ "../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js")); +__export(__webpack_require__(/*! ./ExtensionsApiExternalContract */ "../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js")); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js": +/*!*******************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js ***! + \*******************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + * @deprecated + */ +var AskDataAttributes; +(function (AskDataAttributes) { + AskDataAttributes["Origin"] = "origin"; + AskDataAttributes["ShowEmbed"] = "show-embed"; + AskDataAttributes["ShowPin"] = "show-pin"; + AskDataAttributes["ShowSave"] = "show-save"; + AskDataAttributes["ShowShare"] = "show-share"; +})(AskDataAttributes = exports.AskDataAttributes || (exports.AskDataAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js": +/*!*******************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// All enum values made available to Embedding developers. +// Enums should be kept in alphabetical order. +// Most of them should match an enum on the server defined at +// workgroup/vqlweb/scriptsharp/src/ApiShared/PublicEnums.cs#L398:17 +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Crosstab file formats available to use with {@link Viz.exportCrosstabAsync} + */ +var CrosstabFileFormat; +(function (CrosstabFileFormat) { + CrosstabFileFormat["CSV"] = "csv"; + CrosstabFileFormat["Excel"] = "xlsx"; +})(CrosstabFileFormat = exports.CrosstabFileFormat || (exports.CrosstabFileFormat = {})); +/** + * Device types available to use with {@link Viz.device} + */ +var DeviceType; +(function (DeviceType) { + DeviceType["Default"] = "default"; + DeviceType["Desktop"] = "desktop"; + DeviceType["Tablet"] = "tablet"; + DeviceType["Phone"] = "phone"; +})(DeviceType = exports.DeviceType || (exports.DeviceType = {})); +/** + * All error codes used by the Embedding API. + */ +var EmbeddingErrorCodes; +(function (EmbeddingErrorCodes) { + /** + * Raised when a request to the auth endpoint fails. + */ + EmbeddingErrorCodes["AuthFailed"] = "auth-failed"; + /** + * The browser is not capable of supporting the Tableau Embedding API + */ + EmbeddingErrorCodes["BrowserNotCapable"] = "browser-not-capable"; + /** + * The permissions on a workbook or a view do not allow downloading the workbook. + */ + EmbeddingErrorCodes["DownloadWorkbookNotAllowed"] = "download-workbook-not-allowed"; + /** + * Thrown when an error occurs while attempting to perform a filter operation. + */ + EmbeddingErrorCodes["FilterCannotBePerformed"] = "filter-cannot-be-performed"; + /** + * Thrown when attempting to switch to a sheet by index that does not exist in the workbook. + */ + EmbeddingErrorCodes["IndexOutOfRange"] = "index-out-of-range"; + /** + * Thrown when an error occurs within the Tableau Embedding API. Contact Tableau Support. + */ + EmbeddingErrorCodes["InternalError"] = "internal-error"; + /** + * An operation was attempted on a custom view that does not exist. + */ + EmbeddingErrorCodes["InvalidCustomViewName"] = "invalid-custom-view-name"; + /** + * An invalid date was specified in a method that required a date parameter. + */ + EmbeddingErrorCodes["InvalidDateParameter"] = "invalid-date-parameter"; + /** + * Either a filter operation was attempted on a field that does not exist in the data source, or the value supplied + * in the filter operation is the wrong data type or format. + */ + EmbeddingErrorCodes["invalidFilterFieldNameOrValue"] = "invalid-filter-field-name"; + /** + * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message + * field. + */ + EmbeddingErrorCodes["InvalidParameter"] = "invalid-parameter"; + /** + * A negative size was specified or the maxSize value is less than minSize in Sheet.changeSizeAsync(). + */ + EmbeddingErrorCodes["InvalidSize"] = "invalid-size"; + /** + * Attempted to get an authoring worksheet when the current sheet is not a worksheet. + * @ignore + */ + EmbeddingErrorCodes["InvalidSheetType"] = "invalid-sheet-type"; + /** + * A behavior value was found that is not included in the SheetSizeBehavior enum. + */ + EmbeddingErrorCodes["InvalidSizeBehavior"] = "invalid-size-behavior"; + /** + * A behavior other than SheetSizeBehavior.Automatic was specified in Sheet.changeSizeAsync() when the sheet is a + * Worksheet instance. + */ + EmbeddingErrorCodes["InvalidSizeBehaviorOnWorksheet"] = "invalid-size-behavior-on-worksheet"; + /** + * The URL specified in the Viz class constructor is not valid. + */ + EmbeddingErrorCodes["InvalidUrl"] = "invalid-url"; + /** + * The maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtMost. + */ + EmbeddingErrorCodes["MissingMaxSize"] = "missing-max-size"; + /** + * The minSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtLeast. + */ + EmbeddingErrorCodes["MissingMinSize"] = "missing-min-size"; + /** + * The minSize or maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.Range. + */ + EmbeddingErrorCodes["MissingMinMaxSize"] = "missing-min-max-size"; + /** + * Can occur if the embedding app interacts with a parameter that has been removed from the worksheet. + */ + EmbeddingErrorCodes["MissingParameter"] = "missing-parameter"; + /** + * The rangeN field is missing for a relative date filter of type LASTN or NEXTN. + */ + EmbeddingErrorCodes["MissingRangeNForRelativeDateFilters"] = "missing-range-n-for-relative-date-filters"; + /** + * An attempt was made to access Sheet.getUrl() on a hidden sheet. Hidden sheets do not have URLs. + */ + EmbeddingErrorCodes["NoUrlForHiddenWorksheet"] = "no-url-for-hidden-worksheet"; + /** + * One or both of the parentElement or the URL parameters is not specified in the Viz constructor. + */ + EmbeddingErrorCodes["NoUrlOrParentElementNotFound"] = "no-url-or-parent-element-not-found"; + /** + * An operation was attempted on a sheet that is not active or embedded within the active dashboard. + */ + EmbeddingErrorCodes["NotActiveSheet"] = "not-active-sheet"; + /** + * A required parameter was not specified, null, or an empty string/array. + */ + EmbeddingErrorCodes["NullOrEmptyParameter"] = "null-or-empty-parameter"; + /** + * An operation was attempted on a sheet that does not exist in the workbook. + */ + EmbeddingErrorCodes["SheetNotInWorkbook"] = "sheet-not-in-workbook"; + /** + * An operation is performed on a CustomView object that is no longer valid (it has been removed). + */ + EmbeddingErrorCodes["StaleDataReference"] = "stale-data-reference"; + /** + * Unknown error triggered during the auth flow. + */ + EmbeddingErrorCodes["UnknownAuthError"] = "unknown-auth-error"; + /** + * An unknown event name was specified in the call to Viz.addEventListener or Viz.removeEventListener. + */ + EmbeddingErrorCodes["UnsupportedEventName"] = "unsupported-event-name"; + /** + * A Viz object has already been created as a child of the parentElement specified in the Viz constructor. + */ + EmbeddingErrorCodes["VizAlreadyInManager"] = "viz-already-in-manager"; + /** + * Function is not supported in the embedding api. + */ + EmbeddingErrorCodes["ImplementationError"] = "wrong-implementation"; + /** + * @NotImplemented + */ + EmbeddingErrorCodes["NotImplemented"] = "not-implemented"; + /** + * Unknown error during event initialization + */ + EmbeddingErrorCodes["EventInitializationError"] = "event-initialization-error"; + /** + * Version of the embedding api not supported by the version of tableau + */ + EmbeddingErrorCodes["IncompatibleVersionError"] = "incompatible-version-error"; + /** + * Unknown {@link TableauDialogType} passed in to Viz.displayDialogAsync. + */ + EmbeddingErrorCodes["UnknownDialogType"] = "unknown-dialog-type"; + /** + * Can occur if the API interacts with a filter that has been removed from the worksheet. + * Can also occurs if a {@link FilterType} has not been implemented. + */ + EmbeddingErrorCodes["FilterMissingOrNotImplemented"] = "filter-missing-not-implemented"; + /** + * Can occur if story point ids no longer match. + */ + EmbeddingErrorCodes["StoryPointIdMismatch"] = "storypoint-id-mismatch"; +})(EmbeddingErrorCodes = exports.EmbeddingErrorCodes || (exports.EmbeddingErrorCodes = {})); +/** + * Formats available to use with displayStaticImage in @VizInterfaces + */ +var FileFormats; +(function (FileFormats) { + FileFormats["PDF"] = "pdf"; + FileFormats["PNG"] = "png"; +})(FileFormats = exports.FileFormats || (exports.FileFormats = {})); +var PrintOrientation; +(function (PrintOrientation) { + PrintOrientation["Portrait"] = "portrait"; + PrintOrientation["Landscape"] = "landscape"; +})(PrintOrientation = exports.PrintOrientation || (exports.PrintOrientation = {})); +var PrintPageSize; +(function (PrintPageSize) { + PrintPageSize["Letter"] = "letter"; + PrintPageSize["Legal"] = "legal"; + PrintPageSize["Note"] = "note"; + PrintPageSize["Folio"] = "folio"; + PrintPageSize["Tabloid"] = "tabloid"; + PrintPageSize["Ledger"] = "ledger"; + PrintPageSize["Statement"] = "statement"; + PrintPageSize["Executive"] = "executive"; + PrintPageSize["A3"] = "A3"; + PrintPageSize["A4"] = "A4"; + PrintPageSize["A5"] = "A5"; + PrintPageSize["B4"] = "B4"; + PrintPageSize["B5"] = "B5"; + PrintPageSize["Quarto"] = "quarto"; + PrintPageSize["Unspecified"] = "unspecified"; +})(PrintPageSize = exports.PrintPageSize || (exports.PrintPageSize = {})); +var PrintScaling; +(function (PrintScaling) { + PrintScaling["Automatic"] = "automatic"; + PrintScaling["Perc25"] = "25%"; + PrintScaling["Perc50"] = "50%"; + PrintScaling["Perc60"] = "60%"; + PrintScaling["Perc75"] = "75%"; + PrintScaling["Perc80"] = "80%"; + PrintScaling["Perc90"] = "90%"; + PrintScaling["Perc100"] = "100%"; + PrintScaling["Perc200"] = "200%"; + PrintScaling["Perc400"] = "400%"; + PrintScaling["AtMost1PageHigh"] = "at-most-1-page-high"; + PrintScaling["AtMost2PagesHigh"] = "at-most-2-pages-high"; + PrintScaling["AtMost1PageWide"] = "at-most-1-page-wide"; + PrintScaling["AtMost2PagesWide"] = "at-most-2-pages-wide"; +})(PrintScaling = exports.PrintScaling || (exports.PrintScaling = {})); +var RevertVizSelection; +(function (RevertVizSelection) { + RevertVizSelection["All"] = "all"; + RevertVizSelection["Axes"] = "axes"; + RevertVizSelection["Filters"] = "filters"; + RevertVizSelection["Sorts"] = "sorts"; + RevertVizSelection["Shelves"] = "shelves"; +})(RevertVizSelection = exports.RevertVizSelection || (exports.RevertVizSelection = {})); +var ToolbarButtons; +(function (ToolbarButtons) { + ToolbarButtons["Alerts"] = "alerts"; + ToolbarButtons["AskData"] = "askData"; + ToolbarButtons["CustomViews"] = "customViews"; + ToolbarButtons["DataDetails"] = "dataDetails"; + ToolbarButtons["Share"] = "share"; + ToolbarButtons["Subscribe"] = "subscribe"; +})(ToolbarButtons = exports.ToolbarButtons || (exports.ToolbarButtons = {})); +var Toolbar; +(function (Toolbar) { + Toolbar["Top"] = "top"; + Toolbar["Bottom"] = "bottom"; + Toolbar["Hidden"] = "hidden"; +})(Toolbar = exports.Toolbar || (exports.Toolbar = {})); +var SheetSizeBehavior; +(function (SheetSizeBehavior) { + SheetSizeBehavior["Automatic"] = "automatic"; + SheetSizeBehavior["Exactly"] = "exactly"; + SheetSizeBehavior["Range"] = "range"; + SheetSizeBehavior["AtLeast"] = "atleast"; + SheetSizeBehavior["AtMost"] = "atmost"; +})(SheetSizeBehavior = exports.SheetSizeBehavior || (exports.SheetSizeBehavior = {})); +/** + * Be careful when adding new event types. Extensions and embedding follow two different patterns on how events are named. + * Events should be all lower case and without hyphens or underscores. + */ +/** + * Represents the type of tableau embedding event that can be listened for. + */ +var TableauEventType; +(function (TableauEventType) { + /** + * Raised when a custom view has finished loading. This event is raised after the callback function for {@link FirstInteractive} (if any) has been called. + * + * @category Viewing + */ + TableauEventType["CustomViewLoaded"] = "customviewloaded"; + /** + * Raised when a custom view has been removed. + * + * @category Viewing + */ + TableauEventType["CustomViewRemoved"] = "customviewremoved"; + /** + * Raised when a custom view has been saved (newly created or updated). + * + * @category Viewing + */ + TableauEventType["CustomViewSaved"] = "customviewsaved"; + /** + * Raised when a custom view has been set as the default view for a workbook. + * + * @category Viewing + */ + TableauEventType["CustomViewSetDefault"] = "customviewsetdefault"; + /** Raised when the user clicks on the Edit Button. + * + * @category Viewing + */ + TableauEventType["EditButtonClicked"] = "editbuttonclicked"; + /** Raised when the user clicks on the Edit In Desktop Button. + * + * @category Authoring, Viewing + */ + TableauEventType["EditInDesktopButtonClicked"] = "editindesktopbuttonclicked"; + /** Raised when any filter has changed state. You can use this event type with TableauViz objects. + * + * @category Viewing + */ + TableauEventType["FilterChanged"] = "filterchanged"; + /** Fired when viz size is known + * + * @category Authoring, Viewing + */ + TableauEventType["FirstVizSizeKnown"] = "firstvizsizeknown"; + /** Fired when a viz first becomes interactive + * + * @category Authoring, Viewing + */ + TableauEventType["FirstInteractive"] = "firstinteractive"; + /** Raised when a custom mark context menu is clicked. + * + * @category Viewing + */ + TableauEventType["CustomMarkContextMenuEvent"] = "custommarkcontextmenu"; + /** The selected marks on a visualization have changed. You can use this event type with TableauViz objects. + * + * @category Viewing + */ + TableauEventType["MarkSelectionChanged"] = "markselectionchanged"; + /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects. + * + * @category Viewing + */ + TableauEventType["ParameterChanged"] = "parameterchanged"; + /** Raised when a toolbar button or control becomes available or becomes unavailable. + * + * @category Viewing + */ + TableauEventType["ToolbarStateChanged"] = "toolbarstatechanged"; + /** Raised when the workbook is ready to close. This notification is sent when using embedded web authoring functionality. + * + * @category Authoring + */ + TableauEventType["WorkbookReadyToClose"] = "workbookreadytoclose"; + /** Raised when the workbook has been published. This notification is sent when using embedded web authoring functionality. + * + * @category Authoring + */ + TableauEventType["WorkbookPublished"] = "workbookpublished"; + /** Raised when "publish as" is successful. This notification is sent when using embedded web authoring functionality. + * + * @category Authoring + */ + TableauEventType["WorkbookPublishedAs"] = "workbookpublishedas"; + /** + * Raised when a URL action occurs. See the {@link UrlActionEvent} class. + * + * @category Viewing + */ + TableauEventType["UrlAction"] = "urlaction"; + /** + * Raised after a tab switch occurs (the active sheet has changed). Guarantees the viz object will be interactive after this. + * + * @category Viewing + */ + TableauEventType["TabSwitched"] = "tabswitched"; + /** + * + * Raised after a new story point becomes active. + * + * @category Viewing + */ + TableauEventType["StoryPointSwitched"] = "storypointswitched"; + /** + * + * Raised when an error occurs while loading the contents of the webcomponent. + * + * @category Authoring, Viewing, AskData + */ + TableauEventType["VizLoadError"] = "vizloaderror"; + /** + * Raised after the iframe src attribute has been updated + * + * @category Authoring, Viewing, AskData + */ + TableauEventType["IframeSrcUpdated"] = "iframesrcupdated"; + /** + * Raised when changes are made to summary data. + * + * @category Viewing + */ + TableauEventType["SummaryDataChanged"] = "summarydatachanged"; + /** + * Raised when tableau (viz-client) is ready to receive an auth token. + * Used for authentication in salesforce native mode. + * + * @hidden + * @category Authoring, Viewing, + */ + TableauEventType["ReadyToReceiveAuthToken"] = "readytoreceiveauthtoken"; +})(TableauEventType = exports.TableauEventType || (exports.TableauEventType = {})); +/** + * Represents the location of a context menu where users can add external menu items. + */ +var ApiMenuType; +(function (ApiMenuType) { + /** External menu item will be injected in ubertip dialog */ + ApiMenuType["Ubertip"] = "ubertip"; +})(ApiMenuType = exports.ApiMenuType || (exports.ApiMenuType = {})); +/** You can use this type with a {@link Viz} object. */ +var TableauDialogType; +(function (TableauDialogType) { + /** + * Used to display the download PDF dialog. + */ + TableauDialogType["ExportPDF"] = "export-pdf"; + /** + * Used to display the download PowerPoint dialog. + */ + TableauDialogType["ExportPowerPoint"] = "export-powerpoint"; + /** + * Used to display the download Data dialog. + */ + TableauDialogType["ExportData"] = "export-data"; + /** + * Used to display the download CrossTab dialog. + */ + TableauDialogType["ExportCrossTab"] = "export-cross-tab"; + /** + * Used to display the download Workbook dialog. + */ + TableauDialogType["ExportWorkbook"] = "export-workbook"; + /** + * Used to display the Share dialog. + */ + TableauDialogType["Share"] = "share"; +})(TableauDialogType = exports.TableauDialogType || (exports.TableauDialogType = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/PulseInterfaces.js": +/*!*****************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/PulseInterfaces.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + */ +var PulseAttributes; +(function (PulseAttributes) { + PulseAttributes["DisableExploreFilter"] = "disable-explore-filter"; +})(PulseAttributes = exports.PulseAttributes || (exports.PulseAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js": +/*!***************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The shared string constants you can use as HTML attributes for the and web component. + * @ignore + */ +var VizSharedAttributes; +(function (VizSharedAttributes) { + VizSharedAttributes["TouchOptimize"] = "touch-optimize"; + VizSharedAttributes["HideEditInDesktopButton"] = "hide-edit-in-desktop-button"; + VizSharedAttributes["SuppressDefaultEditBehavior"] = "suppress-default-edit-behavior"; + VizSharedAttributes["DisableVersionCheck"] = "disable-version-check"; + VizSharedAttributes["OnEditInDesktopButtonClicked"] = "onEditInDesktopButtonClicked"; + VizSharedAttributes["OnFirstVizSizeKnown"] = "onFirstVizSizeKnown"; + VizSharedAttributes["OnFirstInteractive"] = "onFirstInteractive"; +})(VizSharedAttributes = exports.VizSharedAttributes || (exports.VizSharedAttributes = {})); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + */ +var VizAttributes; +(function (VizAttributes) { + VizAttributes["DisableUrlActionsPopups"] = "disable-url-actions"; + VizAttributes["HideTabs"] = "hide-tabs"; + VizAttributes["Toolbar"] = "toolbar"; + VizAttributes["InstanceIdToClone"] = "instance-id-to-clone"; + VizAttributes["Device"] = "device"; + VizAttributes["HideEditButton"] = "hide-edit-button"; + VizAttributes["OnEditButtonClicked"] = "onEditButtonClicked"; + VizAttributes["OnFilterChanged"] = "onFilterChanged"; + VizAttributes["OnCustomMarkContextMenuEvent"] = "onCustomMarkContextMenuEvent"; + VizAttributes["OnMarkSelectionChanged"] = "onMarkSelectionChanged"; + VizAttributes["OnParameterChanged"] = "onParameterChanged"; + VizAttributes["OnToolbarStateChanged"] = "onToolbarStateChanged"; + VizAttributes["OnUrlAction"] = "onUrlAction"; + VizAttributes["OnTabSwitched"] = "onTabSwitched"; + VizAttributes["OnCustomViewLoaded"] = "onCustomViewLoaded"; + VizAttributes["OnCustomViewRemoved"] = "onCustomViewRemoved"; + VizAttributes["OnCustomViewSaved"] = "onCustomViewSaved"; + VizAttributes["OnCustomViewSetDefault"] = "onCustomViewSetDefault"; + VizAttributes["OnStoryPointSwitched"] = "onStoryPointSwitched"; + VizAttributes["OnSummaryDataChanged"] = "onSummaryDataChanged"; + VizAttributes["OnReadyToReceiveAuthToken"] = "onReadyToReceiveAuthToken"; +})(VizAttributes = exports.VizAttributes || (exports.VizAttributes = {})); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + */ +var VizAuthoringAttributes; +(function (VizAuthoringAttributes) { + VizAuthoringAttributes["OnWorkbookPublished"] = "onWorkbookPublished"; + VizAuthoringAttributes["OnWorkbookPublishedAs"] = "onWorkbookPublishedAs"; + VizAuthoringAttributes["OnWorkbookReadyToClose"] = "onWorkbookReadyToClose"; + VizAuthoringAttributes["HideCloseButton"] = "hide-close-button"; +})(VizAuthoringAttributes = exports.VizAuthoringAttributes || (exports.VizAuthoringAttributes = {})); +/** + * The names of the string constants you can use as child tags for TableauViz and TableauAuthoringViz custom elements. + */ +var VizChildElements; +(function (VizChildElements) { + /** + * Contains a list of filter parameters. Available only in viewing mode. + */ + VizChildElements["VizFilter"] = "viz-filter"; + /** + * Contains a name and value for a parameter. Available only in viewing mode. + */ + VizChildElements["VizParameter"] = "viz-parameter"; + /** + * Contains a list of custom parameters. Available in both viewing and authoring modes. + */ + VizChildElements["CustomParameter"] = "custom-parameter"; +})(VizChildElements = exports.VizChildElements || (exports.VizChildElements = {})); +var VizChildElementAttributes; +(function (VizChildElementAttributes) { + VizChildElementAttributes["Field"] = "field"; + VizChildElementAttributes["Value"] = "value"; + VizChildElementAttributes["Name"] = "name"; +})(VizChildElementAttributes = exports.VizChildElementAttributes || (exports.VizChildElementAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js": +/*!************************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js ***! + \************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The names of the common string constants you can use as HTML attributes for the tableau web component. + * @ignore + */ +var WebComponentAttributes; +(function (WebComponentAttributes) { + WebComponentAttributes["Src"] = "src"; + WebComponentAttributes["Width"] = "width"; + WebComponentAttributes["Height"] = "height"; + WebComponentAttributes["Token"] = "token"; + WebComponentAttributes["Debug"] = "debug"; + WebComponentAttributes["IframeAuth"] = "iframe-auth"; + WebComponentAttributes["OnVizLoadError"] = "onvizloaderror"; + WebComponentAttributes["ForceTokenSync"] = "force-token-sync"; +})(WebComponentAttributes = exports.WebComponentAttributes || (exports.WebComponentAttributes = {})); +/** + * The names of the string constants you can use as child tags for TableauViz, TableauAuthoringViz and TableauAskData custom elements. + * @ignore + */ +var WebComponentChildElements; +(function (WebComponentChildElements) { + /** + * Contains a list of custom parameters. Available in viz viewing, viz authoring and askdata. + */ + WebComponentChildElements["CustomParameter"] = "custom-parameter"; +})(WebComponentChildElements = exports.WebComponentChildElements || (exports.WebComponentChildElements = {})); +var WebComponentChildElementAttributes; +(function (WebComponentChildElementAttributes) { + WebComponentChildElementAttributes["Field"] = "field"; + WebComponentChildElementAttributes["Value"] = "value"; + WebComponentChildElementAttributes["Name"] = "name"; +})(WebComponentChildElementAttributes = exports.WebComponentChildElementAttributes || (exports.WebComponentChildElementAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js": +/*!*********************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js ***! + \*********************************************************************************************/ +/***/ ((module) => { + +"use strict"; + +// All enum values made available to Extensions developers. +// Enums should be kept in alphabetical order. +var Tableau; +(function (Tableau) { + /** + * All error codes used by the Extensions API. + */ + var ErrorCodes; + (function (ErrorCodes) { + /** + * Thrown when caller attempts to execute command before initialization has completed. + */ + ErrorCodes["APINotInitialized"] = "api-not-initialized"; + /** + * Thrown when caller attempts to execute command while extension is not visible. + */ + ErrorCodes["VisibilityError"] = "visibility-error"; + /** + * Only one dialog can be opened at time with the UI namespace functionality. + */ + ErrorCodes["DialogAlreadyOpen"] = "dialog-already-open"; + /** + * The open dialog was closed by the user. + */ + ErrorCodes["DialogClosedByUser"] = "dialog-closed-by-user"; + /** + * An error occurred within the Tableau Extensions API. Contact Tableau Support. + */ + ErrorCodes["InternalError"] = "internal-error"; + /** + * A dialog must start on the same domain as the parent extenion. + */ + ErrorCodes["InvalidDomainDialog"] = "invalid-dialog-domain"; + /** + * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field. + */ + ErrorCodes["InvalidParameter"] = "invalid-parameter"; + /** + * Can occur if the extension interacts with a filter that has been removed from the worksheet. + */ + ErrorCodes["MissingFilter"] = "missing-filter"; + /** + * Can occur if the extension interacts with a parameter that has been removed from the worksheet. + */ + ErrorCodes["MissingParameter"] = "missing-parameter"; + /** + * Internal Server Error + */ + ErrorCodes["ServerError"] = "server-error"; + /** + * Developer cannot save settings while another save is still in progress. + */ + ErrorCodes["SettingSaveInProgress"] = "setting-save-in-progress"; + /** + * An unknown event name was specified in the call to `addEventListener` or `removeEventListener`. + */ + ErrorCodes["UnsupportedEventName"] = "unsupported-event-name"; + /** + * A method was used for a type of data source that doesn't support that method (see getActiveTablesAsync for an example) + */ + ErrorCodes["UnsupportedMethodForDataSourceType"] = "unsupported-method-for-data-source-type"; + })(ErrorCodes = Tableau.ErrorCodes || (Tableau.ErrorCodes = {})); + /** + * The context in which the Extensions is currently running. + */ + var ExtensionContext; + (function (ExtensionContext) { + ExtensionContext["Desktop"] = "desktop"; + ExtensionContext["Server"] = "server"; + })(ExtensionContext = Tableau.ExtensionContext || (Tableau.ExtensionContext = {})); + /** + * The mode in which the Extensions is currently running. + */ + var ExtensionMode; + (function (ExtensionMode) { + ExtensionMode["Authoring"] = "authoring"; + ExtensionMode["Viewing"] = "viewing"; + })(ExtensionMode = Tableau.ExtensionMode || (Tableau.ExtensionMode = {})); + /** + * Represents the type of event that can be listened for. + */ + var TableauEventType; + (function (TableauEventType) { + /** Raised when any filter has changed state. You can use this event type with [Worksheet](../interfaces/worksheet.html) objects.*/ + TableauEventType["FilterChanged"] = "filter-changed"; + /** The selected marks on a visualization has changed. + * You can use this event type with [Worksheet](../interfaces/worksheet.html) objects. */ + TableauEventType["MarkSelectionChanged"] = "mark-selection-changed"; + /** The summary data backing a worksheet has changed + * You can use this event type with [Worksheet](../interfaces/worksheet.html) objects.*/ + TableauEventType["SummaryDataChanged"] = "summary-data-changed"; + /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects. */ + TableauEventType["ParameterChanged"] = "parameter-changed"; + /** Settings have been changed for this extension. You can use this event type with [[Settings]] objects. */ + TableauEventType["SettingsChanged"] = "settings-changed"; + /** The dashboard layout has changed + * @category Dashboard Extensions + */ + TableauEventType["DashboardLayoutChanged"] = "dashboard-layout-changed"; + /** The workbook formatting has changed + * @category Dashboard Extensions + */ + TableauEventType["WorkbookFormattingChanged"] = "workbook-formatting-changed"; + })(TableauEventType = Tableau.TableauEventType || (Tableau.TableauEventType = {})); + /** + * Enum that represents the data type of encodings for createVizImageAsync. + * @since 1.6.0 + */ + var VizImageEncodingType; + (function (VizImageEncodingType) { + VizImageEncodingType["Discrete"] = "discrete"; + VizImageEncodingType["Continuous"] = "continuous"; + })(VizImageEncodingType = Tableau.VizImageEncodingType || (Tableau.VizImageEncodingType = {})); + /** + * Enum that represents the sort direction for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImageSortDirectionType; + (function (VizImageSortDirectionType) { + VizImageSortDirectionType["Ascending"] = "ascending"; + VizImageSortDirectionType["Descending"] = "descending"; + })(VizImageSortDirectionType = Tableau.VizImageSortDirectionType || (Tableau.VizImageSortDirectionType = {})); + /** + * Enum that represents the palette type for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImagePaletteType; + (function (VizImagePaletteType) { + VizImagePaletteType["CustomDiverging"] = "custom-diverging"; + VizImagePaletteType["CustomSequential"] = "custom-sequential"; + })(VizImagePaletteType = Tableau.VizImagePaletteType || (Tableau.VizImagePaletteType = {})); + /** + * Enum that represents the Size Setting type for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImageSizeSettingType; + (function (VizImageSizeSettingType) { + VizImageSizeSettingType["Fixed"] = "fixed"; + VizImageSizeSettingType["Manual"] = "manual"; + })(VizImageSizeSettingType = Tableau.VizImageSizeSettingType || (Tableau.VizImageSizeSettingType = {})); + /** + * Enum that represents the Size Setting alignment type for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImageSizeSettingAlignmentType; + (function (VizImageSizeSettingAlignmentType) { + VizImageSizeSettingAlignmentType["Right"] = "right"; + VizImageSizeSettingAlignmentType["Left"] = "left"; + VizImageSizeSettingAlignmentType["Center"] = "center"; + })(VizImageSizeSettingAlignmentType = Tableau.VizImageSizeSettingAlignmentType || (Tableau.VizImageSizeSettingAlignmentType = {})); +})(Tableau || (Tableau = {})); +module.exports = Tableau; + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js": +/*!****************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var SharedErrorCodes; +(function (SharedErrorCodes) { + /** + * A CSV or Excel file failed to be created in Viz.exportCrosstabAsync(). + */ + SharedErrorCodes["CrosstabCreationError"] = "crosstab-creation-error"; + /** + * A CSV file failed to be created in Viz.exportDataAsync(). + */ + SharedErrorCodes["DataCreationError"] = "data-creation-error"; + /** + * An invalid aggregation was specified for the filter, such as setting a range filter to "SUM(Sales)" instead of + * "Sales". + */ + SharedErrorCodes["InvalidAggregationFieldName"] = "invalid-aggregation-field-name"; + /** + * A filter operation was attempted on a field that does not exist in the data source. + */ + SharedErrorCodes["InvalidFilterFieldName"] = "invalid-filter-name"; + /** + * A filter operation was attempted using a value that is the wrong data type or format. + */ + SharedErrorCodes["InvalidFilterFieldValue"] = "invalid-filter-fieldValue"; + /** + * An invalid date value was specified in a Sheet.selectMarksAsync() call for a date field. + */ + SharedErrorCodes["InvalidSelectionDate"] = "invalid-selection-date"; + /** + * A field was specified in a Sheet.selectMarksAsync() call that does not exist in the data source. + */ + SharedErrorCodes["InvalidSelectionFieldName"] = "invalid-selection-fieldName"; + /** + * An invalid value was specified in a Sheet.selectMarksAsync() call. + */ + SharedErrorCodes["InvalidSelectionValue"] = "invalid-selection-value"; + /** + * A parameter did not include a valid sheet selection for exporting. + */ + SharedErrorCodes["InvalidSelectionSheet"] = "invalid-selection-sheet"; + /** + * An error occurred within the Tableau API. Contact Tableau Support. + */ + SharedErrorCodes["InternalError"] = "internal-error"; + /** + * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field. + */ + SharedErrorCodes["InvalidParameter"] = "invalid-parameter"; + /** + * A PDF file failed to be created in Viz.exportPDFAsync(). + */ + SharedErrorCodes["PDFCreationError"] = "pdf-creation-error"; + /** + * A PowerPoint file failed to be created in Viz.exportPowerPointAsync(). + */ + SharedErrorCodes["PowerPointCreationError"] = "powerpoint-creation-error"; + /** + * An operation was attempted on a sheet that is not active or embedded within the active dashboard. + */ + SharedErrorCodes["NotActiveSheet"] = "not-active-sheet"; + /** + * Property or Function is not supported within the Tableau API. + */ + SharedErrorCodes["ImplementationError"] = "wrong-implementation"; + /** + * Can occur when two incompatible calls are triggered together. + */ + SharedErrorCodes["ApiExecutionError"] = "api-execution-error"; + /** + * A general-purpose server error occurred. Details are contained in the Error object. + */ + SharedErrorCodes["ServerError"] = "server-error"; + /** + * Can occur when an api call times out. + */ + SharedErrorCodes["Timeout"] = "timeout"; +})(SharedErrorCodes = exports.SharedErrorCodes || (exports.SharedErrorCodes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js": +/*!*****************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js ***! + \*****************************************************************************************/ +/***/ (function(module) { + +"use strict"; + +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +/** + * The tableau namespace exists for organization and to avoid polluting + * the global namespace. It contains no constructs other than sub-namespaces and the Tableau enumerations. + */ +var Tableau; +(function (Tableau) { + var AnalyticsObjectType; + (function (AnalyticsObjectType) { + AnalyticsObjectType["Cluster"] = "cluster"; + AnalyticsObjectType["Forecast"] = "forecast"; + AnalyticsObjectType["TrendLine"] = "trend-line"; + })(AnalyticsObjectType = Tableau.AnalyticsObjectType || (Tableau.AnalyticsObjectType = {})); + var AnnotationType; + (function (AnnotationType) { + AnnotationType["Mark"] = "mark"; + AnnotationType["Point"] = "point"; + AnnotationType["Area"] = "area"; + })(AnnotationType = Tableau.AnnotationType || (Tableau.AnnotationType = {})); + var ColumnType; + (function (ColumnType) { + ColumnType["Discrete"] = "discrete"; + ColumnType["Continuous"] = "continuous"; + })(ColumnType = Tableau.ColumnType || (Tableau.ColumnType = {})); + var ClassNameKey; + (function (ClassNameKey) { + ClassNameKey["WorksheetTitle"] = "tableau-worksheet-title"; + ClassNameKey["Worksheet"] = "tableau-worksheet"; + ClassNameKey["Tooltip"] = "tableau-tooltip"; + ClassNameKey["StoryTitle"] = "tableau-story-title"; + ClassNameKey["DashboardTitle"] = "tableau-dashboard-title"; + })(ClassNameKey = Tableau.ClassNameKey || (Tableau.ClassNameKey = {})); + /** + * What the object represents in a dashboard. + */ + var DashboardObjectType; + (function (DashboardObjectType) { + DashboardObjectType["Blank"] = "blank"; + DashboardObjectType["Worksheet"] = "worksheet"; + DashboardObjectType["QuickFilter"] = "quick-filter"; + DashboardObjectType["ParameterControl"] = "parameter-control"; + DashboardObjectType["PageFilter"] = "page-filter"; + DashboardObjectType["Legend"] = "legend"; + DashboardObjectType["Title"] = "title"; + DashboardObjectType["Text"] = "text"; + DashboardObjectType["Image"] = "image"; + DashboardObjectType["WebPage"] = "web-page"; + DashboardObjectType["Extension"] = "extension"; + })(DashboardObjectType = Tableau.DashboardObjectType || (Tableau.DashboardObjectType = {})); + /** + * Enum that represents the visibility state of a dashboard object. + * @since 1.7.0 + */ + var DashboardObjectVisibilityType; + (function (DashboardObjectVisibilityType) { + /** Used for turning on the visibility of a dashboard object.*/ + DashboardObjectVisibilityType["Show"] = "show"; + /** Used for turning off the visibility of a dashboard object.*/ + DashboardObjectVisibilityType["Hide"] = "hide"; + })(DashboardObjectVisibilityType = Tableau.DashboardObjectVisibilityType || (Tableau.DashboardObjectVisibilityType = {})); + /** + * The different types of data a value can have + */ + var DataType; + (function (DataType) { + DataType["String"] = "string"; + DataType["Int"] = "int"; + DataType["Float"] = "float"; + DataType["Bool"] = "bool"; + DataType["Date"] = "date"; + DataType["DateTime"] = "date-time"; + DataType["Spatial"] = "spatial"; + DataType["Unknown"] = "unknown"; + })(DataType = Tableau.DataType || (Tableau.DataType = {})); + /** + * Enum that represents the changes that occur to a dashboard object. + */ + var DashboardLayoutChange; + (function (DashboardLayoutChange) { + /** A dashboard object was added */ + DashboardLayoutChange["Added"] = "added"; + /** A dashboard object was removed */ + DashboardLayoutChange["Removed"] = "removed"; + /** A dashboard object's floating state changed */ + DashboardLayoutChange["IsFloatingChanged"] = "is-floating-changed"; + /** A dashboard object's visibility changed */ + DashboardLayoutChange["IsVisibleChanged"] = "is-visible-changed"; + /** A dashboard object's position changed */ + DashboardLayoutChange["PositionChanged"] = "position-changed"; + /** A dashboard object's size changed */ + DashboardLayoutChange["SizeChanged"] = "size-changed"; + /** A dashboard object was renamed */ + DashboardLayoutChange["NameChanged"] = "name-changed"; + /** A dashboard object is selected */ + DashboardLayoutChange["Selected"] = "selected"; + /** A dashboard object is deselected */ + DashboardLayoutChange["Deselected"] = "deselected"; + /** Navigate to another dashboard */ + DashboardLayoutChange["DashboardChanged"] = "dashboard-changed"; + })(DashboardLayoutChange = Tableau.DashboardLayoutChange || (Tableau.DashboardLayoutChange = {})); + /** + * Valid date ranges for a relative date filter. + */ + var DateRangeType; + (function (DateRangeType) { + DateRangeType["Last"] = "last"; + DateRangeType["LastN"] = "last-n"; + DateRangeType["Next"] = "next"; + DateRangeType["NextN"] = "next-n"; + DateRangeType["Current"] = "current"; + DateRangeType["ToDate"] = "to-date"; + })(DateRangeType = Tableau.DateRangeType || (Tableau.DateRangeType = {})); + /** + * Enum that represents the types of dialog popup styles. + */ + var DialogStyle; + (function (DialogStyle) { + DialogStyle["Window"] = "window"; + DialogStyle["Modal"] = "modal"; + DialogStyle["Modeless"] = "modeless"; + })(DialogStyle = Tableau.DialogStyle || (Tableau.DialogStyle = {})); + var EncodingType; + (function (EncodingType) { + EncodingType["Column"] = "column"; + EncodingType["Row"] = "row"; + EncodingType["Page"] = "page"; + EncodingType["Filter"] = "filter"; + EncodingType["MarksType"] = "marks-type"; + EncodingType["MeasureValues"] = "measure-values"; + EncodingType["Color"] = "color"; + EncodingType["Size"] = "size"; + EncodingType["Label"] = "label"; + EncodingType["Detail"] = "detail"; + EncodingType["Tooltip"] = "tooltip"; + EncodingType["Shape"] = "shape"; + EncodingType["Path"] = "path"; + EncodingType["Angle"] = "angle"; + EncodingType["Geometry"] = "geometry"; + EncodingType["Custom"] = "custom"; + })(EncodingType = Tableau.EncodingType || (Tableau.EncodingType = {})); + /** + * Type of aggregation on a field. + */ + var FieldAggregationType; + (function (FieldAggregationType) { + FieldAggregationType["Sum"] = "sum"; + FieldAggregationType["Avg"] = "avg"; + FieldAggregationType["Min"] = "min"; + FieldAggregationType["Max"] = "max"; + FieldAggregationType["Stdev"] = "stdev"; + FieldAggregationType["Stdevp"] = "stdevp"; + FieldAggregationType["Var"] = "var"; + FieldAggregationType["Varp"] = "varp"; + FieldAggregationType["Collect"] = "collect"; + FieldAggregationType["Count"] = "count"; + FieldAggregationType["Countd"] = "countd"; + FieldAggregationType["Median"] = "median"; + FieldAggregationType["Attr"] = "attr"; + FieldAggregationType["None"] = "none"; + FieldAggregationType["Year"] = "year"; + FieldAggregationType["Qtr"] = "qtr"; + FieldAggregationType["Month"] = "month"; + FieldAggregationType["Day"] = "day"; + FieldAggregationType["Hour"] = "hour"; + FieldAggregationType["Minute"] = "minute"; + FieldAggregationType["Second"] = "second"; + FieldAggregationType["Week"] = "week"; + FieldAggregationType["Weekday"] = "weekday"; + FieldAggregationType["MonthYear"] = "month-year"; + FieldAggregationType["Mdy"] = "mdy"; + FieldAggregationType["End"] = "end"; + FieldAggregationType["TruncYear"] = "trunc-year"; + FieldAggregationType["TruncQtr"] = "trunc-qtr"; + FieldAggregationType["TruncMonth"] = "trunc-month"; + FieldAggregationType["TruncWeek"] = "trunc-week"; + FieldAggregationType["TruncDay"] = "trunc-day"; + FieldAggregationType["TruncHour"] = "trunc-hour"; + FieldAggregationType["TruncMinute"] = "trunc-minute"; + FieldAggregationType["TruncSecond"] = "trunc-second"; + FieldAggregationType["Quart1"] = "quart1"; + FieldAggregationType["Quart3"] = "quart3"; + FieldAggregationType["Skewness"] = "skewness"; + FieldAggregationType["Kurtosis"] = "kurtosis"; + FieldAggregationType["InOut"] = "in-out"; + FieldAggregationType["User"] = "user"; + })(FieldAggregationType = Tableau.FieldAggregationType || (Tableau.FieldAggregationType = {})); + /** + * Role of a field. + */ + var FieldRoleType; + (function (FieldRoleType) { + FieldRoleType["Dimension"] = "dimension"; + FieldRoleType["Measure"] = "measure"; + FieldRoleType["Unknown"] = "unknown"; + })(FieldRoleType = Tableau.FieldRoleType || (Tableau.FieldRoleType = {})); + /** + * An enumeration of the valid types of filters that can be applied. + */ + var FilterType; + (function (FilterType) { + FilterType["Categorical"] = "categorical"; + FilterType["Range"] = "range"; + FilterType["Hierarchical"] = "hierarchical"; + FilterType["RelativeDate"] = "relative-date"; + })(FilterType = Tableau.FilterType || (Tableau.FilterType = {})); + /** + * The different update types for applying filter + */ + var FilterUpdateType; + (function (FilterUpdateType) { + FilterUpdateType["Add"] = "add"; + FilterUpdateType["All"] = "all"; + FilterUpdateType["Replace"] = "replace"; + FilterUpdateType["Remove"] = "remove"; + })(FilterUpdateType = Tableau.FilterUpdateType || (Tableau.FilterUpdateType = {})); + /** + * The domain type for a filter + */ + var FilterDomainType; + (function (FilterDomainType) { + /** + * The domain values that are relevant to the specified filter + * i.e. the domain is restricted by a previous filter + */ + FilterDomainType["Relevant"] = "relevant"; + /** + * list of all possible domain values from database + */ + FilterDomainType["Database"] = "database"; + })(FilterDomainType = Tableau.FilterDomainType || (Tableau.FilterDomainType = {})); + /** + * The option for specifying which values to include for filtering + * Indicates what to do with null values for a given filter or mark selection call. + */ + var FilterNullOption; + (function (FilterNullOption) { + FilterNullOption["NullValues"] = "null-values"; + FilterNullOption["NonNullValues"] = "non-null-values"; + FilterNullOption["AllValues"] = "all-values"; + })(FilterNullOption = Tableau.FilterNullOption || (Tableau.FilterNullOption = {})); + /** + * Enum that serves as a filter on the DataValues returned from `getSummaryDataReaderAsync`, + * `getUnderlyingTableDataReaderAsync` and `getLogicalTableDataReaderAsync`. + * This is an optimization of returned data values only. Tableau versions prior to 2021.2 + * will pass the data across and populate the DataValue properties. + * Please note that all properties not requested will be `undefined` in the DataValue results. + * @since 1.5.0 + */ + var IncludeDataValuesOption; + (function (IncludeDataValuesOption) { + /** DataValues will include all properties.*/ + IncludeDataValuesOption["AllValues"] = "all-values"; + /** DataValues will only include value and nativeValue properties.*/ + IncludeDataValuesOption["OnlyNativeValues"] = "only-native-values"; + /** DataValues will only include formattedValue properties. */ + IncludeDataValuesOption["OnlyFormattedValues"] = "only-formatted-values"; + })(IncludeDataValuesOption = Tableau.IncludeDataValuesOption || (Tableau.IncludeDataValuesOption = {})); + /** + * Type of mark for a given marks card in a viz. + */ + var MarkType; + (function (MarkType) { + MarkType["Bar"] = "bar"; + MarkType["Line"] = "line"; + MarkType["Area"] = "area"; + MarkType["Square"] = "square"; + MarkType["Circle"] = "circle"; + MarkType["Shape"] = "shape"; + MarkType["Text"] = "text"; + MarkType["Map"] = "map"; + MarkType["Pie"] = "pie"; + MarkType["GanttBar"] = "gantt-bar"; + MarkType["Polygon"] = "polygon"; + MarkType["Heatmap"] = "heatmap"; + MarkType["VizExtension"] = "viz-extension"; + })(MarkType = Tableau.MarkType || (Tableau.MarkType = {})); + /** + * An enumeration describing the different types of allowable values. + * This is used for restricting the domain of a parameter + */ + var ParameterValueType; + (function (ParameterValueType) { + ParameterValueType["All"] = "all"; + ParameterValueType["List"] = "list"; + ParameterValueType["Range"] = "range"; + })(ParameterValueType = Tableau.ParameterValueType || (Tableau.ParameterValueType = {})); + /** + * Date period used in filters and in parameters. + */ + var PeriodType; + (function (PeriodType) { + PeriodType["Years"] = "years"; + PeriodType["Quarters"] = "quarters"; + PeriodType["Months"] = "months"; + PeriodType["Weeks"] = "weeks"; + PeriodType["Days"] = "days"; + PeriodType["Hours"] = "hours"; + PeriodType["Minutes"] = "minutes"; + PeriodType["Seconds"] = "seconds"; + })(PeriodType = Tableau.PeriodType || (Tableau.PeriodType = {})); + var QuickTableCalcType; + (function (QuickTableCalcType) { + QuickTableCalcType["RunningTotal"] = "running-total"; + QuickTableCalcType["Difference"] = "difference"; + QuickTableCalcType["PercentDifference"] = "percent-difference"; + QuickTableCalcType["PercentOfTotal"] = "percent-of-total"; + QuickTableCalcType["Rank"] = "rank"; + QuickTableCalcType["Percentile"] = "percentile"; + QuickTableCalcType["MovingAverage"] = "moving-average"; + QuickTableCalcType["YTDTotal"] = "ytd-total"; + QuickTableCalcType["CompoundGrowthRate"] = "compound-growth-rate"; + QuickTableCalcType["YearOverYearGrowth"] = "year-over-year-growth"; + QuickTableCalcType["YTDGrowth"] = "ytd-growth"; + QuickTableCalcType["Undefined"] = "undefined"; + })(QuickTableCalcType = Tableau.QuickTableCalcType || (Tableau.QuickTableCalcType = {})); + /** + * Enum for specifying the selection type for select marks api. + */ + var SelectionUpdateType; + (function (SelectionUpdateType) { + SelectionUpdateType["Replace"] = "select-replace"; + SelectionUpdateType["Add"] = "select-add"; + SelectionUpdateType["Remove"] = "select-remove"; + })(SelectionUpdateType = Tableau.SelectionUpdateType || (Tableau.SelectionUpdateType = {})); + /** + * Enum for specifying the select option for the {@link Worksheet.selectTuplesAsync} method. + */ + var SelectOptions; + (function (SelectOptions) { + /** + * Clears existing selection before selecting the tuples specified + */ + SelectOptions["Simple"] = "select-options-simple"; + /** + * Adds specified tuples to the existing selection + */ + SelectOptions["Toggle"] = "select-options-toggle"; + })(SelectOptions = Tableau.SelectOptions || (Tableau.SelectOptions = {})); + /** + * The type of sheet a [[Sheet]] object represents + */ + var SheetType; + (function (SheetType) { + SheetType["Dashboard"] = "dashboard"; + SheetType["Story"] = "story"; + SheetType["Worksheet"] = "worksheet"; + })(SheetType = Tableau.SheetType || (Tableau.SheetType = {})); + var SortDirection; + (function (SortDirection) { + SortDirection["Increasing"] = "increasing"; + SortDirection["Decreasing"] = "decreasing"; + })(SortDirection = Tableau.SortDirection || (Tableau.SortDirection = {})); + var TrendLineModelType; + (function (TrendLineModelType) { + TrendLineModelType["Linear"] = "linear"; + TrendLineModelType["Logarithmic"] = "logarithmic"; + TrendLineModelType["Exponential"] = "exponential"; + TrendLineModelType["Polynomial"] = "polynomial"; + })(TrendLineModelType = Tableau.TrendLineModelType || (Tableau.TrendLineModelType = {})); + /** + * Enum that represents the replay speed of an animation. + * @since 1.7.0 + */ + var ReplaySpeedType; + (function (ReplaySpeedType) { + /** Used for setting the replay speed of an animation to 0.5x.*/ + ReplaySpeedType["Slow"] = "slow"; + /** Used for setting the replay speed of an animation to 1.0x.*/ + ReplaySpeedType["Normal"] = "normal"; + /** Used for setting the replay speed of an animation to 2.0x.*/ + ReplaySpeedType["Fast"] = "fast"; + })(ReplaySpeedType = Tableau.ReplaySpeedType || (Tableau.ReplaySpeedType = {})); + /** + * Enum that represents the selection state of a level in a hierarchical filter + * @since Extensions 1.10.0 + */ + var HierarchicalLevelSelectionState; + (function (HierarchicalLevelSelectionState) { + HierarchicalLevelSelectionState["AllSelected"] = "all-selected"; + HierarchicalLevelSelectionState["NoneSelected"] = "none-selected"; + HierarchicalLevelSelectionState["SomeSelected"] = "some-selected"; + HierarchicalLevelSelectionState["UnknownSelected"] = "unknown-selected"; + })(HierarchicalLevelSelectionState = Tableau.HierarchicalLevelSelectionState || (Tableau.HierarchicalLevelSelectionState = {})); + Tableau.ZoneVisibilityType = __assign({}, DashboardObjectVisibilityType); +})(Tableau || (Tableau = {})); +module.exports = Tableau; + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/SharedApiExternalContract.js": +/*!************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/SharedApiExternalContract.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// This file re-exports everything which is part of the shared api public interface +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__webpack_require__(/*! ./ExternalContract/Shared/Enums */ "../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js")); +var Tableau_1 = __webpack_require__(/*! ./ExternalContract/Shared/Namespaces/Tableau */ "../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js"); +exports.AnalyticsObjectType = Tableau_1.AnalyticsObjectType; +exports.AnnotationType = Tableau_1.AnnotationType; +exports.ClassNameKey = Tableau_1.ClassNameKey; +exports.ColumnType = Tableau_1.ColumnType; +exports.DashboardLayoutChange = Tableau_1.DashboardLayoutChange; +exports.DashboardObjectType = Tableau_1.DashboardObjectType; +exports.DashboardObjectVisibilityType = Tableau_1.DashboardObjectVisibilityType; +exports.DataType = Tableau_1.DataType; +exports.DateRangeType = Tableau_1.DateRangeType; +exports.DialogStyle = Tableau_1.DialogStyle; +exports.EncodingType = Tableau_1.EncodingType; +exports.FieldAggregationType = Tableau_1.FieldAggregationType; +exports.FieldRoleType = Tableau_1.FieldRoleType; +exports.FilterDomainType = Tableau_1.FilterDomainType; +exports.FilterNullOption = Tableau_1.FilterNullOption; +exports.FilterType = Tableau_1.FilterType; +exports.FilterUpdateType = Tableau_1.FilterUpdateType; +exports.HierarchicalLevelSelectionState = Tableau_1.HierarchicalLevelSelectionState; +exports.IncludeDataValuesOption = Tableau_1.IncludeDataValuesOption; +exports.MarkType = Tableau_1.MarkType; +exports.ParameterValueType = Tableau_1.ParameterValueType; +exports.PeriodType = Tableau_1.PeriodType; +exports.QuickTableCalcType = Tableau_1.QuickTableCalcType; +exports.ReplaySpeedType = Tableau_1.ReplaySpeedType; +exports.SelectOptions = Tableau_1.SelectOptions; +exports.SelectionUpdateType = Tableau_1.SelectionUpdateType; +exports.SheetType = Tableau_1.SheetType; +exports.SortDirection = Tableau_1.SortDirection; +exports.TrendLineModelType = Tableau_1.TrendLineModelType; +exports.ZoneVisibilityType = Tableau_1.ZoneVisibilityType; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/JsApiInternalContract.js": +/*!********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/JsApiInternalContract.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +/** + * This is your main. This is where you re-export everything you want to be publicly available. + * + * The build enforces that the file has the same name as the global variable that is exported. + */ +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +// The following polyfills are needed for IE11 +__webpack_require__(/*! core-js/es/number/is-integer */ "../../node_modules/core-js/es/number/is-integer.js"); +__webpack_require__(/*! core-js/es/number/is-nan */ "../../node_modules/core-js/es/number/is-nan.js"); +__webpack_require__(/*! core-js/es/object/assign */ "../../node_modules/core-js/es/object/assign.js"); +// Export the version of the internal contract to be available at runtime +// This file is generated by yarn publish:bump via scripts/publish-check.ts +// updateInternalContractRuntimeVersion in the monorepo root. +var internalContractVersion = __webpack_require__(/*! ../internal-contract-version.json */ "../api-internal-contract-js/lib/internal-contract-version.json"); +exports.INTERNAL_CONTRACT_VERSION = internalContractVersion; +__export(__webpack_require__(/*! ./contract/DataTypeConverter */ "../api-internal-contract-js/lib/src/contract/DataTypeConverter.js")); +__export(__webpack_require__(/*! ./contract/Enums */ "../api-internal-contract-js/lib/src/contract/Enums.js")); +__export(__webpack_require__(/*! ./contract/Notifications */ "../api-internal-contract-js/lib/src/contract/Notifications.js")); +__export(__webpack_require__(/*! ./contract/Parameters */ "../api-internal-contract-js/lib/src/contract/Parameters.js")); +__export(__webpack_require__(/*! ./contract/Verbs */ "../api-internal-contract-js/lib/src/contract/Verbs.js")); +__export(__webpack_require__(/*! ./interface/AskDataInterface */ "../api-internal-contract-js/lib/src/interface/AskDataInterface.js")); +__export(__webpack_require__(/*! ./interface/PulseInterface */ "../api-internal-contract-js/lib/src/interface/PulseInterface.js")); +__export(__webpack_require__(/*! ./interface/VqlInterface */ "../api-internal-contract-js/lib/src/interface/VqlInterface.js")); +__export(__webpack_require__(/*! ./messaging/CrossFrameMessenger */ "../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js")); +__export(__webpack_require__(/*! ./messaging/interface/MessageTypes */ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js")); +__export(__webpack_require__(/*! ./versioning/VersionConverterFactory */ "../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js")); +__export(__webpack_require__(/*! ./versioning/external/ExternalIdentityVersionConverter */ "../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js")); +__export(__webpack_require__(/*! ./versioning/external/ExternalVersionConverterFactory */ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js")); +// Export the version number of messaging for consumers to use. +// Be very careful making any updates to this contract which break version compatibility. +exports.MESSAGING_VERSION = { + major: 1, + minor: 0, + fix: 0, +}; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/DataTypeConverter.js": +/*!*************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/DataTypeConverter.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Enums_1 = __webpack_require__(/*! ./Enums */ "../api-internal-contract-js/lib/src/contract/Enums.js"); +var DataTypeConverter = /** @class */ (function () { + function DataTypeConverter() { + } + DataTypeConverter.isSpecial = function (valueAsString) { + // Prior to ShowDataTablePresModel, special values come to us as + // '%null%', '%all%', '%wildcard%', '%missing%'... + // While this function will never return true for ShowDataTablePresModel conversion, + // it is as cheap as passing around a version and checking that. + // (See DataValueFormatter.cpp) + if (valueAsString.length > 2 && valueAsString[0] === '%' && valueAsString[valueAsString.length - 1] === '%') { + return true; + } + return false; + }; + // tslint:disable-next-line:no-any + DataTypeConverter.parseBoolean = function (booleanString) { + // boolean values come to us as 'true'|'false' + var normalizedBoolean = booleanString.toLowerCase(); + return normalizedBoolean !== 'true' && normalizedBoolean !== 'false' ? this.specialValueIndicator : normalizedBoolean === 'true'; + }; + // tslint:disable-next-line:no-any + DataTypeConverter.parseNumber = function (valueAsString) { + var value = Number(valueAsString); + return isNaN(value) ? this.specialValueIndicator : value; + }; + DataTypeConverter.parseDate = function (dateAsString) { + // Note that without a time, the date is assumed to be UTC + // Input of 2020-03-25 is printed as: Mar 24 2020 17:00:00 GMT-0700 + // This matches style used in existing convertFilterValuePresModel + var value = new Date(dateAsString); + return Number.isNaN(value.getTime()) ? null : value; + }; + DataTypeConverter.parseDateTime = function (dateAsString) { + // With a time, the date is assumed to be UTC. + // Our date format is always: yyyy-mm-dd hh:mm:ss + // Unfortunately, IE11 can't parse that format so we add a T between the day and time. + // We also add a Z so that it is UTC. (Without the Z, some browsers assume local, and others UTC) + var formattedDateString = dateAsString.replace(' ', 'T').concat('Z'); + var value = new Date(formattedDateString); + return Number.isNaN(value.getTime()) ? null : value; + }; + // tslint:disable-next-line:no-any + DataTypeConverter.convertValueAsStringToValue = function (valueAsString, type) { + // This is both DataDictionary and ShowDataTablePresModel compatible. + // In the DataDictionary, valueAsString can be '%null%' or '%missing%', while in + // ShowDataTablePresModel, we can get 'null' or 'missing', or '%null%' for string special values. + // For either of these cases, we return specialValueIndicator (or the original special string). + // To maintain backwards compatibilty, this converter: + // 1. returns a string for any special values + // 2. returns a string for any date + // Parameter min/max values can be undefined, so result is also undefined + if (valueAsString === undefined || valueAsString === null) { + return undefined; + } + if (this.isSpecial(valueAsString)) { + return valueAsString; + } + switch (type) { + case Enums_1.DataType.Bool: + return this.parseBoolean(valueAsString); + case Enums_1.DataType.Int: + case Enums_1.DataType.Float: + // Return special value '%null%' for any failure in parsing. + // We need to do that because ShowDataTablePresModel will give us strings like 'null' + // for special values. + return this.parseNumber(valueAsString); + case Enums_1.DataType.Date: + // For ShowDataTablePresModel, special values will be "null" which will fail to parse. + // In that case, we return '%null%'. + return this.parseDate(valueAsString) === null ? this.specialValueIndicator : valueAsString; + case Enums_1.DataType.DateTime: + // For ShowDataTablePresModel, special values will be "null" which will fail to parse. + // In that case, we return '%null%' + return this.parseDateTime(valueAsString) === null ? this.specialValueIndicator : valueAsString; + case Enums_1.DataType.Spatial: + case Enums_1.DataType.String: + default: + return valueAsString; + } + }; + // tslint:disable-next-line:no-any + DataTypeConverter.convertValueToNativeValue = function (value, type) { + // This converts from our 1.2 API that returns strings for specials, and dates as strings. + // It takes the special case of '%null%' and returns a null. + // For dates, it returns a Date object rather than a string. + // convertValueToNativeValue should be used to build a DataValue.nativeValue field. + // Parameter min/max can be undefined. If that is the case, nativeValue is treated like a special + if (value === undefined || value === null) { + return null; + } + switch (type) { + case Enums_1.DataType.Bool: + return typeof value === 'string' ? null : value; + case Enums_1.DataType.Int: + case Enums_1.DataType.Float: + return typeof value === 'string' ? null : value; + case Enums_1.DataType.Date: + // Convert the string to Date object (or null if parsing fails ... we assume special) + return this.parseDate(value); + case Enums_1.DataType.DateTime: + // Convert the string to Date object (or null if parsing fails ... we assume special) + return this.parseDateTime(value); + case Enums_1.DataType.String: + return this.isSpecial(value) ? null : value; + case Enums_1.DataType.Spatial: + default: + return value; + } + }; + // tslint:disable-next-line:no-any + DataTypeConverter.convertStringValueToNativeValue = function (value, type) { + // This handles the conversion from string directly to native value for all types + return this.convertValueToNativeValue(this.convertValueAsStringToValue(value, type), type); + }; + DataTypeConverter.specialValueIndicator = '%null%'; + return DataTypeConverter; +}()); +exports.DataTypeConverter = DataTypeConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Enums.js": +/*!*************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Enums.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ExtensionContext; +(function (ExtensionContext) { + ExtensionContext["Desktop"] = "desktop"; + ExtensionContext["Server"] = "server"; + ExtensionContext["Unknown"] = "unknown"; +})(ExtensionContext = exports.ExtensionContext || (exports.ExtensionContext = {})); +var ExtensionMode; +(function (ExtensionMode) { + ExtensionMode["Authoring"] = "authoring"; + ExtensionMode["Viewing"] = "viewing"; + ExtensionMode["Unknown"] = "unknown"; +})(ExtensionMode = exports.ExtensionMode || (exports.ExtensionMode = {})); +var AnnotateEnum; +(function (AnnotateEnum) { + AnnotateEnum["Mark"] = "mark"; + AnnotateEnum["Point"] = "point"; + AnnotateEnum["Area"] = "area"; +})(AnnotateEnum = exports.AnnotateEnum || (exports.AnnotateEnum = {})); +var ColumnType; +(function (ColumnType) { + ColumnType["Discrete"] = "discrete"; + ColumnType["Continuous"] = "continuous"; +})(ColumnType = exports.ColumnType || (exports.ColumnType = {})); +var DashboardObjectType; +(function (DashboardObjectType) { + DashboardObjectType["Blank"] = "blank"; + DashboardObjectType["Worksheet"] = "worksheet"; + DashboardObjectType["QuickFilter"] = "quick-filter"; + DashboardObjectType["ParameterControl"] = "parameter-control"; + DashboardObjectType["PageFilter"] = "page-filter"; + DashboardObjectType["Legend"] = "legend"; + DashboardObjectType["Title"] = "title"; + DashboardObjectType["Text"] = "text"; + DashboardObjectType["Image"] = "image"; + DashboardObjectType["WebPage"] = "web-page"; + DashboardObjectType["Extension"] = "extension"; +})(DashboardObjectType = exports.DashboardObjectType || (exports.DashboardObjectType = {})); +var DataType; +(function (DataType) { + DataType["String"] = "string"; + DataType["Int"] = "int"; + DataType["Float"] = "float"; + DataType["Bool"] = "bool"; + DataType["Date"] = "date"; + DataType["DateTime"] = "date-time"; + DataType["Spatial"] = "spatial"; + DataType["Unknown"] = "unknown"; +})(DataType = exports.DataType || (exports.DataType = {})); +var DialogStyle; +(function (DialogStyle) { + DialogStyle["Window"] = "window"; + DialogStyle["Modal"] = "modal"; + DialogStyle["Modeless"] = "modeless"; +})(DialogStyle = exports.DialogStyle || (exports.DialogStyle = {})); +var EncodedDataType; +(function (EncodedDataType) { + EncodedDataType["Number"] = "number"; + EncodedDataType["String"] = "string"; + EncodedDataType["Date"] = "date"; + EncodedDataType["Boolean"] = "boolean"; +})(EncodedDataType = exports.EncodedDataType || (exports.EncodedDataType = {})); +var ErrorCodes; +(function (ErrorCodes) { + ErrorCodes["INITIALIZATION_ERROR"] = "initialization-error"; + ErrorCodes["INTERNAL_ERROR"] = "internal-error"; + ErrorCodes["MISSING_ENUM_MAPPING"] = "missing-enum-mapping"; + ErrorCodes["MISSING_PARAMETER"] = "missing-parameter"; + ErrorCodes["PERMISSION_DENIED"] = "permission-denied"; + ErrorCodes["PRES_MODEL_PARSING_ERROR"] = "pres-model-parsing-error"; + ErrorCodes["VERSION_NOT_CONFIGURED"] = "version-not-configured"; + ErrorCodes["VISIBILITY_ERROR"] = "visibility-error"; + ErrorCodes["UNKNOWN_VERB_ID"] = "unknown-verb-id"; +})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {})); +var FieldAggregationType; +(function (FieldAggregationType) { + FieldAggregationType["Sum"] = "sum"; + FieldAggregationType["Avg"] = "avg"; + FieldAggregationType["Min"] = "min"; + FieldAggregationType["Max"] = "max"; + FieldAggregationType["Stdev"] = "stdev"; + FieldAggregationType["Stdevp"] = "stdevp"; + FieldAggregationType["Var"] = "var"; + FieldAggregationType["Varp"] = "varp"; + FieldAggregationType["Collect"] = "collect"; + FieldAggregationType["Count"] = "count"; + FieldAggregationType["Countd"] = "countd"; + FieldAggregationType["Median"] = "median"; + FieldAggregationType["Attr"] = "attr"; + FieldAggregationType["None"] = "none"; + FieldAggregationType["Year"] = "year"; + FieldAggregationType["Qtr"] = "qtr"; + FieldAggregationType["Month"] = "month"; + FieldAggregationType["Day"] = "day"; + FieldAggregationType["Hour"] = "hour"; + FieldAggregationType["Minute"] = "minute"; + FieldAggregationType["Second"] = "second"; + FieldAggregationType["Week"] = "week"; + FieldAggregationType["Weekday"] = "weekday"; + FieldAggregationType["MonthYear"] = "month-year"; + FieldAggregationType["Mdy"] = "mdy"; + FieldAggregationType["End"] = "end"; + FieldAggregationType["TruncYear"] = "trunc-year"; + FieldAggregationType["TruncQtr"] = "trunc-qtr"; + FieldAggregationType["TruncMonth"] = "trunc-month"; + FieldAggregationType["TruncWeek"] = "trunc-week"; + FieldAggregationType["TruncDay"] = "trunc-day"; + FieldAggregationType["TruncHour"] = "trunc-hour"; + FieldAggregationType["TruncMinute"] = "trunc-minute"; + FieldAggregationType["TruncSecond"] = "trunc-second"; + FieldAggregationType["Quart1"] = "quart1"; + FieldAggregationType["Quart3"] = "quart3"; + FieldAggregationType["Skewness"] = "skewness"; + FieldAggregationType["Kurtosis"] = "kurtosis"; + FieldAggregationType["InOut"] = "in-out"; + FieldAggregationType["User"] = "user"; +})(FieldAggregationType = exports.FieldAggregationType || (exports.FieldAggregationType = {})); +var FieldRoleType; +(function (FieldRoleType) { + FieldRoleType["Dimension"] = "dimension"; + FieldRoleType["Measure"] = "measure"; + FieldRoleType["Unknown"] = "unknown"; +})(FieldRoleType = exports.FieldRoleType || (exports.FieldRoleType = {})); +/** + * The different update types for applying filter. + */ +var FilterUpdateType; +(function (FilterUpdateType) { + FilterUpdateType["Add"] = "add"; + FilterUpdateType["All"] = "all"; + FilterUpdateType["Replace"] = "replace"; + FilterUpdateType["Remove"] = "remove"; +})(FilterUpdateType = exports.FilterUpdateType || (exports.FilterUpdateType = {})); +var SheetType; +(function (SheetType) { + SheetType["Dashboard"] = "dashboard"; + SheetType["Story"] = "story"; + SheetType["Worksheet"] = "worksheet"; +})(SheetType = exports.SheetType || (exports.SheetType = {})); +var DomainRestrictionType; +(function (DomainRestrictionType) { + DomainRestrictionType["All"] = "all"; + DomainRestrictionType["List"] = "list"; + DomainRestrictionType["Range"] = "range"; +})(DomainRestrictionType = exports.DomainRestrictionType || (exports.DomainRestrictionType = {})); +var DateStepPeriod; +(function (DateStepPeriod) { + DateStepPeriod["Years"] = "years"; + DateStepPeriod["Quarters"] = "quarters"; + DateStepPeriod["Months"] = "months"; + DateStepPeriod["Weeks"] = "weeks"; + DateStepPeriod["Days"] = "days"; + DateStepPeriod["Hours"] = "hours"; + DateStepPeriod["Minutes"] = "minutes"; + DateStepPeriod["Seconds"] = "seconds"; +})(DateStepPeriod = exports.DateStepPeriod || (exports.DateStepPeriod = {})); +/** + * The option for specifying which values to include for filtering. + */ +var FilterNullOption; +(function (FilterNullOption) { + FilterNullOption["NullValues"] = "nullvalues"; + FilterNullOption["NonNullValues"] = "nonnullvalues"; + FilterNullOption["AllValues"] = "allvalues"; +})(FilterNullOption = exports.FilterNullOption || (exports.FilterNullOption = {})); +/** + * The type of filter domain + */ +var FilterDomainType; +(function (FilterDomainType) { + FilterDomainType["Relevant"] = "relevant"; + FilterDomainType["Database"] = "database"; +})(FilterDomainType = exports.FilterDomainType || (exports.FilterDomainType = {})); +/** + * Internal enum for specifying the selection type for select marks api. + */ +var SelectionUpdateType; +(function (SelectionUpdateType) { + SelectionUpdateType["Replace"] = "select-replace"; + SelectionUpdateType["Add"] = "select-add"; + SelectionUpdateType["Remove"] = "select-remove"; +})(SelectionUpdateType = exports.SelectionUpdateType || (exports.SelectionUpdateType = {})); +/** + * Internal enum for specifying the select option for the select tuples api. + */ +var SelectOptions; +(function (SelectOptions) { + SelectOptions["Simple"] = "select-options-simple"; + SelectOptions["Toggle"] = "select-options-toggle"; + SelectOptions["Menu"] = "select-options-menu"; + SelectOptions["Range"] = "select-options-range"; + SelectOptions["Search"] = "select-options-search"; +})(SelectOptions = exports.SelectOptions || (exports.SelectOptions = {})); +/** + * Internal enum for specifying the included values type for range selection. + */ +var QuantitativeIncludedValues; +(function (QuantitativeIncludedValues) { + QuantitativeIncludedValues["IncludeNull"] = "include-null"; + QuantitativeIncludedValues["IncludeNonNull"] = "include-non-null"; + QuantitativeIncludedValues["IncludeAll"] = "include-all"; +})(QuantitativeIncludedValues = exports.QuantitativeIncludedValues || (exports.QuantitativeIncludedValues = {})); +/** + * Internal enum for specifying a hierarchical level selection state. + */ +var HierarchicalLevelSelectionState; +(function (HierarchicalLevelSelectionState) { + HierarchicalLevelSelectionState["AllSelected"] = "all-selected"; + HierarchicalLevelSelectionState["NoneSelected"] = "none-selected"; + HierarchicalLevelSelectionState["SomeSelected"] = "some-selected"; + HierarchicalLevelSelectionState["UnknownSelected"] = "unknown-selected"; +})(HierarchicalLevelSelectionState = exports.HierarchicalLevelSelectionState || (exports.HierarchicalLevelSelectionState = {})); +/** + * Type of mark for a given marks card in a viz. + */ +var MarkType; +(function (MarkType) { + MarkType["Bar"] = "bar"; + MarkType["Line"] = "line"; + MarkType["Area"] = "area"; + MarkType["Square"] = "square"; + MarkType["Circle"] = "circle"; + MarkType["Shape"] = "shape"; + MarkType["Text"] = "text"; + MarkType["Map"] = "map"; + MarkType["Pie"] = "pie"; + MarkType["GanttBar"] = "gantt-bar"; + MarkType["Polygon"] = "polygon"; + MarkType["Heatmap"] = "heatmap"; + MarkType["VizExtension"] = "viz-extension"; +})(MarkType = exports.MarkType || (exports.MarkType = {})); +/** + * Internal enum for specifying the type of filter + */ +var FilterType; +(function (FilterType) { + FilterType["Categorical"] = "categorical"; + FilterType["Range"] = "range"; + FilterType["RelativeDate"] = "relativeDate"; + FilterType["Hierarchical"] = "hierarchical"; +})(FilterType = exports.FilterType || (exports.FilterType = {})); +/** + * Internal enum for specifying the DateRangeType of a relative date filter + */ +var DateRangeType; +(function (DateRangeType) { + /** + * Refers to the last day, week, month, etc. of the date period. + */ + DateRangeType["Last"] = "last"; + /** + * Refers to the last N days, weeks, months, etc. of the date period. + */ + DateRangeType["LastN"] = "lastN"; + /** + * Refers to the next day, week, month, etc. of the date period. + */ + DateRangeType["Next"] = "next"; + /** + * Refers to the next N days, weeks, months, etc. of the date period. + */ + DateRangeType["NextN"] = "nextN"; + /** + * Refers to the current day, week, month, etc. of the date period. + */ + DateRangeType["Current"] = "current"; + /** + * Refers to everything up to and including the current day, week, month, etc. of the date period. + */ + DateRangeType["ToDate"] = "toDate"; +})(DateRangeType = exports.DateRangeType || (exports.DateRangeType = {})); +/** + * Used to determine if the launching of an extension dialog succeeded or failed. + */ +var ExtensionDialogResult; +(function (ExtensionDialogResult) { + ExtensionDialogResult["DialogAlreadyOpen"] = "dialog-already-open"; + ExtensionDialogResult["InvalidDomain"] = "invalid-domain"; + ExtensionDialogResult["Success"] = "success"; +})(ExtensionDialogResult = exports.ExtensionDialogResult || (exports.ExtensionDialogResult = {})); +// Enumeration for ApiShowData table id sentinels. +var ApiShowDataTableSentinel; +(function (ApiShowDataTableSentinel) { + // find the one logical table - used in version compatibility check for getUnderlyingDataTable and getLogicalDataTable commands + ApiShowDataTableSentinel["SingleTableId"] = "single-table-id-sentinel"; + ApiShowDataTableSentinel["SingleTableCaption"] = "Single table id sentinel"; +})(ApiShowDataTableSentinel = exports.ApiShowDataTableSentinel || (exports.ApiShowDataTableSentinel = {})); +/** + * Used to optimize the getSummaryData/getUnderlyingTableData results + * Mapped from external IncludeDataValuesOption + */ +var ApiShowDataTableFormat; +(function (ApiShowDataTableFormat) { + ApiShowDataTableFormat["NativeValuesOnly"] = "native-values-only"; + ApiShowDataTableFormat["FormattedValuesOnly"] = "formatted-values-only"; + ApiShowDataTableFormat["NativeAndFormattedValues"] = "native-and-formatted-values"; +})(ApiShowDataTableFormat = exports.ApiShowDataTableFormat || (exports.ApiShowDataTableFormat = {})); +/** + * Used to set page size for export layout options. + */ +var PageSizeOption; +(function (PageSizeOption) { + PageSizeOption["Letter"] = "letter"; + PageSizeOption["Legal"] = "legal"; + PageSizeOption["Note"] = "note"; + PageSizeOption["Folio"] = "folio"; + PageSizeOption["Tabloid"] = "tabloid"; + PageSizeOption["Ledger"] = "ledger"; + PageSizeOption["Statement"] = "statement"; + PageSizeOption["Executive"] = "executive"; + PageSizeOption["A3"] = "a3"; + PageSizeOption["A4"] = "a4"; + PageSizeOption["A5"] = "a5"; + PageSizeOption["B4"] = "b4"; + PageSizeOption["B5"] = "b5"; + PageSizeOption["Quarto"] = "quarto"; + PageSizeOption["Unspecified"] = "unspecified"; +})(PageSizeOption = exports.PageSizeOption || (exports.PageSizeOption = {})); +/** + * Used to set the page orientation mode for export layout options. + */ +var PageOrientation; +(function (PageOrientation) { + PageOrientation["Printer"] = "printer"; + PageOrientation["Portrait"] = "portrait"; + PageOrientation["Landscape"] = "landscape"; +})(PageOrientation = exports.PageOrientation || (exports.PageOrientation = {})); +/** + * Used to set scale mode for export layout options. + */ +var ScaleMode; +(function (ScaleMode) { + ScaleMode["ScaleAuto"] = "auto"; + ScaleMode["ScalePercentage"] = "percent"; + ScaleMode["ScaleFitPages"] = "fit-pages"; +})(ScaleMode = exports.ScaleMode || (exports.ScaleMode = {})); +/** + * Used by setFitAndScaleValues to scale percent values + */ +var PageScalingOption; +(function (PageScalingOption) { + PageScalingOption["ScalePctAuto"] = "auto"; + PageScalingOption["ScalePct400"] = "pct400"; + PageScalingOption["ScalePct200"] = "pct200"; + PageScalingOption["ScalePct100"] = "pct100"; + PageScalingOption["ScalePct90"] = "pct90"; + PageScalingOption["ScalePct80"] = "pct80"; + PageScalingOption["ScalePct75"] = "pct75"; + PageScalingOption["ScalePct60"] = "pct60"; + PageScalingOption["ScalePct50"] = "pct50"; + PageScalingOption["ScalePct25"] = "pct25"; +})(PageScalingOption = exports.PageScalingOption || (exports.PageScalingOption = {})); +/** + * Used by setFitAndScaleValues to scale fit page values + */ +var FitPages; +(function (FitPages) { + FitPages["FitOneHigh"] = "fit0x1"; + FitPages["FitTwoHigh"] = "fit0x2"; + FitPages["FitOneWide"] = "fit1x0"; + FitPages["FitTwoWide"] = "fit2x0"; +})(FitPages = exports.FitPages || (exports.FitPages = {})); +/** + * Used by getVisualSpecificationAsync + */ +var EncodingType; +(function (EncodingType) { + EncodingType["Color"] = "color"; + EncodingType["Size"] = "size"; + EncodingType["Label"] = "label"; + EncodingType["Detail"] = "detail"; + EncodingType["Tooltip"] = "tooltip"; + EncodingType["Shape"] = "shape"; + EncodingType["Path"] = "path"; + EncodingType["Angle"] = "angle"; + EncodingType["Geometry"] = "geometry"; + EncodingType["Custom"] = "custom"; +})(EncodingType = exports.EncodingType || (exports.EncodingType = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Notifications.js": +/*!*********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Notifications.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var NotificationId; +(function (NotificationId) { + NotificationId["CustomMarkContextMenuClicked"] = "custom-mark-context-menu-clicked"; + NotificationId["ContextMenuClick"] = "context-menu-click"; + NotificationId["CustomViewRemoved"] = "custom-view-removed"; + NotificationId["CustomViewSaved"] = "custom-view-saved"; + NotificationId["CustomViewSetDefault"] = "custom-view-set-default"; + NotificationId["CustomViewsLoaded"] = "custom-views-loaded"; + NotificationId["DashboardLayoutChanged"] = "dashboard-layout-changed"; + NotificationId["EditButtonClicked"] = "edit-button-clicked"; + NotificationId["EditInDesktopButtonClicked"] = "edit-in-desktop-button-clicked"; + NotificationId["ExtensionDialogUpdate"] = "extension-dialog-update"; + NotificationId["FilterChanged"] = "filter-changed"; + NotificationId["FirstVizSizeKnown"] = "first-viz-size-known"; + NotificationId["ParameterChanged"] = "parameter-changed"; + NotificationId["SelectedMarksChanged"] = "selected-marks-changed"; + NotificationId["SettingsChanged"] = "settings-changed"; + NotificationId["SummaryDataChanged"] = "summary-data-changed"; + NotificationId["TestConversionNotification"] = "test-conversion-notification"; + NotificationId["ToolbarStateChanged"] = "toolbar-state-changed"; + NotificationId["VizInteractive"] = "viz-interactive"; + NotificationId["AskDataInteractive"] = "ask-data-interactive"; + NotificationId["WorkbookReadyToClose"] = "workbook-ready-to-close"; + NotificationId["WorkbookFormattingChanged"] = "workbook-formatting-changed"; + NotificationId["WorkbookPublished"] = "workbook-published"; + NotificationId["WorkbookPublishedAs"] = "workbook-published-as"; + NotificationId["UrlAction"] = "url-action"; + NotificationId["TabSwitched"] = "tab-switched"; + NotificationId["StoryPointSwitched"] = "story-point-switched"; + NotificationId["ReadyToReceiveAuthToken"] = "ready-to-receive-auth-token"; +})(NotificationId = exports.NotificationId || (exports.NotificationId = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Parameters.js": +/*!******************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Parameters.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put +// new ones, and merge conflicts. +var ParameterId; +(function (ParameterId) { + ParameterId["ActiveTablesInfo"] = "active-tables-info"; + ParameterId["AnchorDate"] = "anchor-date"; + ParameterId["AnnotateEnum"] = "annotate-enum"; + ParameterId["AnnotationList"] = "annotation-list"; + ParameterId["CategoricalDomain"] = "categorical-domain"; + ParameterId["ClickThroughEnabled"] = "click-through-enabled"; + ParameterId["ColumnsToInclude"] = "columns-to-include"; + ParameterId["ColumnsToIncludeById"] = "columns-to-include-by-id"; + ParameterId["ConnectionDescriptionSummaries"] = "connection-description-summaries"; + ParameterId["CurrentSheetType"] = "current-sheet-type"; + ParameterId["CustomView"] = "custom-view"; + ParameterId["CustomViewIsDefault"] = "custom-view-is-default"; + ParameterId["CustomViewIsPublic"] = "custom-view-is-public"; + ParameterId["CustomViewLuid"] = "custom-view-luid"; + ParameterId["CustomViewName"] = "custom-view-name"; + ParameterId["CustomViews"] = "custom-views"; + ParameterId["Dashboard"] = "dashboard"; + ParameterId["DashboardFilters"] = "dashboard-filters"; + ParameterId["DashboardName"] = "dashboard"; + ParameterId["DashboardObjectPositionAndSizeUpdate"] = "dashboard-object-position-and-size-update"; + ParameterId["DashboardObjectPositionAndSizeUpdateList"] = "dashboard-object-position-and-size-update-list"; + ParameterId["DataRowIndex"] = "data-row-index"; + ParameterId["DataSchema"] = "data-schema"; + ParameterId["DataSource"] = "data-source"; + ParameterId["DataSourceDataTable"] = "data-source-data-table"; + ParameterId["DataSourceId"] = "data-source-id"; + ParameterId["DataSourceName"] = "data-source-name"; + ParameterId["DataTable"] = "data-table"; + ParameterId["DataTableReader"] = "data-table-reader"; + ParameterId["DateRangeType"] = "date-range-type"; + ParameterId["DeltaTimeMs"] = "delta-time-ms"; + ParameterId["DimValSelectionModels"] = "dimensionValueSelectionModels"; + ParameterId["DomainType"] = "domain-type"; + ParameterId["EmbeddingAbstractQuery"] = "embedding-abstract-query"; + ParameterId["EmbeddingBootstrapInfo"] = "embedding-bootstrap-info"; + ParameterId["ExportCrosstabSheetMap"] = "export-crosstab-sheet-map"; + ParameterId["ExportFile"] = "export-file"; + ParameterId["ExportOriginUrl"] = "export-origin-url"; + ParameterId["ExportPdfOptions"] = "export-pdf-options"; + ParameterId["ExtensionBootstrapInfo"] = "extension-bootstrap-info"; + ParameterId["ExtensionContextMenuIds"] = "extension-context-menu-ids"; + ParameterId["ExtensionDialogH"] = "extension-dialog-height"; + ParameterId["ExtensionDialogPayload"] = "extension-dialog-payload"; + ParameterId["ExtensionDialogResult"] = "extension-dialog-result"; + ParameterId["ExtensionDialogStyle"] = "extension-dialog-style"; + ParameterId["ExtensionDialogUrl"] = "extension-dialog-url"; + ParameterId["ExtensionDialogW"] = "extension-dialog-width"; + ParameterId["ExtensionLocator"] = "extension-locator"; + ParameterId["ExtensionSettingsInfo"] = "extension-settings-info"; + ParameterId["ExtensionZoneId"] = "extension-zone-id"; + ParameterId["ExternalMenuDescription"] = "external-menu-description"; + ParameterId["ExternalMenuHeader"] = "external-menu-header"; + ParameterId["ExternalMenuItemDisplayName"] = "external-menu-item-display-name"; + ParameterId["ExternalMenuItemId"] = "external-menu-item-id"; + ParameterId["Field"] = "field"; + ParameterId["FieldId"] = "field-id"; + ParameterId["FieldName"] = "field-name"; + ParameterId["FilterLevels"] = "filter-levels"; + ParameterId["FilterRangeMax"] = "filter-range-max"; + ParameterId["FilterRangeMin"] = "filter-range-min"; + ParameterId["FilterRangeNullOption"] = "filter-range-null-option"; + ParameterId["FilterUpdateType"] = "filter-update-type"; + ParameterId["FilterValues"] = "filter-values"; + ParameterId["FontNameListItems"] = "font-name-list-items"; + ParameterId["FormattedText"] = "formatted-text"; + ParameterId["FunctionName"] = "function-name"; + ParameterId["HierValSelectionModels"] = "hierarchicalValueSelectionModels"; + ParameterId["HighlightedData"] = "highlighted-data"; + ParameterId["HoverTupleInteraction"] = "hover-tuple-interaction"; + ParameterId["IgnoreAliases"] = "ignore-aliases"; + ParameterId["IgnoreSelection"] = "ignore-selection"; + ParameterId["IncludeAllColumns"] = "include-all-columns"; + ParameterId["InvalidAggFieldName"] = "invalid-agg-field-name"; + ParameterId["InvalidDates"] = "invalid-dates"; + ParameterId["InvalidFieldCaption"] = "invalid-field-caption"; + ParameterId["InvalidFields"] = "invalid-fields"; + ParameterId["InvalidValues"] = "invalid-values"; + ParameterId["IsExcludeMode"] = "is-exclude"; + ParameterId["IsExtensionDialog"] = "is-extension-dialog"; + ParameterId["JoinDescription"] = "join-description"; + ParameterId["LogicalTableId"] = "logical-table-id"; + ParameterId["LogicalTableInfoList"] = "logical-table-info-list"; + ParameterId["MaxHeight"] = "max-height"; + ParameterId["MaxRows"] = "max-rows"; + ParameterId["MaxWidth"] = "max-width"; + ParameterId["MinHeight"] = "min-height"; + ParameterId["MinWidth"] = "min-width"; + ParameterId["PageRowCount"] = "page-row-count"; + ParameterId["ParameterCaption"] = "paremeter-caption"; + ParameterId["ParameterError"] = "parameter-error"; + ParameterId["ParameterFieldName"] = "parameter-field-name"; + ParameterId["ParameterInfo"] = "parameter-info"; + ParameterId["ParameterInfos"] = "parameter-infos"; + ParameterId["ParameterValue"] = "parameter-value"; + ParameterId["PeriodType"] = "period-type"; + ParameterId["QuantitativeDomain"] = "quantitative-dmain"; + ParameterId["QuantRangeSelectionModels"] = "quantativeRangeSelectionModels"; + ParameterId["RangeN"] = "range-n"; + ParameterId["ReplaySpeed"] = "replay-speed"; + ParameterId["SelectedData"] = "selected-data"; + ParameterId["SelectedSheetNames"] = "selected-sheet-names"; + ParameterId["Selection"] = "selection"; + ParameterId["SelectionList"] = "selection-list"; + ParameterId["SelectionUpdateType"] = "selectionUpdateType"; + ParameterId["SelectTuplesInteraction"] = "select-tuples-interaction"; + ParameterId["SendNotifications"] = "send-notifications"; + ParameterId["SettingsValues"] = "settings-values"; + ParameterId["SharedFilterSheets"] = "shared-filter-sheets"; + ParameterId["SharedFiltersInfo"] = "shared-filters-info"; + ParameterId["SheetIdentifier"] = "sheet-identifier"; + ParameterId["SheetName"] = "sheet-name"; + ParameterId["SheetPath"] = "sheet-path"; + ParameterId["ShouldRefreshDS"] = "should-refresh-ds"; + ParameterId["ShowDataTableFormat"] = "show-data-table-format"; + ParameterId["State"] = "state"; + ParameterId["StoryPointIndex"] = "story-point-index"; + ParameterId["StoryPointInfo"] = "story-point-info"; + ParameterId["SwitchToSheetName"] = "switch-to-sheet-name"; + ParameterId["TargetPoint"] = "target-point"; + ParameterId["TestConversionParameter"] = "test-conversion-parameter"; + ParameterId["Text"] = "formatted-text"; + ParameterId["TooltipContext"] = "tooltip-context"; + ParameterId["UnderlyingDataTable"] = "underlying-data-table"; + ParameterId["UnderlyingSummaryDataTable"] = "underlying-summary-data-table"; + ParameterId["Url"] = "url"; + ParameterId["UseTabDelimiters"] = "use-tab-delimiters"; + ParameterId["ViewDataTableCacheId"] = "view-data-table-cache-id"; + ParameterId["ViewDataTableId"] = "view-data-table-id"; + ParameterId["VisualId"] = "visual-id"; + ParameterId["VisualSpecification"] = "visual-specification"; + ParameterId["VizAPIInputJson"] = "vizapi-input-json"; + ParameterId["VizAPIStateWithDataModel"] = "vizapi-state-with-data-model"; + ParameterId["VizAPIStateWarningMsg"] = "vizapi-state-warning-msg"; + ParameterId["VizAPISVG"] = "vizapi-svg"; + ParameterId["WorksheetName"] = "worksheet-name"; + ParameterId["WorksheetFilters"] = "worksheet-filters"; + ParameterId["ZoneIdsVisibilityMap"] = "zone-ids-visibility-map"; +})(ParameterId = exports.ParameterId || (exports.ParameterId = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Verbs.js": +/*!*************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Verbs.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// Declare this key type and export the NotificationId to make this behave like a string enum. +// +// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put +// new ones, and merge conflicts. +var VerbId; +(function (VerbId) { + VerbId["ActivateNextStoryPoint"] = "activate-next-story-point"; + VerbId["ActivatePreviousStoryPoint"] = "activate-previous-story-point"; + VerbId["ActivateSheet"] = "activateSheet"; + VerbId["ActivateStoryPoint"] = "activate-story-point"; + VerbId["AppendExternalMenuItem"] = "append-external-menu-item"; + VerbId["ApplyCategoricalFilter"] = "categorical-filter"; + VerbId["ApplyRangeFilter"] = "range-filter"; + VerbId["ApplyRelativeDateFilter"] = "apply-relative-date-Filter"; + VerbId["Authenticate"] = "authenticate"; + VerbId["BlockExtension"] = "block-extension"; + VerbId["ChangeParameterValue"] = "change-parameter-value"; + VerbId["ChangeSharedFilter"] = "change-shared-filter"; + VerbId["ClearFilter"] = "clear-filter"; + VerbId["ClearSelectedMarks"] = "clear-selected-marks"; + VerbId["CloseDialog"] = "close-dialog"; + VerbId["CreateAnnotation"] = "create-annotation"; + VerbId["DashboardCategoricalFilter"] = "dashboard-categorical-filter"; + VerbId["DisplayDialog"] = "display-dialog"; + VerbId["DownloadWorkbook"] = "download-workbook"; + VerbId["ExecuteExternalMenuItem"] = "execute-external-menu-item"; + VerbId["ExportCrosstab"] = "export-crosstab"; + VerbId["ExportCrosstabCsvDownload"] = "export-crosstab-csv-download"; + VerbId["ExportCrosstabExcelDownload"] = "export-crosstab-excel-download"; + VerbId["ExportData"] = "export-data"; + VerbId["ExportDataDownload"] = "export-data-download"; + VerbId["ExportImage"] = "export-image"; + VerbId["ExportPdf"] = "export-pdf"; + VerbId["ExportPdfDownload"] = "export-pdf-download"; + VerbId["ExportPowerpoint"] = "export-powerpoint"; + VerbId["ExportPowerpointDownload"] = "export-powerpoint-download"; + VerbId["FindParameter"] = "find-parameter"; + VerbId["GetActiveTables"] = "get-active-tables"; + VerbId["GetAllDataSources"] = "get-all-data-sources"; + VerbId["GetAnnotations"] = "get-annotations"; + VerbId["GetCategoricalDomain"] = "get-categorical-domain"; + VerbId["GetConnectionDescriptionSummaries"] = "get-connection-description-summaries"; + VerbId["GetCurrentSrc"] = "get-current-src"; + VerbId["GetCustomViews"] = "get-custom-views"; + VerbId["GetDashboardFilters"] = "get-dashboard-filters"; + VerbId["GetDataSource"] = "get-datasource"; + VerbId["GetDataSourceData"] = "get-datasource-data"; + VerbId["GetDataSources"] = "get-data-sources"; + VerbId["GetDataSummaryData"] = "get-summary-data"; + VerbId["GetDataSummaryDataReader"] = "get-summary-data-reader"; + VerbId["GetDataTableReaderPage"] = "get-data-table-reader-page"; + VerbId["GetEmbeddingAbstractQueryWithDataModel"] = "get-embedding-abstract-query-with-data-model"; + VerbId["GetEmbeddingClientInfo"] = "get-embedding-client-info"; + VerbId["GetVizStateWithDataModel"] = "get-viz-state-with-data-model"; + VerbId["GetExportCrosstabSheetMap"] = "get-export-crosstab-sheet-map"; + VerbId["GetExportPdfOptions"] = "get-export-pdf-options"; + VerbId["GetField"] = "get-field"; + VerbId["GetFieldAndDataSource"] = "get-field-and-datasource"; + VerbId["GetVisualSpecification"] = "get-visual-specification"; + VerbId["GetFilters"] = "get-filters"; + VerbId["GetFonts"] = "get-fonts"; + VerbId["GetHighlightedMarks"] = "get-highlighted-marks"; + VerbId["GetJoinDescription"] = "get-join-description"; + VerbId["GetLogicalTableData"] = "get-logical-table-data"; + VerbId["GetLogicalTableDataReader"] = "get-logical-table-data-reader"; + VerbId["GetLogicalTables"] = "get-logical-tables"; + VerbId["GetParametersForSheet"] = "get-parameters-for-sheet"; + VerbId["GetRangeDomain"] = "get-range-domain"; + VerbId["GetSelectedMarks"] = "get-selected-marks"; + VerbId["GetSharedFilter"] = "get-shared-filter"; + VerbId["GetUnderlyingData"] = "get-underlying-data"; + VerbId["GetUnderlyingTableData"] = "get-underlying-table-data"; + VerbId["GetUnderlyingTableDataReader"] = "get-underlying-table-data-reader"; + VerbId["GetUnderlyingTables"] = "get-underlying-tables"; + VerbId["HierarchicalFilter"] = "hierachical-filter"; + VerbId["InitializeExtension"] = "initialize-extension"; + VerbId["MoveAndResizeZones"] = "move-and-resize-zones"; + VerbId["RaiseHoverTupleNotification"] = "raise-hover-tuple-notification"; + VerbId["RaiseSelectTuplesNotification"] = "raise-select-tuples-notification"; + VerbId["Redo"] = "redo"; + VerbId["RefreshDataSource"] = "refresh-data-source"; + VerbId["ReleaseDataTableReader"] = "release-data-table-reader"; + VerbId["RemoveAnnotation"] = "remove-annotation"; + VerbId["RemoveCustomView"] = "remove-custom-view"; + VerbId["RemoveExternalMenuItem"] = "remove-external-menu-item"; + VerbId["RenameExternalMenu"] = "rename-external-menu"; + VerbId["ReplayAnimation"] = "replay-animation"; + VerbId["RevertStoryPoint"] = "revert-story-point"; + VerbId["RevertWorkbook"] = "revert-workbook"; + VerbId["SaveExtensionSettings"] = "save-extension-settings"; + VerbId["SaveWorkbookAsCustomView"] = "save-workbook-as-custom-view"; + VerbId["SelectByValue"] = "select-by-value"; + VerbId["SetActiveCustomViewAsDefault"] = "set-active-custom-view-as-default"; + VerbId["SetAutoUpdate"] = "set-auto-update"; + VerbId["SetClickThrough"] = "set-click-through"; + VerbId["SetVizStateWithDataModel"] = "set-viz-state-with-data-model"; + VerbId["SetSheetSize"] = "set-sheet-size"; + VerbId["SetZoneVisibility"] = "set-zone-visibility"; + VerbId["Share"] = "share"; + VerbId["ShowCustomView"] = "show-custom-view"; + VerbId["TestConversionVerb"] = "test-conversion-verb"; + VerbId["Undo"] = "undo"; + VerbId["UpdateCustomView"] = "update-custom-view"; + VerbId["VizAPI"] = "viz-api"; +})(VerbId = exports.VerbId || (exports.VerbId = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/interface/AskDataInterface.js": +/*!*************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/interface/AskDataInterface.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var AskDataOptionNames; +(function (AskDataOptionNames) { + AskDataOptionNames["token"] = "token"; + AskDataOptionNames["origin"] = "origin"; + AskDataOptionNames["showEmbed"] = "showEmbed"; + AskDataOptionNames["showPin"] = "showPin"; + AskDataOptionNames["showSave"] = "showSave"; + AskDataOptionNames["showShare"] = "showShare"; + AskDataOptionNames["debug"] = ":jsdebug"; + AskDataOptionNames["ApiID"] = ":apiID"; + AskDataOptionNames["ApiExternalVersion"] = ":apiExternalVersion"; + AskDataOptionNames["ApiInternalVersion"] = ":apiInternalVersion"; + AskDataOptionNames["AskDataWebComponent"] = ":askDataWebComponent"; +})(AskDataOptionNames = exports.AskDataOptionNames || (exports.AskDataOptionNames = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/interface/PulseInterface.js": +/*!***********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/interface/PulseInterface.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var PulseOptionNames; +(function (PulseOptionNames) { + PulseOptionNames["embed"] = "embed"; + PulseOptionNames["token"] = "token"; + PulseOptionNames["disableExploreFilter"] = "disableExploreFilter"; + PulseOptionNames["ApiExternalVersion"] = ":apiExternalVersion"; + PulseOptionNames["ApiInternalVersion"] = ":apiInternalVersion"; + PulseOptionNames["PulseWebComponent"] = ":pulseWebComponent"; +})(PulseOptionNames = exports.PulseOptionNames || (exports.PulseOptionNames = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/interface/VqlInterface.js": +/*!*********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/interface/VqlInterface.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * These strings were *manually copied* from the server, + * workgroup/src/silos/tableau-server/libraries/tab-controller-vizql/src/com/tableausoftware/ + * controller/vizql/constants/ParameterKeys.java#L9 + * should be exported instead + * parameters that vizql will accept in an embedding URL + **/ +var VqlParameterNames; +(function (VqlParameterNames) { + VqlParameterNames["ONE"] = "1"; + VqlParameterNames["ALERTS"] = ":alerts"; + VqlParameterNames["ALIAS"] = "alias"; + VqlParameterNames["ALLOW_DEFERRED_BOOTSTRAP"] = ":allowDeferredBootstrap"; + VqlParameterNames["ALLOW_AUTOGEN_WORKSHEET_PHONE_LAYOUTS"] = "allowAutogenWorksheetPhoneLayouts"; + VqlParameterNames["API_ID"] = ":apiID"; + VqlParameterNames["APP"] = ":app"; + VqlParameterNames["ATTACHMENT"] = "attachment"; + VqlParameterNames["IS_IPAD_APP"] = "app"; + VqlParameterNames["ANIMATE_TRANSITION"] = ":animate_transition"; + VqlParameterNames["ASCENDING"] = "ascending"; + VqlParameterNames["AUTHENTICATION"] = "authentication"; + VqlParameterNames["ATTRIBUTES"] = "attributes"; + VqlParameterNames["AUTHORING_SHEET"] = ":authSheet"; + VqlParameterNames["AXIS"] = "axis"; + VqlParameterNames["BOOTSTRAP_WHEN_NOTIFIED"] = ":bootstrapWhenNotified"; + VqlParameterNames["BROWSER_BACK_BUTTON_UNDO"] = ":browserBackButtonUndo"; + VqlParameterNames["BROWSER_RENDERING_ON"] = "isBrowserRendering"; + VqlParameterNames["BROWSER_RENDERING_THRESHOLD"] = "browserRenderingThreshold"; + VqlParameterNames["CHARSET"] = "charset"; + VqlParameterNames["CLIENT_DIMENSION"] = "clientDimension"; + VqlParameterNames["CLIENT_IP"] = "client_ip"; + VqlParameterNames["CLIENT_NUM"] = "clientNum"; + VqlParameterNames["COLON_EMBEDDED"] = ":embedded"; + VqlParameterNames["COLON_MOBILE"] = ":mobile"; + VqlParameterNames["COLON_DEEP_LINKING_DISABLED"] = ":deepLinkingDisabled"; + VqlParameterNames["COLON_WATERMARK"] = ":watermark"; + VqlParameterNames["COMMENTS"] = ":comments"; + VqlParameterNames["COMMENTING_ENABLED"] = ":commentingEnabled"; + VqlParameterNames["COMMENTING_MENTIONS_ENABLED"] = ":commentingMentions"; + VqlParameterNames["CONNECTION"] = "connection"; + VqlParameterNames["CREATED_BY_FEATURE"] = "createdByFeature"; + VqlParameterNames["CRYPTED_PASSWORD"] = "crypted"; + VqlParameterNames["CSSDEBUG"] = ":cssdebug"; + VqlParameterNames["CSV"] = "csv"; + VqlParameterNames["CUSTOM_VIEWS"] = ":customViews"; + VqlParameterNames["CV"] = ":cv"; + VqlParameterNames["CV_ID"] = "cvId"; + VqlParameterNames["DASHBOARD_PORT_SIZE"] = "dashboardPortSize"; + VqlParameterNames["DATA_DETAILS"] = ":dataDetails"; + VqlParameterNames["DATASOURCE"] = "datasource"; + VqlParameterNames["DEBUG"] = ":debug"; + VqlParameterNames["DELAY"] = ":delay"; + VqlParameterNames["DEPTH"] = "depth"; + VqlParameterNames["DEVICE_TYPE"] = ":device"; + VqlParameterNames["DEVICE_PIXEL_RATIO"] = "devicePixelRatio"; + VqlParameterNames["DEVICE_PREVIEW_MODE"] = ":devicepreviewmode"; + VqlParameterNames["DIMENSIONS"] = ":dimensions"; + VqlParameterNames["DISABLE_SHARED_SESSIONS"] = ":disable_shared_sessions"; + VqlParameterNames["DISABLE_URL_ACTIONS_POPUPS"] = ":disableUrlActionsPopups"; + VqlParameterNames["DIRECTION"] = "direction"; + VqlParameterNames["DISPLAY_OVERLAY"] = ":display_overlay"; + VqlParameterNames["DISPLAY_SHARE"] = ":display_share"; + VqlParameterNames["DISPLAY_SPINNER"] = ":display_spinner"; + VqlParameterNames["DISPLAY_STATIC_IMAGE"] = ":display_static_image"; + VqlParameterNames["DISPLAY_TABS"] = "display_tabs"; + VqlParameterNames["DISPLAY_VIEW_COUNT"] = ":display_count"; + VqlParameterNames["IGNORE_STICKY_SESSION"] = ":ignore_sticky_session"; + VqlParameterNames["INCREMENT_VIEW_COUNT"] = ":increment_view_count"; + VqlParameterNames["DOCMODE"] = "docmode"; + VqlParameterNames["DOMAIN"] = "domain"; + VqlParameterNames["DO_WORK"] = "do_work"; + VqlParameterNames["DX"] = "dx"; + VqlParameterNames["DY"] = "dy"; + VqlParameterNames["EDIT_DATA_ALERT"] = ":editDataAlert"; + VqlParameterNames["EMBED"] = ":embed"; + VqlParameterNames["EMBEDDED"] = "embedded"; + VqlParameterNames["ENCRYPTED"] = "encrypted"; + VqlParameterNames["API_EXTERNAL_VERSION"] = ":apiExternalVersion"; + VqlParameterNames["API_INTERNAL_VERSION"] = ":apiInternalVersion"; + VqlParameterNames["EXCLUDE"] = "exclude"; + VqlParameterNames["EXPORT_FORMAT"] = ":export_format"; + VqlParameterNames["FIELDNAME"] = "fieldname"; + VqlParameterNames["FIELD_NAME"] = "field_name"; + VqlParameterNames["FIELD_SEP"] = "field_sep"; + VqlParameterNames["FILE"] = "file"; + VqlParameterNames["FILTER_TILE_SIZE"] = "filterTileSize"; + VqlParameterNames["FN"] = "fn"; + VqlParameterNames["FOCUS"] = "focus"; + VqlParameterNames["FORCE_CACHE"] = "force_cache"; + VqlParameterNames["FORMAT"] = "format"; + VqlParameterNames["FORMAT_DATA_VALUE_LOCALLY"] = "formatDataValueLocally"; + VqlParameterNames["FROM_WG"] = ":from_wg"; + VqlParameterNames["GRAPHQL_DATABASE_ID"] = ":graphQLDatabaseId"; + VqlParameterNames["GRAPHQL_TABLE_ID"] = ":graphQLTableId"; + VqlParameterNames["GUID"] = ":guid"; + VqlParameterNames["H"] = "h"; + VqlParameterNames["HIDDEN"] = "hidden"; + VqlParameterNames["HIDE_CLOSE_BUTTON"] = ":hideCloseButton"; + VqlParameterNames["HIDE_EDIT_BUTTON"] = ":hideEditButton"; + VqlParameterNames["HIDE_EDIT_IN_DESKTOP_BUTTON"] = ":hideEditInDesktopButton"; + VqlParameterNames["HIGH_DPI"] = ":highdpi"; + VqlParameterNames["IMAGE_SIZE_LIMIT"] = "imageSizeLimit"; + VqlParameterNames["TRANSPARENT_LINE_MARKS_LIMIT"] = "transparentLineMarkLimit"; + VqlParameterNames["CLIENT_RENDER_PIXEL_LIMIT"] = "clientRenderPixelLimit"; + VqlParameterNames["IN"] = "in"; + VqlParameterNames["INSTANCE_ID"] = ":iid"; + VqlParameterNames["IS_GUEST_REDIRECT_FROM_VIZPORTAL"] = ":isGuestRedirectFromVizportal"; + VqlParameterNames["IS_MARK_ANIMATION_ENABLED"] = "isMarkAnimationEnabled"; + VqlParameterNames["IS_VIZPORTAL"] = ":isVizPortal"; + VqlParameterNames["INPUT_"] = "input_string"; + VqlParameterNames["JSDEBUG"] = ":jsdebug"; + VqlParameterNames["JSON"] = "json"; + VqlParameterNames["JSON_ONLY"] = ":jsonOnly"; + VqlParameterNames["KEEPFILE"] = "keepfile"; + VqlParameterNames["KEY"] = "key"; + VqlParameterNames["LANGUAGE"] = "language"; + VqlParameterNames["LANGUAGE_REQUESTED"] = ":language"; + VqlParameterNames["LINKTARGET"] = ":linktarget"; + VqlParameterNames["LOAD_ORDER_ID"] = ":loadOrderID"; + VqlParameterNames["LOAD_NEWEST_REVISION"] = ":loadNewestRevision"; + VqlParameterNames["LOCAL_PATHS"] = ":localPaths"; + VqlParameterNames["LOCALE"] = "locale"; + VqlParameterNames["LOCATION_ID"] = "locationid"; + VqlParameterNames["LOCATION_TYPE"] = "locationtype"; + VqlParameterNames["WORKBOOK_LOCALE"] = "workbookLocale"; + VqlParameterNames["MAXROWS"] = "maxrows"; + VqlParameterNames["MAX_AGE"] = "maxAge"; + VqlParameterNames["MAX_ROWS"] = "maxRows"; + VqlParameterNames["METHOD"] = "method"; + VqlParameterNames["MOBILE"] = "mobile"; + VqlParameterNames["MODIFIER"] = "modifier"; + VqlParameterNames["NAME"] = "name"; + VqlParameterNames["NAV_TYPE"] = "navType"; + VqlParameterNames["NAV_SRC"] = "navSrc"; + VqlParameterNames["NOATTACHMENT"] = "no-attachment"; + VqlParameterNames["NO_OVERWRITE"] = "no_overwrite"; + VqlParameterNames["OPEN_AUTHORING_IN_TOP_WINDOW"] = ":openAuthoringInTopWindow"; + VqlParameterNames["OPENID_HD"] = ":openid_hd"; + VqlParameterNames["OPENID_LOGIN_HINT"] = ":openid_login_hint"; + VqlParameterNames["OAUTHREQUEST"] = "oauthrequest"; + VqlParameterNames["OAUTH_CREDENTIAL_IDS"] = "oauth_credential_ids"; + VqlParameterNames["OFFLINE_MODE"] = ":offlinemode"; + VqlParameterNames["ORIGIN"] = ":origin"; + VqlParameterNames["OVERLAY"] = ":overlay"; + VqlParameterNames["P"] = "p"; + VqlParameterNames["PATH"] = "path"; + VqlParameterNames["PANE_RESOLVER_X"] = "paneResolverX"; + VqlParameterNames["PANE_RESOLVER_Y"] = "paneResolverY"; + VqlParameterNames["PARAM"] = "param"; + VqlParameterNames["PARENT_ID"] = "parent_id"; + VqlParameterNames["PASSWORD"] = "password"; + VqlParameterNames["PATTERN"] = "pattern"; + VqlParameterNames["PIXEL_RATIO"] = ":pixelratio"; + VqlParameterNames["PREFIX"] = ":prefix"; + VqlParameterNames["PREVIEW"] = ":preview"; + VqlParameterNames["PRIMARY_CONTENT_URL"] = "primary_content_url"; + VqlParameterNames["PROJECT"] = "project"; + VqlParameterNames["PROTOCOL"] = "protocol"; + VqlParameterNames["PSEUDO"] = ":pseudo"; + VqlParameterNames["QUERY"] = "query"; + VqlParameterNames["R"] = "r"; + VqlParameterNames["RANGE_TYPE"] = "range_type"; + VqlParameterNames["RECORD_SEP"] = "record_sep"; + VqlParameterNames["RECORD_CLIENT_PERFORMANCE"] = ":record_client_performance"; + VqlParameterNames["RECORD_PERFORMANCE"] = ":record_performance"; + VqlParameterNames["RECOVER_OLD_SESSION_ID"] = ":recover_old_session_id"; + VqlParameterNames["RECOVER_SESSION_STATE_TICKETS"] = ":recover_session_state_tickets"; + VqlParameterNames["REFRESH"] = ":refresh"; + VqlParameterNames["REFRESHUNMODIFIED"] = ":refreshunmodified"; + VqlParameterNames["REGION"] = "region"; + VqlParameterNames["RELOAD_ON_CUSTOM_VIEW_SAVE"] = ":reloadOnCustomViewSave"; + VqlParameterNames["RENDER"] = ":render"; + VqlParameterNames["RENDER_MAPS_CLIENT_SIDE"] = "renderMapsClientSide"; + VqlParameterNames["RETRY"] = ":retry"; + VqlParameterNames["REUSE"] = "reuse"; + VqlParameterNames["REUSE_FOREVER"] = "reuse_forever"; + VqlParameterNames["REVERT"] = ":revert"; + VqlParameterNames["SAVE_DB_PASSWORDS"] = "save_db_passwords"; + VqlParameterNames["SELECT_X"] = "select_x"; + VqlParameterNames["SELECT_Y"] = "select_y"; + VqlParameterNames["SESSION_FEATURE_PREFIX"] = ":ff_"; + VqlParameterNames["SESSION_FLAGS"] = ":session_feature_flags"; + VqlParameterNames["SHARE_BUTTON"] = "share_button"; + VqlParameterNames["SHEET_ID"] = "sheet_id"; + VqlParameterNames["SHARED"] = "shared"; + VqlParameterNames["SHOWALL"] = "showall"; + VqlParameterNames["SHOW_APP_BANNER"] = ":showAppBanner"; + VqlParameterNames["SHOW_ASK_DATA"] = ":showAskData"; + VqlParameterNames["SHOW_PARAMS"] = "showParams"; + VqlParameterNames["SHOW_SHARE_OPTIONS"] = ":showShareOptions"; + VqlParameterNames["SIZE"] = ":size"; + VqlParameterNames["SOURCE"] = "source"; + VqlParameterNames["STATE"] = "state"; + VqlParameterNames["STICKY_SESSION_KEY"] = "stickySessionKey"; + VqlParameterNames["SUBSCRIPTIONS"] = ":subscriptions"; + VqlParameterNames["SUMMARY"] = "summary"; + VqlParameterNames["SUPPRESS_DEFAULT_EDIT_BEHAVIOR"] = ":suppressDefaultEditBehavior"; + VqlParameterNames["SYNC_SESSION"] = ":sync_session"; + VqlParameterNames["SYNC_SESSION_STATE"] = "sync_session_state"; + VqlParameterNames["TABS"] = ":tabs"; + VqlParameterNames["TARGET"] = "target"; + VqlParameterNames["TARGET_SITE"] = "target_site"; + VqlParameterNames["TOOLBAR"] = ":toolbar"; + VqlParameterNames["TOOLTIP"] = ":tooltip"; + VqlParameterNames["TS"] = "ts"; + VqlParameterNames["UNDERLYING_TABLE_ID"] = "underlying_table_id"; + VqlParameterNames["UNDERLYING_TABLE_CAPTION"] = "underlying_table_caption"; + VqlParameterNames["UPDATE_TYPE"] = "update_type"; + VqlParameterNames["USE_GUEST"] = ":useGuest"; + VqlParameterNames["USE_INLINE_IMAGES"] = "use_inline_images"; + VqlParameterNames["USERAGENT"] = "useragent"; + VqlParameterNames["USERNAME"] = "username"; + VqlParameterNames["VALUE"] = "value"; + VqlParameterNames["VERBOSE_MODE"] = "verboseMode"; + VqlParameterNames["VIEW_ID"] = "views_id"; + VqlParameterNames["VIZ_SNAPSHOT_ID"] = "viz_snapshot_id"; + VqlParameterNames["VW"] = ":vw"; + VqlParameterNames["W"] = "w"; + VqlParameterNames["WORKSHEET_PORT_SIZE"] = "worksheetPortSize"; + VqlParameterNames["WATERMARK"] = "watermark"; + VqlParameterNames["WATERMARK_MARGIN"] = ":watermark_margin"; + VqlParameterNames["WB"] = ":wb"; + VqlParameterNames["WHICH"] = "which"; + VqlParameterNames["X"] = "x"; + VqlParameterNames["Y"] = "y"; + VqlParameterNames["ZID"] = "zid"; + VqlParameterNames["ZONE_ID"] = "zone_id"; + VqlParameterNames["KEYCHAIN_VERSION"] = "keychain_version"; + VqlParameterNames["DATASOURCE_ID"] = "datasource_id"; + VqlParameterNames["DATASOURCE_NAME"] = "datasource_name"; + VqlParameterNames["LENS_ID"] = "lens_id"; + VqlParameterNames["WIDTH"] = "width"; + VqlParameterNames["HEIGHT"] = "height"; + // Default Layout params + VqlParameterNames["LAYOUT_VIEWS"] = "views"; + VqlParameterNames["LAYOUT_MENUS"] = "menus"; + VqlParameterNames["LAYOUT_GEOMETRY"] = "geometry"; + VqlParameterNames["LAYOUT_PAGES"] = "pages"; + VqlParameterNames["LAYOUT_CACHEURL"] = "cacheurl"; + VqlParameterNames["LAYOUT_SHEET"] = "sheet"; + VqlParameterNames["LAYOUT_DEPTH"] = "depth"; +})(VqlParameterNames || (VqlParameterNames = {})); +/** + * parameters that are only relevant when working with Tableau Public + * maybe not really necessry to split them out + */ +var PublicParameterNames; +(function (PublicParameterNames) { + PublicParameterNames["SHOW_VIZ_HOME"] = ":showVizHome"; + // display view count +})(PublicParameterNames || (PublicParameterNames = {})); +/** + * Map the parameter names as used in the url to what we call them publicly in the embedding library. + * The only parameters listed here should be the ones that get sent to vizql + * - this should match the interface at external-contract:VizInterfaces:VizSettings + */ +var VizOptionNames; +(function (VizOptionNames) { + // publicName = internalStringValue + VizOptionNames["Size"] = ":size"; + VizOptionNames["Embed"] = ":embed"; + VizOptionNames["ApiInternalVersion"] = ":apiInternalVersion"; + VizOptionNames["ApiExternalVersion"] = ":apiExternalVersion"; + VizOptionNames["ShowVizHome"] = ":showVizHome"; + VizOptionNames["Jsdebug"] = ":jsdebug"; + VizOptionNames["BootstrapWhenNotified"] = ":bootstrapWhenNotified"; + VizOptionNames["NavType"] = "navType"; + VizOptionNames["NavSrc"] = "navSrc"; + VizOptionNames["debug"] = ":jsdebug"; + VizOptionNames["ApiID"] = ":apiID"; + VizOptionNames["disableUrlActionsPopups"] = ":disableUrlActionsPopups"; + VizOptionNames["hideTabs"] = ":tabs"; + VizOptionNames["toolbar"] = ":toolbar"; + VizOptionNames["device"] = ":device"; + VizOptionNames["instanceIdToClone"] = ":iid"; + VizOptionNames["touchOptimize"] = "mobile"; + VizOptionNames["hideEditButton"] = ":hideEditButton"; + VizOptionNames["hideEditInDesktopButton"] = ":hideEditInDesktopButton"; + VizOptionNames["suppressDefaultEditBehavior"] = ":suppressDefaultEditBehavior"; + VizOptionNames["hideCloseButton"] = ":hideCloseButton"; +})(VizOptionNames = exports.VizOptionNames || (exports.VizOptionNames = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js": +/*!****************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var guid = __webpack_require__(/*! guid */ "../../node_modules/guid/guid.js"); +var JsApiInternalContract_1 = __webpack_require__(/*! ../JsApiInternalContract */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var CrossFramePreparedMessage_1 = __webpack_require__(/*! ./CrossFramePreparedMessage */ "../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js"); +var MessageTypeChecks_1 = __webpack_require__(/*! ./MessageTypeChecks */ "../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js"); +var MessageTypes_1 = __webpack_require__(/*! ./interface/MessageTypes */ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js"); +/** + * The CrossFrameMessenger is the primary export from the api-messaging module. An instance of + * this class can be instantiated on both sides of a frame boundary to facilitate communication + * in both directions between the frames. This class implements both the dispatcher and the listener + * portions, but doesn't require callers to care about both. + */ +var CrossFrameMessenger = /** @class */ (function () { + /** + * Creates an instance of CrossFrameMessenger. If you would like to use the CrossFrameMessenger as a MessageListener, + * be sure to call StartListening and register message handlers. + * @param thisWindow The window object which the CrossFrameMessenger lives. An onMessage listener will be added here. + * @param [otherWindow] Optional otherWindow which messages will be posted to. + * If defined, incoming messages must originate from otherWindow to be passed on + * @param [otherWindowOrigin] The target origin which otherWindow must have in order to receive dispatched messages. + * This value will be sent as the targetOrigin of a postMessage + * (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) + */ + function CrossFrameMessenger(thisWindow, otherWindow, otherWindowOrigin) { + this.thisWindow = thisWindow; + this.otherWindow = otherWindow; + this.otherWindowOrigin = otherWindowOrigin; + // Make sure to call StartListening + } + ///// MessageListener Implementation + CrossFrameMessenger.prototype.startListening = function () { + var _this = this; + // Check if we already are listening, if not, hook up a message listener + if (!this.unregisterFunction) { + var boundHandler_1 = this.onMessageReceived.bind(this); + this.thisWindow.addEventListener('message', boundHandler_1, true); + this.unregisterFunction = function () { return _this.thisWindow.removeEventListener('message', boundHandler_1, true); }; + } + }; + CrossFrameMessenger.prototype.stopListening = function () { + // Stop listening if we have started listening + if (this.unregisterFunction) { + this.unregisterFunction(); + this.unregisterFunction = undefined; + } + }; + CrossFrameMessenger.prototype.setInitializeMessageHandler = function (handler) { + this.initializeMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setCommandResponseMessageHandler = function (handler) { + this.commandResponseMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setCommandMessageHandler = function (handler) { + this.commandMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setNotificationMessageHandler = function (handler) { + this.notificationMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setHandshakeMessageHandler = function (handler) { + this.handshakeMessageHandler = handler; + }; + ///// MessageDispatcher Implementation + /** + * @param apiVersion api-internal-contract-js version (exported in JsApiInternalConntract) + * @param crossFrameVersion crossframe messaging version (exported in JsApiInternalConntract) + * @param options additional options that can be passed at initialization (information about the version of + * external being used for example) + */ + CrossFrameMessenger.prototype.prepareInitializationMessage = function (apiVersion, crossFrameVersion, options) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Initialize, + crossFrameVersion: crossFrameVersion, + apiVersion: apiVersion, + options: options, + }; + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareCommandMessage = function (verbId, parameters) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Command, + verbId: verbId, + parameters: parameters, + }; + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareCommandResponseMessage = function (commandGuid, data, error) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.CommandResponse, + commandGuid: commandGuid, + data: data, + error: error, + }; + if (error) { + // stringify error object to remove unserializable fields like functions and prevent serialization errors + message.error = JSON.parse(JSON.stringify(error)); + } + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareNotificationMessage = function (notificationId, data) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Notification, + notificationId: notificationId, + data: data, + }; + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareAckMessage = function () { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Ack, + platformVersion: JsApiInternalContract_1.INTERNAL_CONTRACT_VERSION, + }; + return this.prepareMessage(message); + }; + /** + * Prepares a pending message for sending and returns the prepared message + * + * @param msg The message to be sent to this.otherWindow + * @returns The prepared message + */ + CrossFrameMessenger.prototype.prepareMessage = function (msg) { + if (!this.otherWindow || !this.otherWindowOrigin) { + throw 'Other window not initialized, cannot dispatch messages'; + } + var preparedMessage = new CrossFramePreparedMessage_1.CrossFramePreparedMessage(msg, this.otherWindow, this.otherWindowOrigin); + return preparedMessage; + }; + /** + * Called when a message is received. Does some validation of the message, and then + * calls an appropriate message handler if one is defined + * + * @param event The incoming MessageEvent + */ + CrossFrameMessenger.prototype.onMessageReceived = function (event) { + // If we have an otherWindow defined, make sure the message is coming from there + if (this.otherWindow && event.source !== this.otherWindow) { + return; + } + // Do some validation on event.data to make sure that we have received a real message + if (!event.data) { + return; + } + var message = event.data; + if (!MessageTypeChecks_1.isMessage(message)) { + return; + } + // Check the declared message type, validate the message, and call an appropriate hander if one exists + switch (message.msgType) { + case MessageTypes_1.MessageType.Initialize: { + if (!MessageTypeChecks_1.isInitMessage(message) || !this.initializeMessageHandler) { + return; + } + this.initializeMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.CommandResponse: { + if (!MessageTypeChecks_1.isCommandResponseMessage(message) || !this.commandResponseMessageHandler) { + return; + } + this.commandResponseMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.Command: { + if (!MessageTypeChecks_1.isCommandMessage(message) || !this.commandMessageHandler) { + return; + } + this.commandMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.Notification: { + if (!MessageTypeChecks_1.isNotificationMessage(message) || !this.notificationMessageHandler) { + return; + } + this.notificationMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.Handshake: { + if (!MessageTypeChecks_1.isHandshakeMessage(message) || !this.handshakeMessageHandler) { + return; + } + this.handshakeMessageHandler(message, event.source); + break; + } + default: + // Just ignore this since we don't know how to handle the message type + } + }; + CrossFrameMessenger.prototype.setOtherWindow = function (otherWindow) { + this.otherWindow = otherWindow; + }; + CrossFrameMessenger.prototype.setOtherWindowOrigin = function (origin) { + this.otherWindowOrigin = origin; + }; + return CrossFrameMessenger; +}()); +exports.CrossFrameMessenger = CrossFrameMessenger; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js": +/*!**********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the PreparedMessage interface used to post messages between + * two frames using window.postMessage + */ +var CrossFramePreparedMessage = /** @class */ (function () { + /** + * Creates an instance of CrossFramePreparedMessage. + * @param _message The message to be sent + * @param _target The target window where the message will be sent + * @param _origin The targetOrigin where this message can be received + */ + function CrossFramePreparedMessage(_message, _target, _origin) { + this._message = _message; + this._target = _target; + this._origin = _origin; + } + Object.defineProperty(CrossFramePreparedMessage.prototype, "messageGuid", { + get: function () { + return this._message.msgGuid; + }, + enumerable: true, + configurable: true + }); + CrossFramePreparedMessage.prototype.send = function () { + this._target.postMessage(this._message, this._origin); + return this; + }; + return CrossFramePreparedMessage; +}()); +exports.CrossFramePreparedMessage = CrossFramePreparedMessage; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js": +/*!**************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var guid = __webpack_require__(/*! guid */ "../../node_modules/guid/guid.js"); +var Notifications_1 = __webpack_require__(/*! ../contract/Notifications */ "../api-internal-contract-js/lib/src/contract/Notifications.js"); +var MessageTypes_1 = __webpack_require__(/*! ./interface/MessageTypes */ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js"); +var expectedEmptyNotifications = new Set([ + Notifications_1.NotificationId.EditButtonClicked, + Notifications_1.NotificationId.EditInDesktopButtonClicked, + Notifications_1.NotificationId.WorkbookPublished, + Notifications_1.NotificationId.WorkbookReadyToClose, + Notifications_1.NotificationId.ReadyToReceiveAuthToken, +]); +/* tslint:disable no-any */ +function isMessage(data) { + if (!data) { + return false; + } + var message = data; + if (!message || !message.msgGuid || !message.msgType) { + return false; + } + if (!guid.isGuid(message.msgGuid)) { + return false; + } + if (typeof message.msgType !== 'string') { + return false; + } + var messageTypes = [ + MessageTypes_1.MessageType.Command, + MessageTypes_1.MessageType.CommandResponse, + MessageTypes_1.MessageType.Initialize, + MessageTypes_1.MessageType.Notification, + MessageTypes_1.MessageType.Handshake, + ]; + if (messageTypes.indexOf(message.msgType) < 0) { + return false; + } + return true; +} +exports.isMessage = isMessage; +function isVersion(versionNumber) { + if (!versionNumber) { + return false; + } + var v = versionNumber; + if (typeof v !== 'object') { + return false; + } + if (typeof v.fix !== 'number' || typeof v.minor !== 'number' || typeof v.major !== 'number') { + return false; + } + return true; +} +exports.isVersion = isVersion; +function isInitMessage(message) { + if (!isMessage(message)) { + return false; + } + var initMessage = message; + if (initMessage.msgType !== MessageTypes_1.MessageType.Initialize) { + return false; + } + if (!initMessage.apiVersion || !isVersion(initMessage.apiVersion)) { + return false; + } + if (!initMessage.crossFrameVersion || !isVersion(initMessage.crossFrameVersion)) { + return false; + } + return true; +} +exports.isInitMessage = isInitMessage; +function isCommandResponseMessage(message) { + if (!isMessage(message)) { + return false; + } + var crMessage = message; + if (crMessage.msgType !== MessageTypes_1.MessageType.CommandResponse) { + return false; + } + if (!guid.isGuid(crMessage.commandGuid)) { + return false; + } + if (!crMessage.data && !crMessage.error) { + return false; + } + return true; +} +exports.isCommandResponseMessage = isCommandResponseMessage; +function isCommandMessage(message) { + if (!isMessage(message)) { + return false; + } + var commandMessage = message; + if (commandMessage.msgType !== MessageTypes_1.MessageType.Command) { + return false; + } + if (!commandMessage.parameters || typeof commandMessage.parameters !== 'object') { + return false; + } + if (!commandMessage.verbId || typeof commandMessage.verbId !== 'string') { + return false; + } + return true; +} +exports.isCommandMessage = isCommandMessage; +function isNotificationMessage(message) { + if (!isMessage(message)) { + return false; + } + var notificationMessage = message; + if (notificationMessage.msgType !== MessageTypes_1.MessageType.Notification) { + return false; + } + if (!notificationMessage.data && !expectedEmptyNotifications.has(notificationMessage.notificationId)) { + return false; + } + if (!notificationMessage.notificationId || typeof notificationMessage.notificationId !== 'string') { + return false; + } + return true; +} +exports.isNotificationMessage = isNotificationMessage; +function isHandshakeMessage(message) { + if (!isMessage(message)) { + return false; + } + var handshakeMessage = message; + if (handshakeMessage.msgType !== MessageTypes_1.MessageType.Handshake) { + return false; + } + return true; +} +exports.isHandshakeMessage = isHandshakeMessage; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js": +/*!*******************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Enum defining the 4 different types of messages we have defined + */ +var MessageType; +(function (MessageType) { + MessageType["Initialize"] = "initialize"; + MessageType["Notification"] = "notification"; + MessageType["Command"] = "command"; + MessageType["CommandResponse"] = "command-response"; + MessageType["Handshake"] = "v-handshake"; + MessageType["Ack"] = "v-ack"; +})(MessageType = exports.MessageType || (exports.MessageType = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js": +/*!**********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * This version converter doesn't actually do anything but is useful for testing or when we have + * a matching platform and internal version number + */ +var IdentityVersionConverter = /** @class */ (function () { + function IdentityVersionConverter() { + } + IdentityVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) { + return { + verb: verb, + parameters: parameters, + }; + }; + IdentityVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) { + return executeResponse; + }; + IdentityVersionConverter.prototype.downgradeNotification = function (notification) { + return notification; + }; + return IdentityVersionConverter; +}()); +exports.IdentityVersionConverter = IdentityVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js": +/*!**********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * The version converter is designed to allow the platform and external modules + * to seemlessly communicate over two different versions of the internal API. The only + * mode it supports is external's version <= platform's version. When executing + * commands, it is used to upgrade the external representation to what platform knows on the way in + * and downgrade the representations on the way out. Similarly for notifications, it can + * downgrade those on the way from platform to external. + */ +var StackingVersionConverter = /** @class */ (function () { + /** + * Creates a new instance of the StackingVersionConverter + * + * @param _externalMajorVersion The major version of the internal contract api-external-js is using + * @param _platformMajorVersion The major version of the internal contract the api-platform-js is using + * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters + * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd + * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification + */ + function StackingVersionConverter(_externalMajorVersion, _platformMajorVersion, _upgradeExecuteTranslations, _downgradeExecuteTranslations, _downgradeNotificationTranslations) { + this._externalMajorVersion = _externalMajorVersion; + this._platformMajorVersion = _platformMajorVersion; + this._upgradeExecuteTranslations = _upgradeExecuteTranslations; + this._downgradeExecuteTranslations = _downgradeExecuteTranslations; + this._downgradeNotificationTranslations = _downgradeNotificationTranslations; + if (this._externalMajorVersion > this._platformMajorVersion) { + throw new Error("Cannot convert between external version " + this._externalMajorVersion + " and " + this._platformMajorVersion); + } + } + /** + * Creates a new instance of the StackingVersionConverter + * + * @param _externalVersion The version of the internal contract api-external-js is using + * @param _platformVersion The version of the internal contract the api-platform-js is using + * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters + * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd + * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification + */ + StackingVersionConverter.fromData = function (externalVersion, platformVersion, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations) { + return new this(externalVersion.major, platformVersion.major, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations); + }; + StackingVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) { + // Perform the upgrade of the verb and parameters to the level that platform is using + var upgraded = { verb: verb, parameters: parameters }; + for (var _i = 0, _a = this._upgradeExecuteTranslations; _i < _a.length; _i++) { + var upgradeTranslation = _a[_i]; + upgraded = upgradeTranslation(upgraded.verb, upgraded.parameters); + } + return upgraded; + }; + StackingVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) { + // Downgrade the response to what the external module is expecting + var downgraded = executeResponse; + for (var _i = 0, _a = this._downgradeExecuteTranslations; _i < _a.length; _i++) { + var downgradeTranslation = _a[_i]; + downgraded = downgradeTranslation(downgraded); + } + return downgraded; + }; + StackingVersionConverter.prototype.downgradeNotification = function (notification) { + // Downgrade the notification to what the external module is expecting + var downgraded = notification; + for (var _i = 0, _a = this._downgradeNotificationTranslations; _i < _a.length; _i++) { + var downgradeTranslation = _a[_i]; + downgraded = downgradeTranslation(downgraded); + } + return downgraded; + }; + return StackingVersionConverter; +}()); +exports.StackingVersionConverter = StackingVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js": +/*!*********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var IdentityVersionConverter_1 = __webpack_require__(/*! ./IdentityVersionConverter */ "../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js"); +var StackingVersionConverter_1 = __webpack_require__(/*! ./StackingVersionConverter */ "../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js"); +var VersionTranslations_1 = __webpack_require__(/*! ./VersionTranslations */ "../api-internal-contract-js/lib/src/versioning/VersionTranslations.js"); +/** + * @returns true if lhs < rhs (ignoring fix number) + * @param lhs + * @param rhs + */ +function VersionLessThan(lhs, rhs) { + if (lhs.major > rhs.major) { + return false; + } + if (lhs.major < rhs.major) { + return true; + } + return lhs.minor < rhs.minor; +} +exports.VersionLessThan = VersionLessThan; +/** + * @returns true if lhs == rhs (ignoring fix number) + * @param lhs + * @param rhs + */ +function VersionEqualTo(lhs, rhs) { + return lhs.major === rhs.major && lhs.minor === rhs.minor; +} +exports.VersionEqualTo = VersionEqualTo; +// A mapping from an older client version of internal-contract to the current platform version of this contract. +// Each version bump can have an array of translations to perform in order. Notice that this is +// different than the major upgrades/downgrades above because it handles both major and minor version changes. +// Also please note: downgradeExecuteCall is handled on the client/external side rather than platform side. +// When updating the major or minor version of our internal-contract, you will need to update these data structures. +// * If there are translations to add, add them to the version to "upgrade from" or "downgrade to". +exports.ExecuteMinorUpgrades = { + 1: { + 9: [], + }, +}; +exports.ExecuteMinorDowngrades = { + 1: { + 5: [VersionTranslations_1.DowngradeWorksheetNames], + 9: [], + }, +}; +exports.NotificationMinorDowngrades = { + 1: { + 9: [], + 10: [VersionTranslations_1.DowngradeFlipboardZoneID], + }, +}; +/** + * Creates a new InternalContractVersionConverter which has the ability to upgrade and downgrade the contract + * between the two versions, which are specified. If externalMajorVersion is greater than platformMajorVersion, + * an error will be thrown because we won't know how to do those conversions. + * This converter can handle both major and minor updates when the platform version is greater than external version. + * + * @param externalVersion VersionNumber of the internal api which the external module is using + * @param platformVersion VersionNumber of the internal api which the platform is using + */ +function CreateVersionConverter(externalVersion, platformVersion) { + return CreateVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorUpgrades, exports.ExecuteMinorDowngrades, exports.NotificationMinorDowngrades); +} +exports.CreateVersionConverter = CreateVersionConverter; +/** + * Implementation of CreateVersionConverter. This function takes the upgrade, downgrade, and + * notification arrays so that all the logic can be tested. + * + * @param externalVersion VersionNumber of the internal api which the external module is using + * @param platformVersion VersionNumber of the internal api which the platform is using + * @param upgrades MajorMinorTranslators for upgrades + * @param downgrades MajorMinorTranslators for downgrades + * @param notificationDowngrades MajorMinorTranslators for notification downgrades + */ +function CreateVersionConverterWithTranslators(externalVersion, platformVersion, upgrades, downgrades, notificationDowngrades) { + var externalMajorVersion = externalVersion.major; + var externalMinorVersion = externalVersion.minor; + var platformMajorVersion = platformVersion.major; + if (externalMajorVersion > platformMajorVersion) { + throw new Error("External version must be less than or equal to platform version.\n externalMajorVersion=" + externalMajorVersion + " platformMajorVersion=" + platformMajorVersion); + } + // If we are using the exact same versions (major.minor), just use the identity converter + if (VersionEqualTo(externalVersion, platformVersion)) { + return new IdentityVersionConverter_1.IdentityVersionConverter(); + } + // Walk the span between the versions we have here and collect the upgrade and downgrades necessary + var neededExecuteUpgrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, upgrades); + var neededExecuteDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, downgrades); + var neededNotificationDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, notificationDowngrades); + // We want to apply the downgrades in reverse order in case of dependencies between them + neededExecuteDowngrades.reverse(); + neededNotificationDowngrades.reverse(); + return StackingVersionConverter_1.StackingVersionConverter.fromData(externalVersion, platformVersion, neededExecuteUpgrades, neededExecuteDowngrades, neededNotificationDowngrades); +} +exports.CreateVersionConverterWithTranslators = CreateVersionConverterWithTranslators; +function GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, majorMinorTranslators) { + var neededTranslations = []; + for (var major = externalMajorVersion; major <= platformMajorVersion; major++) { + if (major in majorMinorTranslators) { + var start = major === externalMajorVersion ? externalMinorVersion : 0; + var maximumMinorVersion = GetMaximumMinorIndex(Object.keys(majorMinorTranslators[major])); + for (var minor = start; minor <= maximumMinorVersion; minor++) { + if (minor in majorMinorTranslators[major]) { + neededTranslations.push.apply(neededTranslations, majorMinorTranslators[major][minor]); + } + } + } + } + return neededTranslations; +} +function GetMaximumMinorIndex(minorVersions) { + return minorVersions.map(function (a) { return Number(a); }).reduce(function (a, b) { return (a > b ? a : b); }); +} +exports.GetMaximumMinorIndex = GetMaximumMinorIndex; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/VersionTranslations.js": +/*!*****************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/VersionTranslations.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Notifications_1 = __webpack_require__(/*! ../contract/Notifications */ "../api-internal-contract-js/lib/src/contract/Notifications.js"); +// This is where we will start to define some of these translations. +// When modifying existing models, add the requisite conversion functions here, then use them +// in the VersionConverterFactory implementation. Import old versions as you would any other module +// 0 <-> Translations +// Uncomment this line to import from the V0 definition of the API +// import * as V0 from '@tableau-api-internal-contract-js_v0'; +// 1 <-> 2 Translations +// Uncomment this line to import from the V1 definition of the API +// import * as V1 from '@tableau-api-internal-contract-js_v1'; +function DowngradeWorksheetNames(executeResponse) { + // Fix the dashboard friendly name issue. The structures are compatible, + // so we still return the original reply, but we copy the SheetInfo.name + // into the DashboardZone.name, where v1 wants to find it. + var bootstrapInfo = executeResponse.result; + if (bootstrapInfo.extensionDashboardInfo !== undefined) { + bootstrapInfo.extensionDashboardInfo.zones.forEach(function (zone) { + if (zone.sheetInfo) { + zone.name = zone.sheetInfo.name; + } + }); + } + return executeResponse; +} +exports.DowngradeWorksheetNames = DowngradeWorksheetNames; +function DowngradeFlipboardZoneID(notification) { + // Fix the FlipboardZoneId issue. Older external versions still check for flipboardZoneIDs. + // When running against a newer server, if flipboardZoneId is absent, set it to default(0). + if (notification.notificationId === Notifications_1.NotificationId.SelectedMarksChanged) { + var visualModel = notification.data; + if (visualModel.flipboardZoneID === undefined) { + visualModel.flipboardZoneID = 0; + } + } + return notification; +} +exports.DowngradeFlipboardZoneID = DowngradeFlipboardZoneID; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js": +/*!***************************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js ***! + \***************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * This version converter doesn't actually do anything but is useful for testing or when we have + * a matching platform and external version number + */ +var ExternalIdentityVersionConverter = /** @class */ (function () { + function ExternalIdentityVersionConverter() { + } + ExternalIdentityVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) { + return { + verb: verb, + parameters: parameters, + }; + }; + ExternalIdentityVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) { + return executeResponse; + }; + ExternalIdentityVersionConverter.prototype.upgradeNotification = function (notification) { + return notification; + }; + return ExternalIdentityVersionConverter; +}()); +exports.ExternalIdentityVersionConverter = ExternalIdentityVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js": +/*!***************************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js ***! + \***************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * The version converter is designed to allow the platform and external modules + * to seemlessly communicate over two different versions of the internal API. This converter + * supports external's version(minor) >= platform's version(minor). When executing + * commands, it is used to downgrade the external representation to what platform knows on the way in + * and upgrade the representations on the way out. + */ +var ExternalStackingVersionConverter = /** @class */ (function () { + /** + * Creates a new instance of the StackingVersionConverter + * + * @param _externalVersion The version of the internal contract api-external-js is using + * @param _platformVersion The version of the internal contract the api-platform-js is using + * @param _downgradeExecuteCallTranslations Ordered list of the translations to perform when downgrading cmd parameters + * @param _upgradeExecuteReturnTranslations Ordered list of upgrade translations to perform after a cmd is executed + * @param _upgradeNotificationTranslations Ordered list of upgrade notfications to perform on events + */ + function ExternalStackingVersionConverter(_externalVersion, _platformVersion, _downgradeExecuteCallTranslations, _upgradeExecuteReturnTranslations, _upgradeNotificationTranslations) { + this._externalVersion = _externalVersion; + this._platformVersion = _platformVersion; + this._downgradeExecuteCallTranslations = _downgradeExecuteCallTranslations; + this._upgradeExecuteReturnTranslations = _upgradeExecuteReturnTranslations; + this._upgradeNotificationTranslations = _upgradeNotificationTranslations; + if (this._externalVersion.major > this._platformVersion.major) { + throw new Error("Cannot convert between external version " + this._externalVersion.major + "\n and " + this._platformVersion.major); + } + } + ExternalStackingVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) { + // Perform the downgrade of the verb and parameters to the level that platform is using + var downgraded = { verb: verb, parameters: parameters }; + for (var _i = 0, _a = this._downgradeExecuteCallTranslations; _i < _a.length; _i++) { + var downgradeTranslation = _a[_i]; + downgraded = downgradeTranslation(downgraded.verb, downgraded.parameters); + } + return downgraded; + }; + ExternalStackingVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) { + // Perform the upgrade of the response to what the external module is expecting + var upgraded = executeResponse; + for (var _i = 0, _a = this._upgradeExecuteReturnTranslations; _i < _a.length; _i++) { + var upgradeTranslation = _a[_i]; + upgraded = upgradeTranslation(upgraded, verb, parameters); + } + return upgraded; + }; + ExternalStackingVersionConverter.prototype.upgradeNotification = function (notification) { + // Perform the upgrade of notification to what the external module is expecting + var upgraded = notification; + for (var _i = 0, _a = this._upgradeNotificationTranslations; _i < _a.length; _i++) { + var upgradeNotification = _a[_i]; + upgraded = upgradeNotification(upgraded); + } + return upgraded; + }; + return ExternalStackingVersionConverter; +}()); +exports.ExternalStackingVersionConverter = ExternalStackingVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js": +/*!**************************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js ***! + \**************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var VersionConverterFactory_1 = __webpack_require__(/*! ../VersionConverterFactory */ "../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js"); +var ExternalIdentityVersionConverter_1 = __webpack_require__(/*! ./ExternalIdentityVersionConverter */ "../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js"); +var ExternalStackingVersionConverter_1 = __webpack_require__(/*! ./ExternalStackingVersionConverter */ "../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js"); +var ExternalVersionTranslations_1 = __webpack_require__(/*! ./ExternalVersionTranslations */ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js"); +// A mapping from the current client version of internal-contract to an older platform version of the contract. +// Each version bump can have an array of translations to perform in order. +// These translations handle downgradeExecuteCall and upgradeExecuteReturn and are meant to be called on the +// client/external side. +// When updating the major or minor version of our internal-contract, you will need to update these data structures. +// * If there are translations to add, add them to the version to 'upgrade from' or 'downgrade to'. +exports.ExecuteMinorDowngradeCallExternal = { + 1: { + 9: [], + 13: [ExternalVersionTranslations_1.DowngradeUnderlyingTableDataAsync, ExternalVersionTranslations_1.DowngradeLogicalTableDataAsync], + }, +}; +exports.ExecuteMinorUpgradeReturnExternal = { + 1: { + 9: [ExternalVersionTranslations_1.UpgradeDataTableTypes], + 29: [ExternalVersionTranslations_1.UpgradeDataTableRowsAndColumns], + }, +}; +exports.ExecuteMinorUpgradeNotification = { + 1: { + 9: [], + }, +}; +/** + * Creates a new ExternalContractVersionConverter which has the ability to upgrade and downgrade + * the contract between the two versions which are specified. If externalMajorVersion is less than + * platformMajorVersion, an ExternalIdentityVersionConverter will be returned. + * Handles upgrade/downgrade for both major and minor updates. + * + * @param externalVersion VersionNumber of the internal api which the external module is using + * @param platformVersion VersionNumber of the internal api which the platform is using + */ +function CreateExternalCompatibleVersionConverter(externalVersion, platformVersion) { + return CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorDowngradeCallExternal, exports.ExecuteMinorUpgradeReturnExternal, exports.ExecuteMinorUpgradeNotification); +} +exports.CreateExternalCompatibleVersionConverter = CreateExternalCompatibleVersionConverter; +/** + * Implementation of CreateExternalCompatibleVersionConverterWithTranslators. + * This function takes the upgrade, downgrade arrays so that all the logic can be tested. + * + * @param externalVersion VersionNumber of the internal contract which the external module is using + * @param platformVersion VersionNumber of the internal contract which the platform is using + * @param upgrades MajorMinorTranslators for response upgrades + * @param downgrades MajorMinorTranslators for execute call downgrades + */ +function CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, downgrades, upgrades, upgradeNotifications) { + var externalMajorVersion = externalVersion.major; + var platformMajorVersion = platformVersion.major; + var platformMinorVersion = platformVersion.minor; + // This check is present in VersionConverterFactory. We throw the same error here as well. + // Hence we only need to check the minor versions for translations. + if (externalMajorVersion > platformMajorVersion) { + throw new Error("External version must be less than or equal to platform version.\n externalMajorVersion=" + externalMajorVersion + " platformMajorVersion=" + platformMajorVersion); + } + if (externalMajorVersion < platformMajorVersion || VersionConverterFactory_1.VersionEqualTo(externalVersion, platformVersion)) { + return new ExternalIdentityVersionConverter_1.ExternalIdentityVersionConverter(); + } + // Walk the span between the versions we have here and collect the upgrade and downgrades necessary + var neededExecuteCallDowngrade = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, downgrades); + var neededExecuteReturnUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgrades); + var neededNotificationUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgradeNotifications); + // Reverse the downgrade calls, so that we start the downgrade from the external version to the platform version + neededExecuteCallDowngrade.reverse(); + return new ExternalStackingVersionConverter_1.ExternalStackingVersionConverter(externalVersion, platformVersion, neededExecuteCallDowngrade, neededExecuteReturnUpgrades, neededNotificationUpgrades); +} +exports.CreateExternalCompatibleVersionConverterWithTranslators = CreateExternalCompatibleVersionConverterWithTranslators; +function GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, majorMinorTranslators) { + var neededTranslations = []; + if (platformMajorVersion in majorMinorTranslators) { + var start = platformMinorVersion; + var maximumMinorVersion = VersionConverterFactory_1.GetMaximumMinorIndex(Object.keys(majorMinorTranslators[platformMajorVersion])); + for (var minor = start; minor <= maximumMinorVersion; minor++) { + if (minor in majorMinorTranslators[platformMajorVersion]) { + neededTranslations.push.apply(neededTranslations, majorMinorTranslators[platformMajorVersion][minor]); + } + } + } + return neededTranslations; +} + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js": +/*!**********************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js ***! + \**********************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var JsApiInternalContract_1 = __webpack_require__(/*! ../../JsApiInternalContract */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +// 1.2 -> 1.0 Translations +// Uncomment this line to import from the V1 definition of the API +// import * as V1 from '@tableau-api-internal-contract-js_v1'; +/** + * Prior to 2019.2 (internal-contract v1.9), DataValue.value were all strings. + * Go through all DataValue objects. If we have a string, but the type should not be a string, + * convert it to the correct type. The type of DataValue.value is 'any' in the contract, so + * this change doesn't need any updates to classes or types. + */ +function UpgradeDataTableTypes(executeResponse, verb, parameters) { + if (!executeResponse) { + return executeResponse; + } + var oldUnderlyingDataTable = executeResponse.result; + if (oldUnderlyingDataTable.data !== undefined && oldUnderlyingDataTable.isSummary !== undefined) { + convertDataValues(oldUnderlyingDataTable.data); + return executeResponse; + } + var oldSelectedMarksTable = executeResponse.result; + if (oldSelectedMarksTable.data !== undefined && Array.isArray(oldSelectedMarksTable.data)) { + oldSelectedMarksTable.data.forEach(function (marksTable) { + convertDataValues(marksTable); + }); + return executeResponse; + } + return executeResponse; +} +exports.UpgradeDataTableTypes = UpgradeDataTableTypes; +/** + * Prior to 2020.2 (internal-contract v1.13 and older), worksheet.getUnderlyingTableDataAsync doesn't exist. + * Map it to the older GetUnderlyingData verb and validate the the logical table Id. + **/ +function DowngradeUnderlyingTableDataAsync(verb, parameters) { + if (verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData) { + validateParametersForObjectModel(verb, parameters); + verb = JsApiInternalContract_1.VerbId.GetUnderlyingData; + } + return { + verb: verb, + parameters: parameters, + }; +} +exports.DowngradeUnderlyingTableDataAsync = DowngradeUnderlyingTableDataAsync; +/** + * Prior to 2020.2 (internal-contract v1.13 and older), datasource.getLogicalTableDataAsync doesn't exist. + * Map it to the older GetDataSourceData verb and validate the the logical table Id. + **/ +function DowngradeLogicalTableDataAsync(verb, parameters) { + if (verb === JsApiInternalContract_1.VerbId.GetLogicalTableData) { + validateParametersForObjectModel(verb, parameters); + verb = JsApiInternalContract_1.VerbId.GetDataSourceData; + } + return { + verb: verb, + parameters: parameters, + }; +} +exports.DowngradeLogicalTableDataAsync = DowngradeLogicalTableDataAsync; +function convertDataValues(table) { + // dataTable is a two-dimensional array of data. First index is the row, second is the column. + if (table === undefined || table.dataTable === undefined || !Array.isArray(table.dataTable)) { + return; + } + table.dataTable.forEach(function (row) { + row.forEach(function (dataValue, columnIndex) { + var value = dataValue.value; + if (value !== null) { + dataValue.value = JsApiInternalContract_1.DataTypeConverter.convertValueAsStringToValue(value, table.headers[columnIndex].dataType); + } + }); + }); +} +// ToDo: TFS1069027 Refactor input verbs & parameters in api-internal-contract Upgrade/Downgrade framework +function validateParametersForObjectModel(verb, parameters) { + if (parameters[JsApiInternalContract_1.ParameterId.LogicalTableId] !== JsApiInternalContract_1.ApiShowDataTableSentinel.SingleTableId) { + throw new Error("Invalid logical table id passed to " + verb + "."); + } +} +/** + * Prior to 2021.2 (internal-contract v1.29 and below), getSummaryDataAsync did not support maxRows, + * and any get...DataAsync did not support columnsToIncludeById. + * Trim result to maxRows if it is included in the parameters for getSummaryDataAsync + * Trim columns to columnsToInclude if included in the parameters for any get...DataAsync + */ +function UpgradeDataTableRowsAndColumns(executeResponse, verb, parameters) { + if (isGetSummaryDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.MaxRows]) { + executeResponse = adjustDataRowLength(executeResponse, parameters[JsApiInternalContract_1.ParameterId.MaxRows]); + } + if (isGetTableDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]) { + executeResponse = adjustDataColumns(executeResponse, parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]); + } + return executeResponse; +} +exports.UpgradeDataTableRowsAndColumns = UpgradeDataTableRowsAndColumns; +function isGetSummaryDataVerb(verb) { + return verb === JsApiInternalContract_1.VerbId.GetDataSummaryData; +} +function isGetTableDataVerb(verb) { + return (verb === JsApiInternalContract_1.VerbId.GetDataSummaryData || + verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData || + verb === JsApiInternalContract_1.VerbId.GetLogicalTableData || + verb === JsApiInternalContract_1.VerbId.GetDataSourceData || + verb === JsApiInternalContract_1.VerbId.GetUnderlyingData); +} +function adjustDataRowLength(executeResponse, maxRows) { + var underlyingDataTable = executeResponse.result; + if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable)) { + return executeResponse; + } + if (maxRows > 0 && maxRows < underlyingDataTable.data.dataTable.length) { + underlyingDataTable.data.dataTable.length = maxRows; + } + return executeResponse; +} +function adjustDataColumns(executeResponse, columnsToInclude) { + if (columnsToInclude.length === 0) { + return executeResponse; + } + // verify that we have a valid UnderlyingDataTable + var underlyingDataTable = executeResponse.result; + if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable) || !Array.isArray(underlyingDataTable.data.headers)) { + return executeResponse; + } + // 1. filter the headers to only columnsToInclude + // 2. use the new headers to filter all rows + // 3. update the indices in our new headers + var newHeaders = underlyingDataTable.data.headers.filter(function (header, index) { + return columnsToInclude.find(function (name) { return name === header.fieldName; }); + }); + underlyingDataTable.data.dataTable.forEach(function (row, index) { + underlyingDataTable.data.dataTable[index] = row.filter(function (value, valueIndex) { return newHeaders.findIndex(function (header) { return header.index === valueIndex; }) !== -1; }); + }); + var newIndex = 0; + underlyingDataTable.data.headers = newHeaders.map(function (header) { + header.index = newIndex++; + return header; + }); + return executeResponse; +} + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared.js": +/*!*********************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// Export everything which had been previously in the api-shared module +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ApiVersion_1 = __webpack_require__(/*! ./ApiShared/ApiVersion */ "../api-shared-js/lib/src/ApiShared/ApiVersion.js"); +exports.ApiVersion = ApiVersion_1.ApiVersion; +__export(__webpack_require__(/*! ./ApiShared/CrossFrame/CrossFrameBootstrap */ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js")); +var CrossFrameDispatcher_1 = __webpack_require__(/*! ./ApiShared/CrossFrame/CrossFrameDispatcher */ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js"); +exports.CrossFrameDispatcher = CrossFrameDispatcher_1.CrossFrameDispatcher; +var DataSource_1 = __webpack_require__(/*! ./ApiShared/DataSource */ "../api-shared-js/lib/src/ApiShared/DataSource.js"); +exports.DataSource = DataSource_1.DataSource; +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ./ApiShared/EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +exports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings; +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ./ApiShared/EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +exports.InternalToExternalEnumMappings = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings; +var EventListenerManager_1 = __webpack_require__(/*! ./ApiShared/EventListenerManager */ "../api-shared-js/lib/src/ApiShared/EventListenerManager.js"); +exports.EventListenerManager = EventListenerManager_1.EventListenerManager; +var Field_1 = __webpack_require__(/*! ./ApiShared/Field */ "../api-shared-js/lib/src/ApiShared/Field.js"); +exports.Field = Field_1.Field; +var CustomViewImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/CustomViewImpl */ "../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js"); +exports.CustomViewImpl = CustomViewImpl_1.CustomViewImpl; +var DashboardImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/DashboardImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js"); +exports.DashboardImpl = DashboardImpl_1.DashboardImpl; +var DashboardObjectImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/DashboardObjectImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js"); +exports.DashboardObjectImpl = DashboardObjectImpl_1.DashboardObjectImpl; +var DataSourceImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/DataSourceImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js"); +exports.DataSourceImpl = DataSourceImpl_1.DataSourceImpl; +var ParameterImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/ParameterImpl */ "../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js"); +exports.ParameterImpl = ParameterImpl_1.ParameterImpl; +var SheetImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +exports.SheetImpl = SheetImpl_1.SheetImpl; +var SheetInfoImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/SheetInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js"); +exports.SheetInfoImpl = SheetInfoImpl_1.SheetInfoImpl; +var SingleEventManagerImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/SingleEventManagerImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js"); +exports.SingleEventManagerImpl = SingleEventManagerImpl_1.SingleEventManagerImpl; +var StoryImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/StoryImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js"); +exports.StoryImpl = StoryImpl_1.StoryImpl; +var StoryPointImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/StoryPointImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js"); +exports.StoryPointImpl = StoryPointImpl_1.StoryPointImpl; +var StoryPointInfoImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/StoryPointInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js"); +exports.StoryPointInfoImpl = StoryPointInfoImpl_1.StoryPointInfoImpl; +var WorkbookImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/WorkbookImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js"); +exports.WorkbookImpl = WorkbookImpl_1.WorkbookImpl; +var WorksheetImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/WorksheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js"); +exports.WorksheetImpl = WorksheetImpl_1.WorksheetImpl; +var Point_1 = __webpack_require__(/*! ./ApiShared/Point */ "../api-shared-js/lib/src/ApiShared/Point.js"); +exports.Point = Point_1.Point; +__export(__webpack_require__(/*! ./ApiShared/Services/RegisterAllSharedServices */ "../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js")); +__export(__webpack_require__(/*! ./ApiShared/Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js")); +var ClientInfoServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/ClientInfoServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js"); +exports.ClientInfoServiceImpl = ClientInfoServiceImpl_1.ClientInfoServiceImpl; +var NotificationServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/NotificationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js"); +exports.NotificationServiceImpl = NotificationServiceImpl_1.NotificationServiceImpl; +var NotificationServiceImplBase_1 = __webpack_require__(/*! ./ApiShared/Services/impl/NotificationServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js"); +exports.NotificationServiceImplBase = NotificationServiceImplBase_1.NotificationServiceImplBase; +exports.Registration = NotificationServiceImplBase_1.Registration; +var ServiceImplBase_1 = __webpack_require__(/*! ./ApiShared/Services/impl/ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +exports.ServiceImplBase = ServiceImplBase_1.ServiceImplBase; +var SizeServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/SizeServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js"); +exports.SizeServiceImpl = SizeServiceImpl_1.SizeServiceImpl; +var StoryActivationServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/StoryActivationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js"); +exports.StoryActivationServiceImpl = StoryActivationServiceImpl_1.StoryActivationServiceImpl; +var TableauError_1 = __webpack_require__(/*! ./ApiShared/TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +exports.TableauError = TableauError_1.TableauError; +var Deferred_1 = __webpack_require__(/*! ./ApiShared/Utils/Deferred */ "../api-shared-js/lib/src/ApiShared/Utils/Deferred.js"); +exports.Deferred = Deferred_1.Deferred; +var ErrorHelpers_1 = __webpack_require__(/*! ./ApiShared/Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +exports.ErrorHelpers = ErrorHelpers_1.ErrorHelpers; +var ExportHelpers_1 = __webpack_require__(/*! ./ApiShared/Utils/ExportHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ExportHelpers.js"); +exports.ExportHelpers = ExportHelpers_1.ExportHelpers; +var SheetUtils_1 = __webpack_require__(/*! ./ApiShared/Utils/SheetUtils */ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js"); +exports.SheetUtils = SheetUtils_1.SheetUtils; +var VersionNumber_1 = __webpack_require__(/*! ./ApiShared/VersionNumber */ "../api-shared-js/lib/src/ApiShared/VersionNumber.js"); +exports.VersionNumber = VersionNumber_1.VersionNumber; +var VersionedExternalApiDispatcher_1 = __webpack_require__(/*! ./VersionedExternalApiDispatcher */ "../api-shared-js/lib/src/VersionedExternalApiDispatcher.js"); +exports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher_1.VersionedExternalApiDispatcher; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/ApiVersion.js": +/*!********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/ApiVersion.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var VersionNumber_1 = __webpack_require__(/*! ./VersionNumber */ "../api-shared-js/lib/src/ApiShared/VersionNumber.js"); +/** + * This is the singleton wrapper of VersionNumber + */ +var ApiVersion = /** @class */ (function () { + function ApiVersion() { + } + Object.defineProperty(ApiVersion, "Instance", { + /** + * Gets the singleton instance of the version number. + */ + get: function () { + return ApiVersion._instance; + }, + enumerable: true, + configurable: true + }); + ApiVersion.SetVersionNumber = function (numString, isAlpha) { + ApiVersion._instance = new VersionNumber_1.VersionNumber(numString, isAlpha); + }; + return ApiVersion; +}()); +exports.ApiVersion = ApiVersion; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/ConnectionSummary.js": +/*!***************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/ConnectionSummary.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of a connection summary. + * This does not follow the Impl pattern as it is just a property bag. + */ +var ConnectionSummary = /** @class */ (function () { + function ConnectionSummary(_connectionInfo) { + this._connectionInfo = _connectionInfo; + } + Object.defineProperty(ConnectionSummary.prototype, "name", { + get: function () { + return this._connectionInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionSummary.prototype, "id", { + get: function () { + return this._connectionInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionSummary.prototype, "serverURI", { + get: function () { + return this._connectionInfo.serverURI; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionSummary.prototype, "type", { + get: function () { + return this._connectionInfo.type; + }, + enumerable: true, + configurable: true + }); + return ConnectionSummary; +}()); +exports.ConnectionSummary = ConnectionSummary; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js": +/*!****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var CrossFrameDispatcher_1 = __webpack_require__(/*! ./CrossFrameDispatcher */ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js"); +// Checks to see if we are running in an iframe currently: https://stackoverflow.com/a/326076/8821153 +function inIframe(thisWindow) { + try { + return thisWindow.self !== thisWindow.parent; + } + catch (e) { + return true; + } +} +/** + * Attempts to bootstrap the extension with a cross-frame parent where Tableau is running + * + * @param thisWindow The window which we are running in (injected for unit testing purposes) + * @param internalContractVersion The version number of the internal contract we are using + * @returns A promise which is doing the actual bootstrapping + */ +function doCrossFrameBootstrap(thisWindow, internalContractVersion, options) { + return new Promise(function (resolve, reject) { + var parent; + // Normally, we are running inside an iframe. The exception to this is + // when we are running as an extension inside a dialog as part of the UINamespace + // functionality. In that case, we want the opener of this window rather than the parent. + if (!inIframe(thisWindow)) { + parent = thisWindow.opener; + } + else { + parent = thisWindow.parent; + } + if (!parent) { + reject('This extension is not running inside an iframe, desktop, or popup window. Initialization failed.'); + } + // Create the messenger which will do he communication between this window and our parent + // Since we don't know where we are running yet, we have to make this initial origin '*'. Once + // we have successfully initialized our extension, we will limit where we send messages + var messenger = new api_internal_contract_js_1.CrossFrameMessenger(thisWindow, parent, '*'); + // Prepare to send an initialization message to the parent frame + var initializationMessage = messenger.prepareInitializationMessage(internalContractVersion, api_internal_contract_js_1.MESSAGING_VERSION, options); + // When we receive a response back from the parent, we check to make sure the guids match and then we know + // that the parent is aware of us and we can start communicating + messenger.setCommandResponseMessageHandler(function (msg) { + // Verify we are getting a response from our initialize message + if (msg.commandGuid === initializationMessage.messageGuid) { + // The versioning of the dispatcher happens on the other side of our frame, and + // in a wrapper on this side. This one doesn't have any version knowledge. + var dispatcherFactory = function () { return new CrossFrameDispatcher_1.CrossFrameDispatcher(messenger); }; + resolve(dispatcherFactory); + } + }); + // Now that our handlers are ready, start listening and send our initialization message + messenger.startListening(); + initializationMessage.send(); + }); +} +exports.doCrossFrameBootstrap = doCrossFrameBootstrap; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +/** + * This is an implementation of the InternalApiDispatcher interface which functions by passing messages + * across a frame boundary. This is usually between the code where our javscript library has been included + * by a 3rd party dev and another frame where Tableau server has content. + */ +var CrossFrameDispatcher = /** @class */ (function () { + /** + * Creates an instance of CrossFrameDispatcher which will use the given messenger to communicate + * @param _messenger an instantiated and listening messenger object + */ + function CrossFrameDispatcher(_messenger) { + this._messenger = _messenger; + // Collection of pending promises which are waiting to be resolved. When we receive a response back from the other frame, + // these promises can be either resolved or rejected + this._pendingPromises = {}; + // The collection of notification handlers which have been registered with this dispatcher + this._notificationHandlers = []; + if (!this._messenger) { + throw 'Missing messenger object'; + } + // Set up our message handlers. We only care about incoming notifications and command responses + this._messenger.setCommandResponseMessageHandler(this.onCommandResponse.bind(this)); + this._messenger.setNotificationMessageHandler(this.onNotification.bind(this)); + } + ////// Start InternalApiDispatcher implementation + CrossFrameDispatcher.prototype.execute = function (verb, parameters) { + var _this = this; + // To execute a verb, we first prepare a command message and then define a promise. + var preparedMessage = this._messenger.prepareCommandMessage(verb, parameters); + var promise = new Promise(function (resolve, reject) { + // Save off the pending promise by the messageGuid we are about to send. When a response is + // received, we'll be able to resolve this promise with the result + _this._pendingPromises[preparedMessage.messageGuid] = { resolve: resolve, reject: reject }; + }); + // Actually send the message and return the promise + preparedMessage.send(); + return promise; + }; + CrossFrameDispatcher.prototype.registerNotificationHandler = function (handler) { + this._notificationHandlers.push(handler); + }; + CrossFrameDispatcher.prototype.unregisterNotificationHandler = function (handler) { + this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; }); + }; + ////// End InternalApiDispatcher implementation + CrossFrameDispatcher.prototype.onCommandResponse = function (response) { + // We got a command response, look through the pending promises and resolve + if (Object.keys(this._pendingPromises).indexOf(response.commandGuid) < 0) { + return; // We don't have any reference to this command, just return + } + var pendingPromise = this._pendingPromises[response.commandGuid]; + // If we have an error defined, reject the promise + if (response.error) { + pendingPromise.reject(response.error); + } + // If we have data defined, resolve the promise + if (response.data) { + pendingPromise.resolve({ result: response.data }); + } + // Clean up our pending promises object + delete this._pendingPromises[response.commandGuid]; + }; + CrossFrameDispatcher.prototype.onNotification = function (notificationMessage) { + // Go through each notification handler we have registered and let them know a notification came in + for (var _i = 0, _a = this._notificationHandlers; _i < _a.length; _i++) { + var handler = _a[_i]; + try { + handler({ notificationId: notificationMessage.notificationId, data: notificationMessage.data }); + } + catch (e) { + // Incase of a IncompatibleVersionError, re-throw the error. + if (e.errorCode === api_external_contract_js_1.EmbeddingErrorCodes.IncompatibleVersionError) { + throw e; + } + // Else Ignore so if one handler errors, the other still get the message. + } + } + }; + return CrossFrameDispatcher; +}()); +exports.CrossFrameDispatcher = CrossFrameDispatcher; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/DataSource.js": +/*!********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/DataSource.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DataSource = /** @class */ (function () { + function DataSource(_dataSourceImpl) { + this._dataSourceImpl = _dataSourceImpl; + } + Object.defineProperty(DataSource.prototype, "name", { + get: function () { + return this._dataSourceImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "id", { + get: function () { + return this._dataSourceImpl.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "fields", { + get: function () { + return this._dataSourceImpl.fields; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "extractUpdateTime", { + get: function () { + return this._dataSourceImpl.extractUpdateTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "isExtract", { + get: function () { + return this._dataSourceImpl.isExtract; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "isPublished", { + get: function () { + return this._dataSourceImpl.isPublished; + }, + enumerable: true, + configurable: true + }); + DataSource.prototype.publishedUrl = function () { + return this._dataSourceImpl.publishedUrl(); + }; + DataSource.prototype.refreshAsync = function () { + return this._dataSourceImpl.refreshAsync(); + }; + DataSource.prototype.getActiveTablesAsync = function () { + console.warn('DataSource.getActiveTablesAsync is deprecated. Please use DataSource.getLogicalTablesAsync.'); + return this._dataSourceImpl.getActiveTablesAsync(); + }; + DataSource.prototype.getConnectionSummariesAsync = function () { + return this._dataSourceImpl.getConnectionSummariesAsync(); + }; + DataSource.prototype.getUnderlyingDataAsync = function (options) { + console.warn('DataSource.getUnderlyingDataAsync is deprecated. Please use ' + + 'DataSource.getLogicalTablesAsync and DataSource.getLogicalTableDataAsync.'); + return this._dataSourceImpl.getUnderlyingDataAsync(options); + }; + DataSource.prototype.getLogicalTablesAsync = function () { + return this._dataSourceImpl.getLogicalTablesAsync(); + }; + DataSource.prototype.getLogicalTableDataAsync = function (logicalTableId, options) { + return this._dataSourceImpl.getLogicalTableDataAsync(logicalTableId, options); + }; + DataSource.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + return this._dataSourceImpl.getLogicalTableDataReaderAsync(logicalTableId, pageRowCount, options); + }; + return DataSource; +}()); +exports.DataSource = DataSource; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js": +/*!*****************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var EnumConverter_1 = __webpack_require__(/*! ../Utils/EnumConverter */ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js"); +/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */ +/** + * Maps enums used by the external-api-contract to the enums used + * in the internal-api-contract, which developers code against. + */ +var ExternalToInternalEnumMappings = /** @class */ (function () { + function ExternalToInternalEnumMappings() { + } + ExternalToInternalEnumMappings.filterDomainType = new EnumConverter_1.EnumConverter((_a = {}, + _a[api_external_contract_js_1.FilterDomainType.Relevant] = api_internal_contract_js_1.FilterDomainType.Relevant, + _a[api_external_contract_js_1.FilterDomainType.Database] = api_internal_contract_js_1.FilterDomainType.Database, + _a)); + ExternalToInternalEnumMappings.nullOptions = new EnumConverter_1.EnumConverter((_b = {}, + _b[api_external_contract_js_1.FilterNullOption.AllValues] = api_internal_contract_js_1.FilterNullOption.AllValues, + _b[api_external_contract_js_1.FilterNullOption.NonNullValues] = api_internal_contract_js_1.FilterNullOption.NonNullValues, + _b[api_external_contract_js_1.FilterNullOption.NullValues] = api_internal_contract_js_1.FilterNullOption.NullValues, + _b)); + ExternalToInternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_c = {}, + _c[api_external_contract_js_1.FilterUpdateType.Add] = api_internal_contract_js_1.FilterUpdateType.Add, + _c[api_external_contract_js_1.FilterUpdateType.All] = api_internal_contract_js_1.FilterUpdateType.All, + _c[api_external_contract_js_1.FilterUpdateType.Remove] = api_internal_contract_js_1.FilterUpdateType.Remove, + _c[api_external_contract_js_1.FilterUpdateType.Replace] = api_internal_contract_js_1.FilterUpdateType.Replace, + _c)); + ExternalToInternalEnumMappings.setVisibilityType = new EnumConverter_1.EnumConverter((_d = {}, + _d[api_external_contract_js_1.ZoneVisibilityType.Show] = true, + _d[api_external_contract_js_1.ZoneVisibilityType.Hide] = false, + _d)); + ExternalToInternalEnumMappings.setReplaySpeedType = new EnumConverter_1.EnumConverter((_e = {}, + // these numbers are duration multipliers + // 2.0, for example, doubles the duration of the replay, slowing it down to 0.5x speed + _e[api_external_contract_js_1.ReplaySpeedType.Slow] = 2.0, + _e[api_external_contract_js_1.ReplaySpeedType.Normal] = 1.0, + _e[api_external_contract_js_1.ReplaySpeedType.Fast] = 0.5, + _e)); + ExternalToInternalEnumMappings.sheetType = new EnumConverter_1.EnumConverter((_f = {}, + _f[api_external_contract_js_1.SheetType.Dashboard] = api_internal_contract_js_1.SheetType.Dashboard, + _f[api_external_contract_js_1.SheetType.Worksheet] = api_internal_contract_js_1.SheetType.Worksheet, + _f[api_external_contract_js_1.SheetType.Story] = api_internal_contract_js_1.SheetType.Story, + _f)); + ExternalToInternalEnumMappings.showDataTableFormatType = new EnumConverter_1.EnumConverter((_g = {}, + _g[api_external_contract_js_1.IncludeDataValuesOption.AllValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeAndFormattedValues, + _g[api_external_contract_js_1.IncludeDataValuesOption.OnlyNativeValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly, + _g[api_external_contract_js_1.IncludeDataValuesOption.OnlyFormattedValues] = api_internal_contract_js_1.ApiShowDataTableFormat.FormattedValuesOnly, + _g)); + ExternalToInternalEnumMappings.periodType = new EnumConverter_1.EnumConverter((_h = {}, + _h[api_external_contract_js_1.PeriodType.Years] = api_internal_contract_js_1.DateStepPeriod.Years, + _h[api_external_contract_js_1.PeriodType.Quarters] = api_internal_contract_js_1.DateStepPeriod.Quarters, + _h[api_external_contract_js_1.PeriodType.Months] = api_internal_contract_js_1.DateStepPeriod.Months, + _h[api_external_contract_js_1.PeriodType.Weeks] = api_internal_contract_js_1.DateStepPeriod.Weeks, + _h[api_external_contract_js_1.PeriodType.Days] = api_internal_contract_js_1.DateStepPeriod.Days, + _h[api_external_contract_js_1.PeriodType.Hours] = api_internal_contract_js_1.DateStepPeriod.Hours, + _h[api_external_contract_js_1.PeriodType.Minutes] = api_internal_contract_js_1.DateStepPeriod.Minutes, + _h[api_external_contract_js_1.PeriodType.Seconds] = api_internal_contract_js_1.DateStepPeriod.Seconds, + _h)); + ExternalToInternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_j = {}, + _j[api_external_contract_js_1.DateRangeType.Last] = api_internal_contract_js_1.DateRangeType.Last, + _j[api_external_contract_js_1.DateRangeType.LastN] = api_internal_contract_js_1.DateRangeType.LastN, + _j[api_external_contract_js_1.DateRangeType.Next] = api_internal_contract_js_1.DateRangeType.Next, + _j[api_external_contract_js_1.DateRangeType.NextN] = api_internal_contract_js_1.DateRangeType.NextN, + _j[api_external_contract_js_1.DateRangeType.Current] = api_internal_contract_js_1.DateRangeType.Current, + _j[api_external_contract_js_1.DateRangeType.ToDate] = api_internal_contract_js_1.DateRangeType.ToDate, + _j)); + ExternalToInternalEnumMappings.dialogStyles = new EnumConverter_1.EnumConverter((_k = {}, + _k[api_external_contract_js_1.DialogStyle.Window] = api_internal_contract_js_1.DialogStyle.Window, + _k[api_external_contract_js_1.DialogStyle.Modal] = api_internal_contract_js_1.DialogStyle.Modal, + _k[api_external_contract_js_1.DialogStyle.Modeless] = api_internal_contract_js_1.DialogStyle.Modeless, + _k)); + return ExternalToInternalEnumMappings; +}()); +exports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings; +/* tslint:enable:typedef */ + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js": +/*!*****************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var EnumConverter_1 = __webpack_require__(/*! ../Utils/EnumConverter */ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js"); +/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */ +/** + * Maps enums used by the internal-api-contract to the enums used + * in the external-api-contract, which developers code against. + */ +var InternalToExternalEnumMappings = /** @class */ (function () { + function InternalToExternalEnumMappings() { + } + InternalToExternalEnumMappings.extensionContext = new EnumConverter_1.EnumConverter((_a = {}, + _a[api_internal_contract_js_1.ExtensionContext.Desktop] = api_external_contract_js_1.ExtensionContext.Desktop, + _a[api_internal_contract_js_1.ExtensionContext.Server] = api_external_contract_js_1.ExtensionContext.Server, + _a)); + InternalToExternalEnumMappings.extensionMode = new EnumConverter_1.EnumConverter((_b = {}, + _b[api_internal_contract_js_1.ExtensionMode.Authoring] = api_external_contract_js_1.ExtensionMode.Authoring, + _b[api_internal_contract_js_1.ExtensionMode.Viewing] = api_external_contract_js_1.ExtensionMode.Viewing, + _b)); + InternalToExternalEnumMappings.columnType = new EnumConverter_1.EnumConverter((_c = {}, + _c[api_internal_contract_js_1.ColumnType.Continuous] = api_external_contract_js_1.ColumnType.Continuous, + _c[api_internal_contract_js_1.ColumnType.Discrete] = api_external_contract_js_1.ColumnType.Discrete, + _c)); + InternalToExternalEnumMappings.fieldAggregationType = new EnumConverter_1.EnumConverter((_d = {}, + _d[api_internal_contract_js_1.FieldAggregationType.Attr] = api_external_contract_js_1.FieldAggregationType.Attr, + _d[api_internal_contract_js_1.FieldAggregationType.Avg] = api_external_contract_js_1.FieldAggregationType.Avg, + _d[api_internal_contract_js_1.FieldAggregationType.Collect] = api_external_contract_js_1.FieldAggregationType.Collect, + _d[api_internal_contract_js_1.FieldAggregationType.Count] = api_external_contract_js_1.FieldAggregationType.Count, + _d[api_internal_contract_js_1.FieldAggregationType.Countd] = api_external_contract_js_1.FieldAggregationType.Countd, + _d[api_internal_contract_js_1.FieldAggregationType.Day] = api_external_contract_js_1.FieldAggregationType.Day, + _d[api_internal_contract_js_1.FieldAggregationType.End] = api_external_contract_js_1.FieldAggregationType.End, + _d[api_internal_contract_js_1.FieldAggregationType.Hour] = api_external_contract_js_1.FieldAggregationType.Hour, + _d[api_internal_contract_js_1.FieldAggregationType.InOut] = api_external_contract_js_1.FieldAggregationType.InOut, + _d[api_internal_contract_js_1.FieldAggregationType.Kurtosis] = api_external_contract_js_1.FieldAggregationType.Kurtosis, + _d[api_internal_contract_js_1.FieldAggregationType.Max] = api_external_contract_js_1.FieldAggregationType.Max, + _d[api_internal_contract_js_1.FieldAggregationType.Mdy] = api_external_contract_js_1.FieldAggregationType.Mdy, + _d[api_internal_contract_js_1.FieldAggregationType.Median] = api_external_contract_js_1.FieldAggregationType.Median, + _d[api_internal_contract_js_1.FieldAggregationType.Min] = api_external_contract_js_1.FieldAggregationType.Min, + _d[api_internal_contract_js_1.FieldAggregationType.Minute] = api_external_contract_js_1.FieldAggregationType.Minute, + _d[api_internal_contract_js_1.FieldAggregationType.MonthYear] = api_external_contract_js_1.FieldAggregationType.MonthYear, + _d[api_internal_contract_js_1.FieldAggregationType.None] = api_external_contract_js_1.FieldAggregationType.None, + _d[api_internal_contract_js_1.FieldAggregationType.Qtr] = api_external_contract_js_1.FieldAggregationType.Qtr, + _d[api_internal_contract_js_1.FieldAggregationType.Quart1] = api_external_contract_js_1.FieldAggregationType.Quart1, + _d[api_internal_contract_js_1.FieldAggregationType.Quart3] = api_external_contract_js_1.FieldAggregationType.Quart3, + _d[api_internal_contract_js_1.FieldAggregationType.Second] = api_external_contract_js_1.FieldAggregationType.Second, + _d[api_internal_contract_js_1.FieldAggregationType.Skewness] = api_external_contract_js_1.FieldAggregationType.Skewness, + _d[api_internal_contract_js_1.FieldAggregationType.Stdev] = api_external_contract_js_1.FieldAggregationType.Stdev, + _d[api_internal_contract_js_1.FieldAggregationType.Stdevp] = api_external_contract_js_1.FieldAggregationType.Stdevp, + _d[api_internal_contract_js_1.FieldAggregationType.Sum] = api_external_contract_js_1.FieldAggregationType.Sum, + _d[api_internal_contract_js_1.FieldAggregationType.TruncDay] = api_external_contract_js_1.FieldAggregationType.TruncDay, + _d[api_internal_contract_js_1.FieldAggregationType.TruncHour] = api_external_contract_js_1.FieldAggregationType.TruncHour, + _d[api_internal_contract_js_1.FieldAggregationType.TruncMinute] = api_external_contract_js_1.FieldAggregationType.TruncMinute, + _d[api_internal_contract_js_1.FieldAggregationType.TruncMonth] = api_external_contract_js_1.FieldAggregationType.TruncMonth, + _d[api_internal_contract_js_1.FieldAggregationType.TruncQtr] = api_external_contract_js_1.FieldAggregationType.TruncQtr, + _d[api_internal_contract_js_1.FieldAggregationType.TruncSecond] = api_external_contract_js_1.FieldAggregationType.TruncSecond, + _d[api_internal_contract_js_1.FieldAggregationType.TruncWeek] = api_external_contract_js_1.FieldAggregationType.TruncWeek, + _d[api_internal_contract_js_1.FieldAggregationType.TruncYear] = api_external_contract_js_1.FieldAggregationType.TruncYear, + _d[api_internal_contract_js_1.FieldAggregationType.User] = api_external_contract_js_1.FieldAggregationType.User, + _d[api_internal_contract_js_1.FieldAggregationType.Var] = api_external_contract_js_1.FieldAggregationType.Var, + _d[api_internal_contract_js_1.FieldAggregationType.Varp] = api_external_contract_js_1.FieldAggregationType.Varp, + _d[api_internal_contract_js_1.FieldAggregationType.Week] = api_external_contract_js_1.FieldAggregationType.Week, + _d[api_internal_contract_js_1.FieldAggregationType.Weekday] = api_external_contract_js_1.FieldAggregationType.Weekday, + _d[api_internal_contract_js_1.FieldAggregationType.Year] = api_external_contract_js_1.FieldAggregationType.Year, + _d)); + InternalToExternalEnumMappings.fieldRoleType = new EnumConverter_1.EnumConverter((_e = {}, + _e[api_internal_contract_js_1.FieldRoleType.Dimension] = api_external_contract_js_1.FieldRoleType.Dimension, + _e[api_internal_contract_js_1.FieldRoleType.Measure] = api_external_contract_js_1.FieldRoleType.Measure, + _e[api_internal_contract_js_1.FieldRoleType.Unknown] = api_external_contract_js_1.FieldRoleType.Unknown, + _e)); + InternalToExternalEnumMappings.sheetType = new EnumConverter_1.EnumConverter((_f = {}, + _f[api_internal_contract_js_1.SheetType.Dashboard] = api_external_contract_js_1.SheetType.Dashboard, + _f[api_internal_contract_js_1.SheetType.Story] = api_external_contract_js_1.SheetType.Story, + _f[api_internal_contract_js_1.SheetType.Worksheet] = api_external_contract_js_1.SheetType.Worksheet, + _f)); + InternalToExternalEnumMappings.dashboardObjectType = new EnumConverter_1.EnumConverter((_g = {}, + _g[api_internal_contract_js_1.DashboardObjectType.Extension] = api_external_contract_js_1.DashboardObjectType.Extension, + _g[api_internal_contract_js_1.DashboardObjectType.Blank] = api_external_contract_js_1.DashboardObjectType.Blank, + _g[api_internal_contract_js_1.DashboardObjectType.Image] = api_external_contract_js_1.DashboardObjectType.Image, + _g[api_internal_contract_js_1.DashboardObjectType.Legend] = api_external_contract_js_1.DashboardObjectType.Legend, + _g[api_internal_contract_js_1.DashboardObjectType.PageFilter] = api_external_contract_js_1.DashboardObjectType.PageFilter, + _g[api_internal_contract_js_1.DashboardObjectType.ParameterControl] = api_external_contract_js_1.DashboardObjectType.ParameterControl, + _g[api_internal_contract_js_1.DashboardObjectType.QuickFilter] = api_external_contract_js_1.DashboardObjectType.QuickFilter, + _g[api_internal_contract_js_1.DashboardObjectType.Text] = api_external_contract_js_1.DashboardObjectType.Text, + _g[api_internal_contract_js_1.DashboardObjectType.Title] = api_external_contract_js_1.DashboardObjectType.Title, + _g[api_internal_contract_js_1.DashboardObjectType.WebPage] = api_external_contract_js_1.DashboardObjectType.WebPage, + _g[api_internal_contract_js_1.DashboardObjectType.Worksheet] = api_external_contract_js_1.DashboardObjectType.Worksheet, + _g)); + InternalToExternalEnumMappings.dataType = new EnumConverter_1.EnumConverter((_h = {}, + _h[api_internal_contract_js_1.DataType.Bool] = api_external_contract_js_1.DataType.Bool, + _h[api_internal_contract_js_1.DataType.Date] = api_external_contract_js_1.DataType.Date, + _h[api_internal_contract_js_1.DataType.DateTime] = api_external_contract_js_1.DataType.DateTime, + _h[api_internal_contract_js_1.DataType.Float] = api_external_contract_js_1.DataType.Float, + _h[api_internal_contract_js_1.DataType.Int] = api_external_contract_js_1.DataType.Int, + _h[api_internal_contract_js_1.DataType.String] = api_external_contract_js_1.DataType.String, + _h)); + InternalToExternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_j = {}, + _j[api_internal_contract_js_1.FilterUpdateType.Add] = api_external_contract_js_1.FilterUpdateType.Add, + _j[api_internal_contract_js_1.FilterUpdateType.All] = api_external_contract_js_1.FilterUpdateType.All, + _j[api_internal_contract_js_1.FilterUpdateType.Remove] = api_external_contract_js_1.FilterUpdateType.Remove, + _j[api_internal_contract_js_1.FilterUpdateType.Replace] = api_external_contract_js_1.FilterUpdateType.Replace, + _j)); + InternalToExternalEnumMappings.allowableValues = new EnumConverter_1.EnumConverter((_k = {}, + _k[api_internal_contract_js_1.DomainRestrictionType.All] = api_external_contract_js_1.ParameterValueType.All, + _k[api_internal_contract_js_1.DomainRestrictionType.List] = api_external_contract_js_1.ParameterValueType.List, + _k[api_internal_contract_js_1.DomainRestrictionType.Range] = api_external_contract_js_1.ParameterValueType.Range, + _k)); + InternalToExternalEnumMappings.dateStepPeriod = new EnumConverter_1.EnumConverter((_l = {}, + _l[api_internal_contract_js_1.DateStepPeriod.Years] = api_external_contract_js_1.PeriodType.Years, + _l[api_internal_contract_js_1.DateStepPeriod.Quarters] = api_external_contract_js_1.PeriodType.Quarters, + _l[api_internal_contract_js_1.DateStepPeriod.Months] = api_external_contract_js_1.PeriodType.Months, + _l[api_internal_contract_js_1.DateStepPeriod.Weeks] = api_external_contract_js_1.PeriodType.Weeks, + _l[api_internal_contract_js_1.DateStepPeriod.Days] = api_external_contract_js_1.PeriodType.Days, + _l[api_internal_contract_js_1.DateStepPeriod.Hours] = api_external_contract_js_1.PeriodType.Hours, + _l[api_internal_contract_js_1.DateStepPeriod.Minutes] = api_external_contract_js_1.PeriodType.Minutes, + _l[api_internal_contract_js_1.DateStepPeriod.Seconds] = api_external_contract_js_1.PeriodType.Seconds, + _l)); + InternalToExternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_m = {}, + _m[api_internal_contract_js_1.DateRangeType.Current] = api_external_contract_js_1.DateRangeType.Current, + _m[api_internal_contract_js_1.DateRangeType.Last] = api_external_contract_js_1.DateRangeType.Last, + _m[api_internal_contract_js_1.DateRangeType.LastN] = api_external_contract_js_1.DateRangeType.LastN, + _m[api_internal_contract_js_1.DateRangeType.Next] = api_external_contract_js_1.DateRangeType.Next, + _m[api_internal_contract_js_1.DateRangeType.NextN] = api_external_contract_js_1.DateRangeType.NextN, + _m[api_internal_contract_js_1.DateRangeType.ToDate] = api_external_contract_js_1.DateRangeType.ToDate, + _m)); + InternalToExternalEnumMappings.errorCode = new EnumConverter_1.EnumConverter((_o = {}, + _o[api_internal_contract_js_1.ErrorCodes.INITIALIZATION_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.INTERNAL_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.MISSING_ENUM_MAPPING] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.MISSING_PARAMETER] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.PERMISSION_DENIED] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.PRES_MODEL_PARSING_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.UNKNOWN_VERB_ID] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.VERSION_NOT_CONFIGURED] = api_external_contract_js_1.ErrorCodes.APINotInitialized, + _o[api_internal_contract_js_1.ErrorCodes.VISIBILITY_ERROR] = api_external_contract_js_1.ErrorCodes.VisibilityError, + _o), api_external_contract_js_1.ErrorCodes.InternalError); + InternalToExternalEnumMappings.filterType = new EnumConverter_1.EnumConverter((_p = {}, + _p[api_internal_contract_js_1.FilterType.Categorical] = api_external_contract_js_1.FilterType.Categorical, + _p[api_internal_contract_js_1.FilterType.Range] = api_external_contract_js_1.FilterType.Range, + _p[api_internal_contract_js_1.FilterType.RelativeDate] = api_external_contract_js_1.FilterType.RelativeDate, + _p[api_internal_contract_js_1.FilterType.Hierarchical] = api_external_contract_js_1.FilterType.Hierarchical, + _p)); + InternalToExternalEnumMappings.classNameKey = new EnumConverter_1.EnumConverter((_q = {}, + _q["tableau-dashboard-title" /* DashboardTitle */] = api_external_contract_js_1.ClassNameKey.DashboardTitle, + _q["tableau-story-title" /* StoryTitle */] = api_external_contract_js_1.ClassNameKey.StoryTitle, + _q["tableau-tooltip" /* Tooltip */] = api_external_contract_js_1.ClassNameKey.Tooltip, + _q["tableau-worksheet" /* Worksheet */] = api_external_contract_js_1.ClassNameKey.Worksheet, + _q["tableau-worksheet-title" /* WorksheetTitle */] = api_external_contract_js_1.ClassNameKey.WorksheetTitle, + // Temporary until we fix 1317266 - Platform hasn't been updated currently because near branch is closed + _q['dashboard-title'] = api_external_contract_js_1.ClassNameKey.DashboardTitle, + _q['story-title'] = api_external_contract_js_1.ClassNameKey.StoryTitle, + _q['tooltip'] = api_external_contract_js_1.ClassNameKey.Tooltip, + _q['worksheet'] = api_external_contract_js_1.ClassNameKey.Worksheet, + _q['worksheet-title'] = api_external_contract_js_1.ClassNameKey.WorksheetTitle, + _q)); + InternalToExternalEnumMappings.hierarchicalLevelSelectionState = new EnumConverter_1.EnumConverter((_r = {}, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.AllSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.AllSelected, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.NoneSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.NoneSelected, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.SomeSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.SomeSelected, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected, + _r)); + InternalToExternalEnumMappings.annotationType = new EnumConverter_1.EnumConverter((_s = {}, + _s[api_internal_contract_js_1.AnnotateEnum.Area] = api_external_contract_js_1.AnnotationType.Area, + _s[api_internal_contract_js_1.AnnotateEnum.Mark] = api_external_contract_js_1.AnnotationType.Mark, + _s[api_internal_contract_js_1.AnnotateEnum.Point] = api_external_contract_js_1.AnnotationType.Point, + _s)); + InternalToExternalEnumMappings.markType = new EnumConverter_1.EnumConverter((_t = {}, + _t[api_internal_contract_js_1.MarkType.Area] = api_external_contract_js_1.MarkType.Area, + _t[api_internal_contract_js_1.MarkType.Bar] = api_external_contract_js_1.MarkType.Bar, + _t[api_internal_contract_js_1.MarkType.Circle] = api_external_contract_js_1.MarkType.Circle, + _t[api_internal_contract_js_1.MarkType.GanttBar] = api_external_contract_js_1.MarkType.GanttBar, + _t[api_internal_contract_js_1.MarkType.Heatmap] = api_external_contract_js_1.MarkType.Heatmap, + _t[api_internal_contract_js_1.MarkType.Line] = api_external_contract_js_1.MarkType.Line, + _t[api_internal_contract_js_1.MarkType.Map] = api_external_contract_js_1.MarkType.Map, + _t[api_internal_contract_js_1.MarkType.Pie] = api_external_contract_js_1.MarkType.Pie, + _t[api_internal_contract_js_1.MarkType.Polygon] = api_external_contract_js_1.MarkType.Polygon, + _t[api_internal_contract_js_1.MarkType.Shape] = api_external_contract_js_1.MarkType.Shape, + _t[api_internal_contract_js_1.MarkType.Square] = api_external_contract_js_1.MarkType.Square, + _t[api_internal_contract_js_1.MarkType.Text] = api_external_contract_js_1.MarkType.Text, + _t[api_internal_contract_js_1.MarkType.VizExtension] = api_external_contract_js_1.MarkType.VizExtension, + _t)); + return InternalToExternalEnumMappings; +}()); +exports.InternalToExternalEnumMappings = InternalToExternalEnumMappings; +/* tslint:enable:typedef */ + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/EventListenerManager.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/EventListenerManager.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ./TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * Class designed to register and unregister handlers from a user. Only those events + * which are added via AddNewEventType will be supported by this instance + */ +var EventListenerManager = /** @class */ (function () { + function EventListenerManager() { + this._eventListenerManagers = {}; + } + EventListenerManager.prototype.addEventListener = function (eventType, handler) { + if (!this._eventListenerManagers.hasOwnProperty(eventType)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, "Cannot add event, unsupported event type: " + eventType); + } + return this._eventListenerManagers[eventType].addEventListener(handler); + }; + EventListenerManager.prototype.removeEventListener = function (eventType, handler) { + if (!this._eventListenerManagers.hasOwnProperty(eventType)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, "Cannot remove event, unsupported event type: " + eventType); + } + return this._eventListenerManagers[eventType].removeEventListener(handler); + }; + EventListenerManager.prototype.addNewEventType = function (eventManager) { + this._eventListenerManagers[eventManager.eventType] = eventManager; + }; + return EventListenerManager; +}()); +exports.EventListenerManager = EventListenerManager; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Field.js": +/*!***************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Field.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ErrorHelpers_1 = __webpack_require__(/*! ./Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Field = /** @class */ (function () { + function Field(_fieldImpl) { + this._fieldImpl = _fieldImpl; + } + Object.defineProperty(Field.prototype, "name", { + get: function () { + return this._fieldImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "id", { + get: function () { + return this._fieldImpl.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "description", { + get: function () { + return this._fieldImpl.description; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "dataType", { + get: function () { + return this._fieldImpl.dataType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "aggregation", { + get: function () { + return this._fieldImpl.aggregation; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "dataSource", { + get: function () { + return this._fieldImpl.dataSource; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "role", { + get: function () { + return this._fieldImpl.role; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isHidden", { + get: function () { + return this._fieldImpl.isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isGenerated", { + get: function () { + return this._fieldImpl.isGenerated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isCalculatedField", { + get: function () { + return this._fieldImpl.isCalculatedField; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "columnType", { + get: function () { + throw ErrorHelpers_1.ErrorHelpers.apiNotImplemented('Field.columnType'); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isCombinedField", { + get: function () { + return this._fieldImpl.isCombinedField; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isPresentOnPublishedDatasource", { + get: function () { + return this._fieldImpl.isPresentOnPublishedDatasource; + }, + enumerable: true, + configurable: true + }); + return Field; +}()); +exports.Field = Field; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ApiShared_1 = __webpack_require__(/*! ../../ApiShared */ "../api-shared-js/lib/src/ApiShared.js"); +var CustomViewImpl = /** @class */ (function () { + function CustomViewImpl(customViewModel, _registryId) { + this._registryId = _registryId; + this._luid = customViewModel.luid; + this._name = customViewModel.name; + this._shared = customViewModel.shared; + this._isDefault = customViewModel.isDefault; + this._ownerName = customViewModel.owner.userFriendlyName; + this._url = customViewModel.url; + } + Object.defineProperty(CustomViewImpl.prototype, "luid", { + get: function () { + return this._luid; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "name", { + get: function () { + return this._name; + }, + set: function (name) { + this._name = name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "shared", { + get: function () { + return this._shared; + }, + set: function (shared) { + this._shared = shared; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "isDefault", { + get: function () { + return this._isDefault; + }, + set: function (isDefault) { + this._isDefault = isDefault; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "ownerName", { + get: function () { + return this._ownerName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "url", { + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + CustomViewImpl.prototype.saveAsync = function () { + var service = ApiShared_1.ApiServiceRegistry.get(this._registryId).getService("viz-service" /* Viz */); + return service.saveAsync(this); + }; + return CustomViewImpl; +}()); +exports.CustomViewImpl = CustomViewImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var Point_1 = __webpack_require__(/*! ../Point */ "../api-shared-js/lib/src/ApiShared/Point.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var DashboardObjectImpl_1 = __webpack_require__(/*! ./DashboardObjectImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js"); +var SheetImpl_1 = __webpack_require__(/*! ./SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +var SheetInfoImpl_1 = __webpack_require__(/*! ./SheetInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js"); +var WorksheetImpl_1 = __webpack_require__(/*! ./WorksheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js"); +var DashboardImpl = /** @class */ (function (_super) { + __extends(DashboardImpl, _super); + function DashboardImpl(_sheetInfo, _zones, _sheetPath, _registryId, _parentStoryPointImpl, _activeDashboardObjectId) { + if (_activeDashboardObjectId === void 0) { _activeDashboardObjectId = 0; } + var _this = _super.call(this, _sheetInfo, _registryId) || this; + _this._zones = _zones; + _this._sheetPath = _sheetPath; + _this._parentStoryPointImpl = _parentStoryPointImpl; + _this._activeDashboardObjectId = _activeDashboardObjectId; + return _this; + } + Object.defineProperty(DashboardImpl.prototype, "worksheetsImpl", { + get: function () { + return this._worksheetsImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardImpl.prototype, "objects", { + get: function () { + return this._objects; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardImpl.prototype, "parentStoryPoint", { + get: function () { + return this._parentStoryPointImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardImpl.prototype, "activeDashboardObjectId", { + get: function () { + return this._activeDashboardObjectId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardImpl.prototype, "activeDashboardName", { + get: function () { + return this._sheetPath.sheetName; + }, + enumerable: true, + configurable: true + }); + DashboardImpl.prototype.initializeWithPublicInterfaces = function () { + this._worksheetsImpl = new Array(); + this._objects = new Array(); + this.zoneMap = new Map(); + // Process all the zones which are contained in this dashboard + for (var _i = 0, _a = this._zones; _i < _a.length; _i++) { + var zone = _a[_i]; + var worksheetImpl = undefined; + var zoneSize = { width: zone.width, height: zone.height }; + // As the dashboard is active, all other zones in the dashboard are inactive. + var isActive = false; + if (zone.zoneType === api_internal_contract_js_1.DashboardObjectType.Worksheet) { + var worksheetName = ''; + var worksheetUrl = ''; + var isHidden = false; + if (zone.sheetInfo) { + // zone.sheetInfo was not initialized prior to internal-contract 1.6.0 + worksheetName = zone.sheetInfo.name; + // worksheetUrl & isHidden is for Embedding only + worksheetUrl = zone.sheetInfo.url || ''; + // If there's a url, then it's not hidden + isHidden = worksheetUrl === ''; + } + else { + worksheetName = zone.name; + } + // Indexes, isActive and some more properties in sheetInfoImpl are embedding specific. + // But we init them for both extensions and embedding as the Models will only use what is relevant. + var sheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(worksheetName, api_external_contract_js_1.SheetType.Worksheet, zoneSize, this._worksheetsImpl.length, isActive, isHidden, worksheetUrl); + var vizId = { + worksheet: worksheetName, + dashboard: this._sheetInfoImpl.name, + storyboard: this._sheetPath.storyboard, + flipboardZoneID: this._sheetPath.flipboardZoneID, + storyPointID: this._sheetPath.storyPointID, + }; + worksheetImpl = new WorksheetImpl_1.WorksheetImpl(sheetInfoImpl, this._registryId, vizId, this, this._parentStoryPointImpl); + this._worksheetsImpl.push(worksheetImpl); + } + var zonePoint = new Point_1.Point(zone.x, zone.y); + var dashboardObjectImpl = new DashboardObjectImpl_1.DashboardObjectImpl(this, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dashboardObjectType.convert(zone.zoneType), zonePoint, zoneSize, worksheetImpl, zone.name, zone.isFloating !== undefined ? zone.isFloating : false, // before 1.6.0 we didn't have isFloating, so we assume false + zone.isVisible !== undefined ? zone.isVisible : true, // before 1.6.0 we didn't have isVisible, so we assume true + zone.zoneId); + this._objects.push(dashboardObjectImpl); + this.zoneMap.set(zone.zoneId, dashboardObjectImpl); + } + }; + DashboardImpl.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) { + var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("zone-service" /* Zone */); + return zoneService.setVisibilityAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectVisibilityMap); + }; + DashboardImpl.prototype.getDashboardObjectById = function (dashboardObjectId) { + return this.zoneMap.get(dashboardObjectId); + }; + DashboardImpl.prototype.updateZones = function (newZones, newActiveZoneId, newActiveDashboardName) { + var _this = this; + if (newActiveZoneId === void 0) { newActiveZoneId = 0; } + if (newActiveDashboardName === void 0) { newActiveDashboardName = ''; } + // getting previous dashboard objects, active zone ID and active dashboard name + var oldDashboardObjects = this._objects; + var oldZoneMap = this.zoneMap; + var oldActiveZoneId = this._activeDashboardObjectId; + var oldActiveDashboardName = this._sheetPath.sheetName; + // updating zones and reinitializing instance variables + this._zones = newZones; + this._activeDashboardObjectId = newActiveZoneId; + this._sheetPath.sheetName = newActiveDashboardName; + this._sheetInfoImpl.name = newActiveDashboardName; + this.initializeWithPublicInterfaces(); + // getting new dashboard objects + var newDashboardObjects = this._objects; + var newZoneMap = this.zoneMap; + // initializing map for changes + var zoneChanges = new Map(); + // comparing old dashboard objects with new ones + oldDashboardObjects.forEach(function (oldObject) { + var oldId = oldObject.id; + // checking if zone was removed + if (!newZoneMap.has(oldId)) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Removed); + return; + } + var newObject = newZoneMap.get(oldId); + if (oldObject.isFloating !== newObject.isFloating) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsFloatingChanged); + } + if (oldObject.isVisible !== newObject.isVisible) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsVisibleChanged); + } + if (oldObject.name !== newObject.name) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.NameChanged); + } + if (oldObject.position.x !== newObject.position.x || oldObject.position.y !== newObject.position.y) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.PositionChanged); + } + if (oldObject.size.width !== newObject.size.width || oldObject.size.height !== newObject.size.height) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.SizeChanged); + } + }); + // Checking for any added zones + newDashboardObjects.forEach(function (newObject) { + if (!oldZoneMap.has(newObject.id)) { + _this.addChange(newObject.id, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Added); + } + }); + // Checking if zone selection has changed + if (oldActiveZoneId !== newActiveZoneId) { + if (newActiveZoneId !== 0) { + this.addChange(newActiveZoneId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Selected); + } + if (oldActiveZoneId !== 0) { + this.addChange(oldActiveZoneId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Deselected); + } + } + // Checking if switched to another dashboard + if (oldActiveDashboardName !== newActiveDashboardName) { + this.addChange(0, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.DashboardChanged); + } + return zoneChanges; + }; + DashboardImpl.prototype.addChange = function (zoneId, zoneChanges, change) { + if (!zoneChanges.has(zoneId)) { + zoneChanges.set(zoneId, []); + } + zoneChanges.get(zoneId).push(change); + }; + DashboardImpl.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) { + var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("zone-service" /* Zone */); + return zoneService.moveAndResizeAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectPositionAndSizeUpdateArray); + }; + DashboardImpl.prototype.replayAnimationAsync = function (replaySpeed) { + var animationService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("animation-service" /* Animation */); + return animationService.replayAsync(replaySpeed); + }; + DashboardImpl.prototype.getFiltersAsync = function () { + this.verifyActiveSheetOrEmbeddedInActiveStoryPoint(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getDashboardFiltersAsync(); + }; + DashboardImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'FilterUpdateType'); + ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName'); + if (!Array.isArray(values)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyDashboardFilterAsync must be an array'); + } + this.verifyActiveSheetOrEmbeddedInActiveStoryPoint(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyDashboardFilterAsync(fieldName, values, updateType, options); + }; + // @W-12986439: remove once initializeWithPublicInterfaces is moved to the constructor for this class + // This method only exists since worksheetsImpl can be undefined, but we need the worksheet names in the Export APIs + DashboardImpl.prototype.getWorksheetNamesFromZones = function () { + var worksheetNames = []; + for (var _i = 0, _a = this._zones; _i < _a.length; _i++) { + var zone = _a[_i]; + if (zone.zoneType !== api_internal_contract_js_1.DashboardObjectType.Worksheet) { + continue; + } + // zone.sheetInfo was not initialized prior to internal-contract 1.6.0 + var worksheetName = zone.sheetInfo ? zone.sheetInfo.name : zone.name; + worksheetNames.push(worksheetName); + } + return worksheetNames; + }; + DashboardImpl.prototype.verifyActiveSheetOrEmbeddedInActiveStoryPoint = function () { + var isRootAndActiveDashboard = this.active; + var isWithinActiveStoryPoint = this.parentStoryPoint != null && this.parentStoryPoint.active; + if (!isRootAndActiveDashboard && !isWithinActiveStoryPoint) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet'); + } + }; + return DashboardImpl; +}(SheetImpl_1.SheetImpl)); +exports.DashboardImpl = DashboardImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the dashboard objects - the zones in a dashboard. + * This does not follow the Impl pattern as it is just a property bag. + */ +var DashboardObjectImpl = /** @class */ (function () { + function DashboardObjectImpl(_dashboardImpl, _type, _position, _size, _worksheetImpl, _name, _isFloating, _isVisible, _id) { + this._dashboardImpl = _dashboardImpl; + this._type = _type; + this._position = _position; + this._size = _size; + this._worksheetImpl = _worksheetImpl; + this._name = _name; + this._isFloating = _isFloating; + this._isVisible = _isVisible; + this._id = _id; + } + Object.defineProperty(DashboardObjectImpl.prototype, "dashboardImpl", { + get: function () { + return this._dashboardImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "type", { + get: function () { + return this._type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "position", { + get: function () { + return this._position; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "size", { + get: function () { + return this._size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "worksheetImpl", { + get: function () { + return this._worksheetImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "isFloating", { + get: function () { + return this._isFloating; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "isVisible", { + get: function () { + return this._isVisible; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "id", { + get: function () { + return this._id; + }, + enumerable: true, + configurable: true + }); + return DashboardObjectImpl; +}()); +exports.DashboardObjectImpl = DashboardObjectImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ConnectionSummary_1 = __webpack_require__(/*! ../ConnectionSummary */ "../api-shared-js/lib/src/ApiShared/ConnectionSummary.js"); +var Field_1 = __webpack_require__(/*! ../Field */ "../api-shared-js/lib/src/ApiShared/Field.js"); +var LogicalTable_1 = __webpack_require__(/*! ../LogicalTable */ "../api-shared-js/lib/src/ApiShared/LogicalTable.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableSummary_1 = __webpack_require__(/*! ../TableSummary */ "../api-shared-js/lib/src/ApiShared/TableSummary.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var FieldImpl_1 = __webpack_require__(/*! ./FieldImpl */ "../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js"); +var DataSourceImpl = /** @class */ (function () { + function DataSourceImpl(_dataSourceInfo, _registryId) { + var _this = this; + this._dataSourceInfo = _dataSourceInfo; + this._registryId = _registryId; + this._fields = _dataSourceInfo.fields.map(function (fieldModel) { + var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, _this); + return new Field_1.Field(fieldImpl); + }); + } + Object.defineProperty(DataSourceImpl.prototype, "name", { + get: function () { + return this._dataSourceInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "id", { + get: function () { + return this._dataSourceInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "extractUpdateTime", { + get: function () { + return this._dataSourceInfo.extractUpdateTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "fields", { + get: function () { + return this._fields; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "isExtract", { + get: function () { + return this._dataSourceInfo.isExtract; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "isPublished", { + get: function () { + return this._dataSourceInfo.isPublished; + }, + enumerable: true, + configurable: true + }); + DataSourceImpl.prototype.publishedUrl = function () { + return this._dataSourceInfo.publishedUrl; + }; + DataSourceImpl.prototype.getMaxPageRowLimit = function () { + return 10000; + }; + DataSourceImpl.prototype.refreshAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.refreshAsync(this._dataSourceInfo.id); + }; + DataSourceImpl.prototype.getConnectionSummariesAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.getConnectionSummariesAsync(this._dataSourceInfo.id).then(function (summaries) { + return summaries.map(function (summary) { return new ConnectionSummary_1.ConnectionSummary(summary); }); + }); + }; + DataSourceImpl.prototype.getActiveTablesAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.getActiveTablesAsync(this._dataSourceInfo.id).then(function (tableInfos) { + return tableInfos.map(function (tableInfo) { return new TableSummary_1.TableSummary(tableInfo); }); + }); + }; + DataSourceImpl.prototype.getUnderlyingDataAsync = function (options) { + var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return getDataService.getDataSourceDataAsync(this.id, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults + options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + DataSourceImpl.prototype.getLogicalTableDataAsync = function (logicalTableId, options) { + var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return getDataService.getLogicalTableDataAsync(this.id, logicalTableId, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults + options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + DataSourceImpl.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return getDataService.getLogicalTableDataReaderAsync(this.id, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + DataSourceImpl.prototype.initializeWithPublicInterfaces = function (dataSource) { + ErrorHelpers_1.ErrorHelpers.verifyInternalValue(dataSource, 'dataSource'); + this._fields = this._dataSourceInfo.fields.map(function (fieldModel) { + var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, dataSource); + return new Field_1.Field(fieldImpl); + }); + }; + DataSourceImpl.prototype.getLogicalTablesAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.getLogicalTablesAsync(this.id).then(function (logicalTableInfos) { + return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); }); + }); + }; + return DataSourceImpl; +}()); +exports.DataSourceImpl = DataSourceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var FieldImpl = /** @class */ (function () { + function FieldImpl(_fieldInfo, _parentDataSource) { + this._fieldInfo = _fieldInfo; + this._parentDataSource = _parentDataSource; + } + Object.defineProperty(FieldImpl.prototype, "name", { + get: function () { + return this._fieldInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "id", { + get: function () { + return this._fieldInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "description", { + get: function () { + return this._fieldInfo.description; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "dataType", { + get: function () { + var _a; + return _a = this._fieldInfo.dataType, (_a !== null && _a !== void 0 ? _a : api_external_contract_js_1.DataType.Unknown); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "aggregation", { + get: function () { + return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldAggregationType.convert(this._fieldInfo.aggregation); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "dataSource", { + get: function () { + if (!this._parentDataSource) + throw new Error("Data source information is not available for this field. Please use getFieldAsync method to get field's data source information"); + return this._parentDataSource; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "role", { + get: function () { + return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldRoleType.convert(this._fieldInfo.role); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isHidden", { + get: function () { + return this._fieldInfo.isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isGenerated", { + get: function () { + return this._fieldInfo.isGenerated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isCalculatedField", { + get: function () { + return this._fieldInfo.isCalculatedField; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isCombinedField", { + get: function () { + return this._fieldInfo.isCombinedField; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isPresentOnPublishedDatasource", { + get: function () { + return this._fieldInfo.isPresentOnPublishedDatasource; + }, + enumerable: true, + configurable: true + }); + return FieldImpl; +}()); +exports.FieldImpl = FieldImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var DataValueFactory_1 = __webpack_require__(/*! ../Utils/DataValueFactory */ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param_1 = __webpack_require__(/*! ../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ParameterImpl = /** @class */ (function () { + function ParameterImpl(parameterInfo, _registryId) { + this._registryId = _registryId; + this.setParameterInfo(parameterInfo); + } + Object.defineProperty(ParameterImpl.prototype, "name", { + get: function () { + return this._parameterInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "currentValue", { + get: function () { + return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(this._parameterInfo.currentValue, this._parameterInfo.dataType); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "dataType", { + get: function () { + return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dataType.convert(this._parameterInfo.dataType); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "id", { + get: function () { + return this._globalFieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "allowableValues", { + get: function () { + return this._allowableValues; + }, + enumerable: true, + configurable: true + }); + ParameterImpl.prototype.changeValueAsync = function (newValue) { + var _this = this; + ErrorHelpers_1.ErrorHelpers.verifyParameter(newValue, 'newValue'); + var coercedValue = Param_1.Param.serializeParameterValue(newValue); + var parametersService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("parameters-service" /* Parameters */); + return parametersService.changeParameterValueAsync(this._globalFieldName, coercedValue).then(function (parameterInfo) { + _this.setParameterInfo(parameterInfo); + return _this.currentValue; + }); + }; + ParameterImpl.prototype.setParameterInfo = function (parameterInfo) { + this._parameterInfo = parameterInfo; + this._globalFieldName = parameterInfo.fieldName; + var type = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.allowableValues.convert(parameterInfo.allowableValuesType); + var listValues; + var minValue; + var maxValue; + var stepSize; + var dateStepPeriod; + if (type === api_external_contract_js_1.ParameterValueType.List) { + var values = parameterInfo.allowableValues || []; + listValues = values.map(function (val) { return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(val, parameterInfo.dataType); }); + } + else if (type === api_external_contract_js_1.ParameterValueType.Range) { + minValue = parameterInfo.minValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.minValue, parameterInfo.dataType); + maxValue = parameterInfo.maxValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.maxValue, parameterInfo.dataType); + stepSize = parameterInfo.stepSize; + dateStepPeriod = parameterInfo.dateStepPeriod && InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(parameterInfo.dateStepPeriod); + } + this._allowableValues = { + type: type, + allowableValues: listValues, + minValue: minValue, + maxValue: maxValue, + stepSize: stepSize, + dateStepPeriod: dateStepPeriod, + }; + }; + return ParameterImpl; +}()); +exports.ParameterImpl = ParameterImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param_1 = __webpack_require__(/*! ../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var SheetUtils_1 = __webpack_require__(/*! ../Utils/SheetUtils */ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js"); +var SheetImpl = /** @class */ (function () { + function SheetImpl(_sheetInfoImpl, _registryId) { + this._sheetInfoImpl = _sheetInfoImpl; + this._registryId = _registryId; + } + Object.defineProperty(SheetImpl.prototype, "name", { + get: function () { + return this._sheetInfoImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "sheetType", { + get: function () { + return this._sheetInfoImpl.sheetType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "sheetPath", { + get: function () { + return this._sheetInfoImpl.sheetPath; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "size", { + get: function () { + return this._sheetInfoImpl.sheetSize; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "hidden", { + get: function () { + if (this._sheetInfoImpl.isHidden !== undefined) { + return this._sheetInfoImpl.isHidden; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "isHidden not implemented"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "active", { + get: function () { + if (this._sheetInfoImpl.isActive !== undefined) { + return this._sheetInfoImpl.isActive; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "active not implemented"); + }, + set: function (active) { + if (this._sheetInfoImpl.isActive !== undefined) { + this._sheetInfoImpl.active = active; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "index", { + get: function () { + if (this._sheetInfoImpl.index !== undefined) { + return this._sheetInfoImpl.index; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "index not implemented"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "url", { + get: function () { + if (this._sheetInfoImpl.url !== undefined) { + return this._sheetInfoImpl.url; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "url not implemented"); + }, + enumerable: true, + configurable: true + }); + SheetImpl.prototype.getSheetSize = function () { + if (!SheetUtils_1.SheetUtils.isValidSheetSize(this.size)) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InternalError, 'size is not of type SheetSize'); + } + return this.size; + }; + SheetImpl.prototype.findParameterAsync = function (parameterName) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(parameterName, 'parameterName'); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("parameters-service" /* Parameters */); + return service.findParameterByNameAsync(parameterName); + }; + SheetImpl.prototype.getParametersAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("parameters-service" /* Parameters */); + return service.getParametersForSheetAsync(this.sheetPath); + }; + SheetImpl.prototype.changeSizeAsync = function (newSize) { + var _this = this; + var invalidSizeError = new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter'); + if (!newSize || !newSize.behavior) { + throw invalidSizeError; + } + var partialSheetSize = this.normalizeSheetSize(newSize); + var isAutomatic = partialSheetSize.behavior === Contract.SheetSizeBehavior.Automatic; + if (!isAutomatic && !partialSheetSize.minSize && !partialSheetSize.maxSize) { + throw invalidSizeError; + } + if (!isAutomatic && this.sheetType === Contract.SheetType.Worksheet) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSizeBehaviorOnWorksheet, 'Only SheetSizeBehavior.Automatic is allowed on Worksheets'); + } + if (isAutomatic && this.getSheetSize().behavior === partialSheetSize.behavior) { + return Promise.resolve(newSize); + } + var processedNewSize = this.processNewSize(partialSheetSize); + var sizeService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("size-service" /* Size */); + return sizeService.changeSizeAsync(this.name, processedNewSize).then(function () { + var clientInfoService = ServiceRegistry_1.ApiServiceRegistry.get(_this._registryId).getService("client-info-service" /* ClientInfo */); + return clientInfoService.getClientInfoAsync().then(function (bootstrapInfo) { + var sheet = bootstrapInfo.publishedSheets.find(function (s) { return s.name === _this.name; }); + if (!sheet) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, "Can't find sheet with name " + _this.name); + } + var sheetSize = SheetUtils_1.SheetUtils.getSheetSizeFromSizeConstraints(sheet.sizeConstraint); + _this._sheetInfoImpl.sheetSize = sheetSize; + return sheetSize; + }); + }); + }; + SheetImpl.prototype.normalizeSheetSize = function (newSize) { + var behavior = newSize.behavior; + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(behavior, Contract.SheetSizeBehavior, 'SheetSizeBehavior'); + var minSize = SheetImpl.parseDimensions(newSize.minSize); + var maxSize = SheetImpl.parseDimensions(newSize.maxSize); + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + }; + SheetImpl.prototype.processNewSize = function (newSize) { + var _a, _b, _c, _d; + var behavior = newSize.behavior, minSizeMaybe = newSize.minSize, maxSizeMaybe = newSize.maxSize; + var hasMinWidth = !Param_1.Param.isNullOrUndefined((_a = minSizeMaybe) === null || _a === void 0 ? void 0 : _a.width); + var hasMinHeight = !Param_1.Param.isNullOrUndefined((_b = minSizeMaybe) === null || _b === void 0 ? void 0 : _b.height); + var hasMaxWidth = !Param_1.Param.isNullOrUndefined((_c = maxSizeMaybe) === null || _c === void 0 ? void 0 : _c.width); + var hasMaxHeight = !Param_1.Param.isNullOrUndefined((_d = maxSizeMaybe) === null || _d === void 0 ? void 0 : _d.height); + var hasValidMinSize = hasMinWidth && hasMinHeight; + var hasValidMaxSize = hasMaxWidth && hasMaxHeight; + switch (behavior) { + case Contract.SheetSizeBehavior.Automatic: { + return { behavior: behavior }; + } + case Contract.SheetSizeBehavior.AtMost: { + if (!maxSizeMaybe || !hasValidMaxSize) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMaxSize, 'Missing maxSize for SheetSizeBehavior.AtMost'); + } + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + if (maxSize.width < 0 || maxSize.height < 0) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero'); + } + return { behavior: behavior, maxSize: maxSize }; + } + case Contract.SheetSizeBehavior.AtLeast: { + if (!minSizeMaybe || !hasValidMinSize) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinSize, 'Missing minSize for SheetSizeBehavior.AtLeast'); + } + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + if (minSize.width < 0 || minSize.height < 0) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero'); + } + return { behavior: behavior, minSize: minSize }; + } + case Contract.SheetSizeBehavior.Range: { + if (!minSizeMaybe || !maxSizeMaybe || !hasValidMinSize || !hasValidMaxSize) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinMaxSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range'); + } + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + if (minSize.width < 0 || + minSize.height < 0 || + maxSize.width < 0 || + maxSize.height < 0 || + minSize.width > maxSize.width || + minSize.height > maxSize.height) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range'); + } + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + } + case Contract.SheetSizeBehavior.Exactly: { + if (minSizeMaybe && maxSizeMaybe) { + if (hasValidMinSize && hasValidMaxSize) { + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + if (minSize.width !== maxSize.width || minSize.height !== maxSize.height) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Conflicting size values for SheetSizeBehavior.Exactly'); + } + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + } + if (hasValidMinSize) { + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + return { behavior: behavior, minSize: minSize, maxSize: minSize }; + } + if (hasValidMaxSize) { + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + return { behavior: behavior, minSize: maxSize, maxSize: maxSize }; + } + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter'); + } + default: { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, "Unsupported sheet size behavior: " + behavior); + } + } + }; + SheetImpl.parseDimensions = function (size) { + var empty = { width: undefined, height: undefined }; + if (!size) { + return empty; + } + var _a = Param_1.Param.tryParseNumber(size.width), widthParsed = _a.success, parsedWidth = _a.parsed; + var _b = Param_1.Param.tryParseNumber(size.height), heightParsed = _b.success, parsedHeight = _b.parsed; + if (widthParsed && heightParsed) { + return { width: parsedWidth, height: parsedHeight }; + } + if (widthParsed) { + return { width: parsedWidth }; + } + if (heightParsed) { + return { height: parsedHeight }; + } + return empty; + }; + return SheetImpl; +}()); +exports.SheetImpl = SheetImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var SheetInfoImpl = /** @class */ (function () { + function SheetInfoImpl(_name, _sheetType, _sheetSize, _index, _isActive, _isHidden, _url) { + this._name = _name; + this._sheetType = _sheetType; + this._sheetSize = _sheetSize; + this._index = _index; + this._isActive = _isActive; + this._isHidden = _isHidden; + this._url = _url; + } + Object.defineProperty(SheetInfoImpl.prototype, "name", { + get: function () { + return this._name; + }, + set: function (sheetName) { + this._name = sheetName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "sheetSize", { + get: function () { + return this._sheetSize; + }, + set: function (value) { + this._sheetSize = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "sheetType", { + get: function () { + return this._sheetType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "sheetPath", { + get: function () { + return { + sheetName: this.name, + isDashboard: this.sheetType === api_external_contract_js_1.SheetType.Dashboard, + }; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "index", { + get: function () { + return this._index; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "isActive", { + get: function () { + return this._isActive; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "active", { + set: function (active) { + this._isActive = active; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "isHidden", { + get: function () { + return this._isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "url", { + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + return SheetInfoImpl; +}()); +exports.SheetInfoImpl = SheetInfoImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js": +/*!*************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * This class implements the SingleEventManager interface for a single type of Tableau event + * + * @template TEventType The Tableau event type this class specializes + */ +var SingleEventManagerImpl = /** @class */ (function () { + function SingleEventManagerImpl(eventType) { + this._eventType = eventType; + this._handlers = []; + } + Object.defineProperty(SingleEventManagerImpl.prototype, "eventType", { + get: function () { + return this._eventType; + }, + enumerable: true, + configurable: true + }); + SingleEventManagerImpl.prototype.addEventListener = function (handler) { + var _this = this; + this._handlers.push(handler); + return function () { return _this.removeEventListener(handler); }; + }; + SingleEventManagerImpl.prototype.removeEventListener = function (handler) { + var beforeCount = this._handlers.length; + this._handlers = this._handlers.filter(function (h) { return h !== handler; }); + return beforeCount > this._handlers.length; + }; + SingleEventManagerImpl.prototype.triggerEvent = function (eventGenerator) { + for (var _i = 0, _a = this._handlers; _i < _a.length; _i++) { + var handler = _a[_i]; + try { + var eventModel = eventGenerator(); + handler(eventModel); + } + catch (e) { + // Since this handler could be outside our control, just catch anything it throws and continue on + continue; + } + } + }; + return SingleEventManagerImpl; +}()); +exports.SingleEventManagerImpl = SingleEventManagerImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var ShortLivedDeferred_1 = __webpack_require__(/*! ../Utils/ShortLivedDeferred */ "../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js"); +var SheetImpl_1 = __webpack_require__(/*! ./SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +var StoryPointImpl_1 = __webpack_require__(/*! ./StoryPointImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js"); +var StoryPointInfoImpl_1 = __webpack_require__(/*! ./StoryPointInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js"); +var StoryImpl = /** @class */ (function (_super) { + __extends(StoryImpl, _super); + function StoryImpl(_sheetInfoImpl, storyModel, _publishedSheetInfos, _registryId) { + var _this = _super.call(this, _sheetInfoImpl, _registryId) || this; + _this._sheetInfoImpl = _sheetInfoImpl; + _this._publishedSheetInfos = _publishedSheetInfos; + _this._registryId = _registryId; + _this._storyPointInfoImpls = []; + _this._deferred = new ShortLivedDeferred_1.ShortLivedDeferred(); + _this.initializeStory(storyModel); + return _this; + } + StoryImpl.prototype.initializeStory = function (storyModel) { + var _this = this; + storyModel.storyPoints.forEach(function (storyPointModel) { + var isActive = storyPointModel.index === storyModel.activeStoryPointIndex; + var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(storyPointModel.caption, storyPointModel.index, storyPointModel.storyPointId, isActive, storyPointModel.updated, _this); + _this._storyPointInfoImpls.push(storyPointInfoImpl); + if (isActive) { + _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo); + } + }); + }; + StoryImpl.prototype.updateStoryInfo = function (index, storyPointModel) { + if (!this._storyPointInfoImpls) { + return; + } + var storyInfoImpl = this._storyPointInfoImpls[index]; + if (storyInfoImpl.storyPointId !== storyPointModel.storyPointId) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.StoryPointIdMismatch, "We should not be updating a story point when the IDs don't match. Existing storyPointID=" + storyInfoImpl.storyPointId + ", newStoryPointID=" + storyPointModel.storyPointId); + } + storyInfoImpl.caption = storyPointModel.caption; + storyInfoImpl.updated = storyPointModel.updated; + if (this._activeStoryPointImpl.storyPointId === storyPointModel.storyPointId) { + this._activeStoryPointImpl.updated = storyInfoImpl.updated; + } + }; + StoryImpl.prototype.updateStory = function (storyPointModel) { + var _this = this; + if (!this._storyPointInfoImpls) { + return; + } + this._storyPointInfoImpls.forEach(function (storyPointInfoImpl) { + var isActive = storyPointInfoImpl.storyPointId === storyPointModel.storyPointId; + if (isActive) { + // update the state + storyPointInfoImpl.caption = storyPointModel.caption; + storyPointInfoImpl.index = storyPointModel.index; + storyPointInfoImpl.active = true; + storyPointInfoImpl.updated = storyPointModel.updated; + // re-initialize activeStoryPointImpl + _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo); + } + else { + // set old ones to false + storyPointInfoImpl.active = false; + } + }); + if (this.activeStoryPoint) { + this._deferred.resolve(this.activeStoryPoint); + } + }; + Object.defineProperty(StoryImpl.prototype, "activeStoryPoint", { + get: function () { + return this._activeStoryPointImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryImpl.prototype, "storyPointsInfo", { + get: function () { + return this._storyPointInfoImpls; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryImpl.prototype, "isActive", { + get: function () { + return this._sheetInfoImpl.active; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryImpl.prototype, "isHidden", { + get: function () { + return !!this._sheetInfoImpl.isHidden; + }, + enumerable: true, + configurable: true + }); + StoryImpl.prototype.activateNextStoryPointAsync = function () { + if (this._activeStoryPointImpl.index === this._storyPointInfoImpls.length - 1) { + return Promise.resolve(this._activeStoryPointImpl); + } + var promise = this._deferred.getNewPromiseOrThrowIfBusy(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + service.activateNextStoryPointAsync(); + return promise; + }; + StoryImpl.prototype.activatePreviousStoryPointAsync = function () { + if (this._activeStoryPointImpl.index === 0) { + return Promise.resolve(this._activeStoryPointImpl); + } + var promise = this._deferred.getNewPromiseOrThrowIfBusy(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + service.activatePreviousStoryPointAsync(); + return promise; + }; + StoryImpl.prototype.activateStoryPointAsync = function (index) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index'); + ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index'); + if (index < 0 || index >= this._storyPointInfoImpls.length) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.'); + } + if (index === this._activeStoryPointImpl.index) { + return Promise.resolve(this._activeStoryPointImpl); + } + var promise = this._deferred.getNewPromiseOrThrowIfBusy(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + service.activateStoryPointAsync(index); + return promise; + }; + StoryImpl.prototype.revertStoryPointAsync = function (index) { + var _this = this; + ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index'); + ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index'); + if (index < 0 || index >= this._storyPointInfoImpls.length) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.'); + } + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + return service.revertStoryPointAsync(index).then(function (response) { + _this.updateStoryInfo(response.index, response); + var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(response.caption, response.index, response.storyPointId, false, response.updated, _this); + return storyPointInfoImpl; + }); + }; + StoryImpl.prototype.clearPendingPromises = function () { + if (this._deferred) { + this._deferred.reject('All pending promises cleared'); + } + }; + return StoryImpl; +}(SheetImpl_1.SheetImpl)); +exports.StoryImpl = StoryImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var SheetUtils_1 = __webpack_require__(/*! ../Utils/SheetUtils */ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js"); +var DashboardImpl_1 = __webpack_require__(/*! ./DashboardImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js"); +var SheetInfoImpl_1 = __webpack_require__(/*! ./SheetInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js"); +var WorksheetImpl_1 = __webpack_require__(/*! ./WorksheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js"); +var StoryPointImpl = /** @class */ (function () { + function StoryPointImpl(_storyPointInfoImpl, sheetInfos, registryId, containedSheetInfo) { + this._storyPointInfoImpl = _storyPointInfoImpl; + if (containedSheetInfo) { + this._containedSheetImpl = this.createContainedSheet(containedSheetInfo, sheetInfos, registryId); + } + } + Object.defineProperty(StoryPointImpl.prototype, "index", { + get: function () { + return this._storyPointInfoImpl.index; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "caption", { + get: function () { + return this._storyPointInfoImpl.caption; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "active", { + get: function () { + return this._storyPointInfoImpl.active; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "updated", { + get: function () { + return this._storyPointInfoImpl.updated; + }, + set: function (updated) { + this._storyPointInfoImpl.updated = updated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "parentStory", { + get: function () { + return this._storyPointInfoImpl.parentStory; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "containedSheet", { + get: function () { + return this._containedSheetImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "storyPointId", { + get: function () { + return this._storyPointInfoImpl.storyPointId; + }, + enumerable: true, + configurable: true + }); + StoryPointImpl.prototype.createContainedSheet = function (containedSheetInfo, sheetInfos, registryId) { + var containedSheetIdx = -1; + var publishedSheetInfo = SheetUtils_1.SheetUtils.getPublishedSheetInfoByName(containedSheetInfo.name, sheetInfos); + var containedSheetSize = SheetUtils_1.SheetUtils.createAutomaticSize(); + var isContainedSheetHidden = publishedSheetInfo === undefined; + var containedSheetUrl = publishedSheetInfo ? publishedSheetInfo.url : ''; + // Contained sheets aren't active - the containing sheet is active. + var containedSheetActive = false; + var containedSheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(containedSheetInfo.name, SheetUtils_1.SheetUtils.getSheetTypeEnum(containedSheetInfo.sheetType), containedSheetSize, containedSheetIdx, containedSheetActive, isContainedSheetHidden, containedSheetUrl); + var sheetImpl; + switch (containedSheetInfoImpl.sheetType) { + case Contract.SheetType.Worksheet: { + var vizId = { + worksheet: containedSheetInfoImpl.name, + }; + sheetImpl = new WorksheetImpl_1.WorksheetImpl(containedSheetInfoImpl, registryId, vizId, null, this); + break; + } + case Contract.SheetType.Dashboard: { + var sheetPath = { + sheetName: containedSheetInfoImpl.name, + isDashboard: true, + }; + sheetImpl = new DashboardImpl_1.DashboardImpl(containedSheetInfoImpl, containedSheetInfo.dashboardZones, sheetPath, registryId, this); + break; + } + default: { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType'); + } + } + return sheetImpl; + }; + return StoryPointImpl; +}()); +exports.StoryPointImpl = StoryPointImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js": +/*!*********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var StoryPointInfoImpl = /** @class */ (function () { + function StoryPointInfoImpl(_caption, _index, _storyPointId, _active, _updated, _parentStoryImpl) { + this._caption = _caption; + this._index = _index; + this._storyPointId = _storyPointId; + this._active = _active; + this._updated = _updated; + this._parentStoryImpl = _parentStoryImpl; + } + Object.defineProperty(StoryPointInfoImpl.prototype, "caption", { + get: function () { + return this._caption; + }, + set: function (caption) { + this._caption = caption; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "index", { + get: function () { + return this._index; + }, + set: function (index) { + this._index = index; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "storyPointId", { + get: function () { + return this._storyPointId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "active", { + get: function () { + return this._active; + }, + set: function (isActive) { + this._active = isActive; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "updated", { + get: function () { + return this._updated; + }, + set: function (isUpdated) { + this._updated = isUpdated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "parentStory", { + get: function () { + return this._parentStoryImpl; + }, + enumerable: true, + configurable: true + }); + return StoryPointInfoImpl; +}()); +exports.StoryPointInfoImpl = StoryPointInfoImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js": +/*!***************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var WorkbookImpl = /** @class */ (function () { + function WorkbookImpl() { + } + return WorkbookImpl; +}()); +exports.WorkbookImpl = WorkbookImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var DataSource_1 = __webpack_require__(/*! ../DataSource */ "../api-shared-js/lib/src/ApiShared/DataSource.js"); +var LogicalTable_1 = __webpack_require__(/*! ../LogicalTable */ "../api-shared-js/lib/src/ApiShared/LogicalTable.js"); +var GetDataService_1 = __webpack_require__(/*! ../Services/GetDataService */ "../api-shared-js/lib/src/ApiShared/Services/GetDataService.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var DataSourceImpl_1 = __webpack_require__(/*! ./DataSourceImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js"); +var SheetImpl_1 = __webpack_require__(/*! ./SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +var WorksheetImpl = /** @class */ (function (_super) { + __extends(WorksheetImpl, _super); + function WorksheetImpl(sheetInfoImpl, _registryId, _visualId, _parentDashboardImpl, _parentStoryPointImpl) { + var _this = _super.call(this, sheetInfoImpl, _registryId) || this; + _this._visualId = _visualId; + _this._parentDashboardImpl = _parentDashboardImpl; + _this._parentStoryPointImpl = _parentStoryPointImpl; + return _this; + } + Object.defineProperty(WorksheetImpl.prototype, "parentDashboard", { + get: function () { + return this._parentDashboardImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(WorksheetImpl.prototype, "parentStoryPoint", { + get: function () { + return this._parentStoryPointImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(WorksheetImpl.prototype, "visualId", { + get: function () { + return this._visualId; + }, + enumerable: true, + configurable: true + }); + WorksheetImpl.prototype.getMaxPageRowLimit = function () { + return 10000; + }; + WorksheetImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyFilterAsync(this.visualId, fieldName, values, updateType, options); + }; + WorksheetImpl.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyParameter(filterOptions, 'filterOptions'); + if (filterOptions.nullOption) { + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(filterOptions.nullOption, api_external_contract_js_1.FilterNullOption, 'FilterNullOption'); + } + else { + ErrorHelpers_1.ErrorHelpers.verifyRangeParamType(filterOptions.min, filterOptions.max); + } + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyRangeFilterAsync(this.visualId, fieldName, filterOptions); + }; + WorksheetImpl.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyParameter(values, 'values'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType'); + if (!Array.isArray(values) && !values.levels) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyHierarchicalFilterAsync must be an array or contain a levels key'); + } + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyHierarchicalFilterAsync(this.visualId, fieldName, values, updateType, options); + }; + WorksheetImpl.prototype.clearFilterAsync = function (fieldName) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.clearFilterAsync(this.visualId, fieldName); + }; + WorksheetImpl.prototype.applyRelativeDateFilterAsync = function (fieldName, options) { + ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyParameter(options, 'options'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.periodType, api_external_contract_js_1.PeriodType, 'PeriodType'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.rangeType, api_external_contract_js_1.DateRangeType, 'DateRangeType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyRelativeDateFilterAsync(this.visualId, fieldName, options); + }; + WorksheetImpl.prototype.getDataSourcesAsync = function () { + var _this = this; + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return service.getDataSourcesAsync(this.visualId).then(function (result) { + var dataSchema = result; + var worksheetDataSourceInfo = dataSchema.worksheetDataSchemaMap[_this.name]; + var dataSources = []; + // First, add the primary datasource. By convention, it comes first in the returned array. + var primaryId = worksheetDataSourceInfo.primaryDataSource; + dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[primaryId])); + // Then, loop through any secondary data sources and add them. + for (var _i = 0, _a = worksheetDataSourceInfo.referencedDataSourceList; _i < _a.length; _i++) { + var secondaryId = _a[_i]; + if (secondaryId !== primaryId) { + dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[secondaryId])); + } + } + return dataSources; + }); + }; + WorksheetImpl.prototype.getFiltersAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getFiltersAsync(this.visualId); + }; + WorksheetImpl.prototype.getSelectedMarksAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getSelectedMarksAsync(this.visualId); + }; + WorksheetImpl.prototype.getHighlightedMarksAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getHighlightedMarksAsync(this.visualId); + }; + WorksheetImpl.prototype.getSummaryDataAsync = function (options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Summary, !!options.ignoreAliases, !!options.ignoreSelection, true, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getSummaryDataReaderAsync(this.visualId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, true, // includeAllColumns (can be overridden by columnsToIncludeById) + options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getVisualSpecificationAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("visual-model-service" /* VisualModel */); + return service.getVisualSpecificationAsync(this.visualId); + }; + WorksheetImpl.prototype.getSummaryColumnsInfoAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getSummaryColumnsInfoAsync(this.visualId); + }; + WorksheetImpl.prototype.getUnderlyingDataAsync = function (options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Underlying, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getUnderlyingTablesAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return service.getUnderlyingTablesAsync(this.visualId).then(function (logicalTableInfos) { + return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); }); + }); + }; + WorksheetImpl.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingTableDataAsync(this.visualId, logicalTableId, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingTableDataReaderAsync(this.visualId, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.clearSelectedMarksAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.clearSelectedMarksAsync(this.visualId); + }; + WorksheetImpl.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.selectMarksByValueAsync(this.visualId, selections, selectionUpdateType); + }; + WorksheetImpl.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.selectMarksByIdAsync(this.visualId, selections, selectionUpdateType); + }; + WorksheetImpl.prototype.annotateMarkAsync = function (mark, annotationText) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(mark, 'mark'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("annotation-service" /* Annotation */); + return service.annotateMarkAsync(this.visualId, mark, annotationText); + }; + WorksheetImpl.prototype.getAnnotationsAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("annotation-service" /* Annotation */); + return service.getAnnotationsAsync(this.visualId); + }; + WorksheetImpl.prototype.removeAnnotationAsync = function (annotation) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(annotation, 'annotation'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("annotation-service" /* Annotation */); + return service.removeAnnotationAsync(this.visualId, annotation); + }; + WorksheetImpl.prototype.appendContextMenuAsync = function (targetMenu, config) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.appendContextMenuAsync(this.visualId.worksheet, targetMenu, config); + }; + WorksheetImpl.prototype.removeContextMenuAsync = function (targetMenu, menuItemId) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.removeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId); + }; + WorksheetImpl.prototype.executeContextMenuAsync = function (targetMenu, menuItemId) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.executeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId); + }; + WorksheetImpl.prototype.renameContextMenuAsync = function (targetMenu, menuHeader, menuDescription) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.renameContextMenuAsync(this.visualId.worksheet, targetMenu, menuHeader, menuDescription); + }; + WorksheetImpl.prototype.hoverTupleAsync = function (hoveredTuple, tooltip) { + if (this.isInsideDashboardExtension()) { + return Promise.reject(new TableauError_1.TableauError(Contract.SharedErrorCodes.ImplementationError, "hoverTupleAsync is not supported in dashboard extensions")); + } + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.hoverTupleAsync(this.visualId, hoveredTuple, tooltip); + }; + WorksheetImpl.prototype.selectTuplesAsync = function (selectedTuples, selectOption, tooltip) { + if (this.isInsideDashboardExtension()) { + return Promise.reject(new TableauError_1.TableauError(Contract.SharedErrorCodes.ImplementationError, "selectTuplesAsync is not supported in dashboard extensions")); + } + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.selectTuplesAsync(this.visualId, selectedTuples, selectOption, tooltip); + }; + WorksheetImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) { + var dataSourceImpl = new DataSourceImpl_1.DataSourceImpl(dataSourceInfo, this._registryId); + var dataSource = new DataSource_1.DataSource(dataSourceImpl); + dataSourceImpl.initializeWithPublicInterfaces(dataSource); + return dataSource; + }; + WorksheetImpl.prototype.verifyActiveSheet = function () { + var isRootAndActiveWorksheet = this.active; + var isInsideActiveDashboard = this.isInsideActiveDashboard(); + var isInsideActiveStoryPoint = this.isInsideActiveStoryPoint(); + if (!isRootAndActiveWorksheet && !isInsideActiveDashboard && !isInsideActiveStoryPoint) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet'); + } + }; + WorksheetImpl.prototype.isInsideActiveStoryPoint = function () { + return this._parentStoryPointImpl && this._parentStoryPointImpl.active; + }; + WorksheetImpl.prototype.isInsideActiveDashboard = function () { + return this._parentDashboardImpl && this._parentDashboardImpl.active; + }; + WorksheetImpl.prototype.isInsideDashboardExtension = function () { + return this._parentDashboardImpl !== null; + }; + return WorksheetImpl; +}(SheetImpl_1.SheetImpl)); +exports.WorksheetImpl = WorksheetImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/LogicalTable.js": +/*!**********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/LogicalTable.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of a logical table. + * This does not follow the Impl pattern as it is just a property bag. + */ +var LogicalTable = /** @class */ (function () { + function LogicalTable(_logicalTable) { + this._logicalTable = _logicalTable; + } + Object.defineProperty(LogicalTable.prototype, "id", { + get: function () { + return this._logicalTable.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LogicalTable.prototype, "caption", { + get: function () { + return this._logicalTable.caption; + }, + enumerable: true, + configurable: true + }); + return LogicalTable; +}()); +exports.LogicalTable = LogicalTable; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/FilterModels.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/FilterModels.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Filter = /** @class */ (function () { + function Filter(_worksheetName, _fieldName, _filterType, _fieldId, _registryId) { + this._worksheetName = _worksheetName; + this._fieldName = _fieldName; + this._filterType = _filterType; + this._fieldId = _fieldId; + this._registryId = _registryId; + } + Object.defineProperty(Filter.prototype, "worksheetName", { + get: function () { + return this._worksheetName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter.prototype, "fieldName", { + get: function () { + return this._fieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter.prototype, "fieldId", { + get: function () { + return this._fieldId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter.prototype, "filterType", { + get: function () { + return this._filterType; + }, + enumerable: true, + configurable: true + }); + Filter.prototype.getFieldAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return service.getFieldAsync(this._fieldId); + }; + Filter.prototype.getAppliedWorksheetsAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getAppliedWorksheetsAsync(this._worksheetName, this._fieldId); + }; + Filter.prototype.setAppliedWorksheetsAsync = function (applyToWorksheets) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(applyToWorksheets, 'applyToWorksheets'); + var uniqueWorksheets = new Set(applyToWorksheets); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.setAppliedWorksheetsAsync(this._worksheetName, this._fieldName, this._fieldId, Array.from(uniqueWorksheets)); + }; + return Filter; +}()); +exports.Filter = Filter; +var CategoricalFilter = /** @class */ (function (_super) { + __extends(CategoricalFilter, _super); + function CategoricalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _appliedValues, _isExcludeMode, _isAllSelected) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._appliedValues = _appliedValues; + _this._isExcludeMode = _isExcludeMode; + _this._isAllSelected = _isAllSelected; + return _this; + } + Object.defineProperty(CategoricalFilter.prototype, "isAllSelected", { + get: function () { + return this._isAllSelected; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CategoricalFilter.prototype, "appliedValues", { + get: function () { + return this._appliedValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CategoricalFilter.prototype, "isExcludeMode", { + get: function () { + return this._isExcludeMode; + }, + enumerable: true, + configurable: true + }); + CategoricalFilter.prototype.getDomainAsync = function (domainType) { + if (!domainType) { + domainType = api_external_contract_js_1.FilterDomainType.Relevant; + } + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType'); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getCategoricalDomainAsync(this._worksheetName, this._fieldId, domainType); + }; + return CategoricalFilter; +}(Filter)); +exports.CategoricalFilter = CategoricalFilter; +var HierarchicalDataValue = /** @class */ (function () { + function HierarchicalDataValue(_value, _hierarchicalPath, _level) { + this._value = _value; + this._hierarchicalPath = _hierarchicalPath; + this._level = _level; + } + Object.defineProperty(HierarchicalDataValue.prototype, "value", { + get: function () { + return this._value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalDataValue.prototype, "hierarchicalPath", { + get: function () { + return this._hierarchicalPath; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalDataValue.prototype, "level", { + get: function () { + return this._level; + }, + enumerable: true, + configurable: true + }); + return HierarchicalDataValue; +}()); +exports.HierarchicalDataValue = HierarchicalDataValue; +var HierarchicalLevelDetail = /** @class */ (function () { + function HierarchicalLevelDetail(_name, _levelSelectionState) { + this._name = _name; + this._levelSelectionState = _levelSelectionState; + } + Object.defineProperty(HierarchicalLevelDetail.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalLevelDetail.prototype, "levelSelectionState", { + get: function () { + return this._levelSelectionState; + }, + enumerable: true, + configurable: true + }); + return HierarchicalLevelDetail; +}()); +exports.HierarchicalLevelDetail = HierarchicalLevelDetail; +var HierarchicalFilter = /** @class */ (function (_super) { + __extends(HierarchicalFilter, _super); + function HierarchicalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _dimensionName, _hierarchyCaption, _numberOfLevels, _levelDetails, _appliedValues, _isAllSelected) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._dimensionName = _dimensionName; + _this._hierarchyCaption = _hierarchyCaption; + _this._numberOfLevels = _numberOfLevels; + _this._levelDetails = _levelDetails; + _this._appliedValues = _appliedValues; + _this._isAllSelected = _isAllSelected; + return _this; + } + HierarchicalFilter.prototype.getDomainAsync = function (domainType) { + throw new Error('Method not implemented.'); + }; + Object.defineProperty(HierarchicalFilter.prototype, "dimensionName", { + get: function () { + return this._dimensionName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "hierarchyCaption", { + get: function () { + return this._hierarchyCaption; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "numberOfLevels", { + get: function () { + return this._numberOfLevels; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "levelDetails", { + get: function () { + return this._levelDetails; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "isAllSelected", { + get: function () { + return this._isAllSelected; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "appliedValues", { + get: function () { + return this._appliedValues; + }, + enumerable: true, + configurable: true + }); + return HierarchicalFilter; +}(Filter)); +exports.HierarchicalFilter = HierarchicalFilter; +var RangeFilter = /** @class */ (function (_super) { + __extends(RangeFilter, _super); + function RangeFilter(worksheetName, fieldName, fieldId, filterType, registryId, _min, _max, _includeNullValues) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._min = _min; + _this._max = _max; + _this._includeNullValues = _includeNullValues; + return _this; + } + Object.defineProperty(RangeFilter.prototype, "minValue", { + get: function () { + return this._min; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeFilter.prototype, "maxValue", { + get: function () { + return this._max; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeFilter.prototype, "includeNullValues", { + get: function () { + return this._includeNullValues; + }, + enumerable: true, + configurable: true + }); + RangeFilter.prototype.getDomainAsync = function (domainType) { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + if (!domainType) { + domainType = api_external_contract_js_1.FilterDomainType.Relevant; + } + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType'); + return service.getRangeDomainAsync(this._worksheetName, this._fieldId, domainType); + }; + return RangeFilter; +}(Filter)); +exports.RangeFilter = RangeFilter; +var RelativeDateFilter = /** @class */ (function (_super) { + __extends(RelativeDateFilter, _super); + function RelativeDateFilter(worksheetName, fieldName, fieldId, filterType, registryId, _anchorDate, _periodType, _rangeType, _rangeN) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._anchorDate = _anchorDate; + _this._periodType = _periodType; + _this._rangeType = _rangeType; + _this._rangeN = _rangeN; + return _this; + } + Object.defineProperty(RelativeDateFilter.prototype, "anchorDate", { + get: function () { + return this._anchorDate; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RelativeDateFilter.prototype, "periodType", { + get: function () { + return this._periodType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RelativeDateFilter.prototype, "rangeType", { + get: function () { + return this._rangeType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RelativeDateFilter.prototype, "rangeN", { + get: function () { + return this._rangeN; + }, + enumerable: true, + configurable: true + }); + return RelativeDateFilter; +}(Filter)); +exports.RelativeDateFilter = RelativeDateFilter; +var CategoricalDomain = /** @class */ (function () { + function CategoricalDomain(_values, _domainType) { + this._values = _values; + this._domainType = _domainType; + } + Object.defineProperty(CategoricalDomain.prototype, "values", { + get: function () { + return this._values; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CategoricalDomain.prototype, "type", { + get: function () { + return this._domainType; + }, + enumerable: true, + configurable: true + }); + return CategoricalDomain; +}()); +exports.CategoricalDomain = CategoricalDomain; +var RangeDomain = /** @class */ (function () { + function RangeDomain(_min, _max, _domainType) { + this._min = _min; + this._max = _max; + this._domainType = _domainType; + } + Object.defineProperty(RangeDomain.prototype, "type", { + get: function () { + return this._domainType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeDomain.prototype, "min", { + get: function () { + return this._min; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeDomain.prototype, "max", { + get: function () { + return this._max; + }, + enumerable: true, + configurable: true + }); + return RangeDomain; +}()); +exports.RangeDomain = RangeDomain; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DataTable = /** @class */ (function () { + function DataTable(_data, _columns, _totalRowCount, _isTotalRowCountLimited, _isSummaryData, _marksInfo) { + this._data = _data; + this._columns = _columns; + this._totalRowCount = _totalRowCount; + this._isTotalRowCountLimited = _isTotalRowCountLimited; + this._isSummaryData = _isSummaryData; + this._marksInfo = _marksInfo; + this._name = _isSummaryData ? 'Summary Data Table' : 'Underlying Data Table'; + } + Object.defineProperty(DataTable.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "data", { + get: function () { + return this._data; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "columns", { + get: function () { + return this._columns; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "marksInfo", { + get: function () { + return this._marksInfo; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "totalRowCount", { + get: function () { + return this._totalRowCount; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "isTotalRowCountLimited", { + get: function () { + return this._isTotalRowCountLimited; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "isSummaryData", { + get: function () { + return this._isSummaryData; + }, + enumerable: true, + configurable: true + }); + return DataTable; +}()); +exports.DataTable = DataTable; +var MarkInfo = /** @class */ (function () { + function MarkInfo(_type, _color, _tupleId) { + this._type = _type; + this._color = _color; + this._tupleId = _tupleId; + } + Object.defineProperty(MarkInfo.prototype, "type", { + get: function () { + return this._type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MarkInfo.prototype, "color", { + get: function () { + return this._color; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MarkInfo.prototype, "tupleId", { + get: function () { + return this._tupleId; + }, + enumerable: true, + configurable: true + }); + return MarkInfo; +}()); +exports.MarkInfo = MarkInfo; +var Column = /** @class */ (function () { + function Column(_fieldName, _fieldId, _dataType, _isReferenced, _index) { + this._fieldName = _fieldName; + this._fieldId = _fieldId; + this._dataType = _dataType; + this._isReferenced = _isReferenced; + this._index = _index; + } + Object.defineProperty(Column.prototype, "fieldName", { + get: function () { + return this._fieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "fieldId", { + get: function () { + return this._fieldId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "dataType", { + get: function () { + return this._dataType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "isReferenced", { + get: function () { + return this._isReferenced; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "index", { + get: function () { + return this._index; + }, + enumerable: true, + configurable: true + }); + return Column; +}()); +exports.Column = Column; +var DataValue = /** @class */ (function () { + /* tslint:disable:no-any */ + function DataValue(_value, _nativeValue, _formattedValue) { + this._value = _value; + this._nativeValue = _nativeValue; + this._formattedValue = _formattedValue; + } + Object.defineProperty(DataValue.prototype, "value", { + get: function () { + return this._value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataValue.prototype, "nativeValue", { + get: function () { + return this._nativeValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataValue.prototype, "formattedValue", { + get: function () { + return this._formattedValue; + }, + enumerable: true, + configurable: true + }); + return DataValue; +}()); +exports.DataValue = DataValue; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var DataTableReader = /** @class */ (function () { + function DataTableReader(_id, _totalRowCount, _pageRowCount, _registryId) { + this._id = _id; + this._totalRowCount = _totalRowCount; + this._pageRowCount = _pageRowCount; + this._registryId = _registryId; + this._pageCount = Math.ceil(_totalRowCount / _pageRowCount); + } + Object.defineProperty(DataTableReader.prototype, "totalRowCount", { + get: function () { + return this._totalRowCount; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTableReader.prototype, "pageCount", { + get: function () { + return this._pageCount; + }, + enumerable: true, + configurable: true + }); + DataTableReader.prototype.getPageAsync = function (pageNumber) { + ErrorHelpers_1.ErrorHelpers.verifyRange(pageNumber, 0, this._pageCount); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getPageAsync(this._id, pageNumber, this._pageRowCount); + }; + DataTableReader.prototype.getAllPagesAsync = function (maxRows) { + return __awaiter(this, void 0, void 0, function () { + var firstPage, rowsRequested, pagesRequested, pagesToFetch, isDataLimited, remainingData, i, page, fullData; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.getPageAsync(0)]; + case 1: + firstPage = _b.sent(); + maxRows = maxRows || this.totalRowCount; + rowsRequested = Math.min(maxRows, this.totalRowCount); + pagesRequested = Math.ceil(rowsRequested / this._pageRowCount); + pagesToFetch = Math.min(pagesRequested, 400); + isDataLimited = pagesToFetch < pagesRequested; + remainingData = []; + i = 1; + _b.label = 2; + case 2: + if (!(i < pagesToFetch)) return [3 /*break*/, 5]; + return [4 /*yield*/, this.getPageAsync(i)]; + case 3: + page = _b.sent(); + remainingData.push(page.data); + _b.label = 4; + case 4: + i++; + return [3 /*break*/, 2]; + case 5: + fullData = (_a = firstPage.data).concat.apply(_a, remainingData); + // This slices the array only if maxRows has been set and is less than totalRowCount + fullData.length = rowsRequested; + return [2 /*return*/, { + name: firstPage.name, + data: fullData, + columns: firstPage.columns, + totalRowCount: isDataLimited ? pagesToFetch * this._pageRowCount : rowsRequested, + isTotalRowCountLimited: isDataLimited, + isSummaryData: firstPage.isSummaryData, + }]; + } + }); + }); + }; + DataTableReader.prototype.releaseAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.releaseAsync(this._id); + }; + return DataTableReader; +}()); +exports.DataTableReader = DataTableReader; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Selection Model. + */ +var SelectionModel = /** @class */ (function () { + function SelectionModel() { + } + return SelectionModel; +}()); +exports.SelectionModel = SelectionModel; +/** + * Value based selection model. Meant for hierarchical, range and categorical selections. + */ +var ValueSelectionModel = /** @class */ (function (_super) { + __extends(ValueSelectionModel, _super); + function ValueSelectionModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.selectValues = []; + return _this; + } + return ValueSelectionModel; +}(SelectionModel)); +exports.ValueSelectionModel = ValueSelectionModel; +/** + * Hierarchical value selection model + */ +var HierarchicalSelectionModel = /** @class */ (function (_super) { + __extends(HierarchicalSelectionModel, _super); + function HierarchicalSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return HierarchicalSelectionModel; +}(ValueSelectionModel)); +exports.HierarchicalSelectionModel = HierarchicalSelectionModel; +/** + * Range based value selection model + */ +var RangeSelectionModel = /** @class */ (function (_super) { + __extends(RangeSelectionModel, _super); + function RangeSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return RangeSelectionModel; +}(SelectionModel)); +exports.RangeSelectionModel = RangeSelectionModel; +/** + * Dimension value selection model + */ +var DimensionSelectionModel = /** @class */ (function (_super) { + __extends(DimensionSelectionModel, _super); + function DimensionSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return DimensionSelectionModel; +}(ValueSelectionModel)); +exports.DimensionSelectionModel = DimensionSelectionModel; +/** + * Tuple based selection model + */ +var TupleSelectionModel = /** @class */ (function () { + function TupleSelectionModel() { + this.objectIds = []; + } + return TupleSelectionModel; +}()); +exports.TupleSelectionModel = TupleSelectionModel; +/** + * Container class to populate all the selection models when parsing input + */ +var SelectionModelsContainer = /** @class */ (function () { + function SelectionModelsContainer() { + this.hierModelArr = []; + this.dimModelArr = []; + this.quantModelArr = []; + } + return SelectionModelsContainer; +}()); +exports.SelectionModelsContainer = SelectionModelsContainer; +var SelectTuplesInteractionModel = /** @class */ (function () { + function SelectTuplesInteractionModel(visualIdPresModel, tupleIds, selectOptions, tooltipContext) { + if (tupleIds === void 0) { tupleIds = []; } + this.visualIdPresModel = visualIdPresModel; + this.tupleIds = tupleIds; + this.selectOptions = selectOptions; + this.tooltipContext = tooltipContext; + } + return SelectTuplesInteractionModel; +}()); +exports.SelectTuplesInteractionModel = SelectTuplesInteractionModel; +var HoverTupleInteractionModel = /** @class */ (function () { + function HoverTupleInteractionModel(visualIdPresModel, tupleId, tooltipContext) { + this.visualIdPresModel = visualIdPresModel; + this.tupleId = tupleId; + this.tooltipContext = tooltipContext; + } + return HoverTupleInteractionModel; +}()); +exports.HoverTupleInteractionModel = HoverTupleInteractionModel; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Point.js": +/*!***************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Point.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Point = /** @class */ (function () { + function Point(_x, _y) { + this._x = _x; + this._y = _y; + } + Object.defineProperty(Point.prototype, "x", { + get: function () { + return this._x; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Point.prototype, "y", { + get: function () { + return this._y; + }, + enumerable: true, + configurable: true + }); + return Point; +}()); +exports.Point = Point; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/GetDataService.js": +/*!*********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/GetDataService.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Defines which type of getData call to make. + */ +var GetDataType; +(function (GetDataType) { + GetDataType["Summary"] = "summary"; + GetDataType["Underlying"] = "underlying"; +})(GetDataType = exports.GetDataType || (exports.GetDataType = {})); + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js": +/*!********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ServiceRegistry_1 = __webpack_require__(/*! ./ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var AnimationServiceImpl_1 = __webpack_require__(/*! ./impl/AnimationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js"); +var AnnotationServiceImpl_1 = __webpack_require__(/*! ./impl/AnnotationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js"); +var DataSourceServiceImpl_1 = __webpack_require__(/*! ./impl/DataSourceServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js"); +var ExportServiceImpl_1 = __webpack_require__(/*! ./impl/ExportServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ExportServiceImpl.js"); +var ExternalContextMenuServiceImpl_1 = __webpack_require__(/*! ./impl/ExternalContextMenuServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js"); +var FilterServiceImpl_1 = __webpack_require__(/*! ./impl/FilterServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js"); +var GetDataServiceImpl_1 = __webpack_require__(/*! ./impl/GetDataServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js"); +var NotificationServiceImpl_1 = __webpack_require__(/*! ./impl/NotificationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js"); +var ParametersServiceImpl_1 = __webpack_require__(/*! ./impl/ParametersServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js"); +var SelectionServiceImpl_1 = __webpack_require__(/*! ./impl/SelectionServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js"); +var SizeServiceImpl_1 = __webpack_require__(/*! ./impl/SizeServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js"); +var VisualModelServiceImpl_1 = __webpack_require__(/*! ./impl/VisualModelServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/VisualModelServiceImpl.js"); +var VizServiceImpl_1 = __webpack_require__(/*! ./impl/VizServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js"); +var ZoneServiceImpl_1 = __webpack_require__(/*! ./impl/ZoneServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js"); +function registerAllSharedServices(dispatcher, registryId, platformVersion) { + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnimationServiceImpl_1.AnimationServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new DataSourceServiceImpl_1.DataSourceServiceImpl(dispatcher, registryId, platformVersion)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ExportServiceImpl_1.ExportServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new GetDataServiceImpl_1.GetDataServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new FilterServiceImpl_1.FilterServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new NotificationServiceImpl_1.NotificationServiceImpl(dispatcher)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ParametersServiceImpl_1.ParametersServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SelectionServiceImpl_1.SelectionServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnnotationServiceImpl_1.AnnotationServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ZoneServiceImpl_1.ZoneServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SizeServiceImpl_1.SizeServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new VisualModelServiceImpl_1.VisualModelServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new VizServiceImpl_1.VizServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ExternalContextMenuServiceImpl_1.ExternalContextMenuServiceImpl(dispatcher, registryId)); +} +exports.registerAllSharedServices = registerAllSharedServices; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +window.__tableauApiServiceRegistry = window.__tableauApiServiceRegistry || {}; +var ServiceRegistryImpl = /** @class */ (function () { + function ServiceRegistryImpl() { + this._services = {}; + } + ServiceRegistryImpl.prototype.registerService = function (service) { + this._services[service.serviceName] = service; + }; + ServiceRegistryImpl.prototype.getService = function (serviceName) { + if (!this._services.hasOwnProperty(serviceName)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Service not registered: " + serviceName); + } + return this._services[serviceName]; + }; + return ServiceRegistryImpl; +}()); +/** + * Static class used for getting access to the single instance + * of the ApiServiceRegistry associated with the registryId. + * + * Extensions by design don't need to store/access multiple service registries. Their single instance of ServiceRegistry is + * stored/access with registryId = 0. + * + * Whereas Embedding needs to be aware of which ServiceRegistry to use when there are multiple vizzes embedded. + * An example of how window.__tableauApiServiceRegistry will look when there are two vizzes: { 0 : ServiceRegistry, 1 : ServiceRegistry} + * where registry ID of 0 & 1 refers to viz's internal identifier (which is generated by VizManager). + */ +var ApiServiceRegistry = /** @class */ (function () { + // Private to avoid anyone constructing this + function ApiServiceRegistry() { + } + /** + * Gets the singleton instance of the ServiceRegistry + */ + ApiServiceRegistry.get = function (registryId) { + if (!window.__tableauApiServiceRegistry || !window.__tableauApiServiceRegistry[registryId]) { + ApiServiceRegistry.setInstance(registryId, new ServiceRegistryImpl()); + } + if (!window.__tableauApiServiceRegistry[registryId]) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Service registry failed'); + } + return window.__tableauApiServiceRegistry[registryId]; + }; + /** + * Helper method that sets the service registry instance for the corresponding registryId. Can be used by unit tests + * + * @param {ServiceRegistry} serviceRegistry The new registry + */ + ApiServiceRegistry.setInstance = function (registryId, serviceRegistry) { + if (!window.__tableauApiServiceRegistry) { + window.__tableauApiServiceRegistry = {}; + } + window.__tableauApiServiceRegistry[registryId] = serviceRegistry; + }; + /** + * Only used by unit tests + */ + ApiServiceRegistry.clearRegistry = function () { + window.__tableauApiServiceRegistry = {}; + }; + return ApiServiceRegistry; +}()); +exports.ApiServiceRegistry = ApiServiceRegistry; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js": +/*!********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var AnimationServiceImpl = /** @class */ (function (_super) { + __extends(AnimationServiceImpl, _super); + function AnimationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(AnimationServiceImpl.prototype, "serviceName", { + get: function () { + return "animation-service" /* Animation */; + }, + enumerable: true, + configurable: true + }); + AnimationServiceImpl.prototype.replayAsync = function (replaySpeed) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.ReplaySpeed] = 1.0, + _a); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(replaySpeed, api_external_contract_js_1.ReplaySpeedType, 'ReplaySpeedType'); + parameters[api_internal_contract_js_1.ParameterId.ReplaySpeed] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setReplaySpeedType.convert(replaySpeed); + return this.execute(api_internal_contract_js_1.VerbId.ReplayAnimation, parameters).then(function (response) { + return; + }); + }; + return AnimationServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.AnimationServiceImpl = AnimationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var SelectionModels_1 = __webpack_require__(/*! ../../Models/SelectionModels */ "../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var AnnotationServiceImpl = /** @class */ (function (_super) { + __extends(AnnotationServiceImpl, _super); + function AnnotationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(AnnotationServiceImpl.prototype, "serviceName", { + get: function () { + return "annotation-service" /* Annotation */; + }, + enumerable: true, + configurable: true + }); + /** + * Method to annotate a mark on the given worksheet. + * + * @param visualId + * @param mark + * @param annotationText + */ + AnnotationServiceImpl.prototype.annotateMarkAsync = function (visualId, mark, annotationText) { + var _a; + var selectionModelContainer = this.parseMarkSelectionIds([mark]); + var dummyTargetPoint = { x: 0, y: 0 }; + var formattedText = "" + annotationText + ""; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'annotateMarkAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.AnnotateEnum] = api_internal_contract_js_1.AnnotateEnum.Mark, + _a[api_internal_contract_js_1.ParameterId.TargetPoint] = dummyTargetPoint, + _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection], + _a[api_internal_contract_js_1.ParameterId.FormattedText] = formattedText, + _a); + return this.execute(api_internal_contract_js_1.VerbId.CreateAnnotation, parameters).then(function (response) { + // Expecting an empty model and hence the void response. + return; + }); + }; + /** + * Method to retrieve annotations for the given worksheet. + * + * @param visualId + * @returns {Promise>} + */ + AnnotationServiceImpl.prototype.getAnnotationsAsync = function (visualId) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAnnotationsAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetAnnotations, parameters).then(function (response) { + var annotationsList = response.result; + return _this.annotationFilterMap(annotationsList); + }); + }; + /** + * Method to remove an annotation from a given worksheet. + * + * @param visualId + * @param annotation + */ + AnnotationServiceImpl.prototype.removeAnnotationAsync = function (visualId, annotation) { + var _a; + var selectionModelContainer = this.parseAnnotationSelectionIds([annotation]); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeAnnotationAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection], + _a); + return this.execute(api_internal_contract_js_1.VerbId.RemoveAnnotation, parameters).then(function (response) { + // Expecting an empty model and hence the void response. + return; + }); + }; + /** + * Method to prepare the pres models for selection by MarksInfo + * @param marks + */ + AnnotationServiceImpl.prototype.parseMarkSelectionIds = function (marks) { + var ids = []; + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + marks.forEach(function (mark) { + var tupleId = mark.tupleId; + if (tupleId !== undefined && tupleId !== null && tupleId > 0) { + ids.push(tupleId.toString()); // collect the tuple ids + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid tupleId'); + } + }); + if (ids.length !== 0) { + // tuple ids based selection + var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel(); + tupleSelectionModel.selectionType = 'tuples'; + tupleSelectionModel.objectIds = ids; + selectionModelContainer.selection = tupleSelectionModel; + } + return selectionModelContainer; + }; + /** + * Method to prepare the pres models for selection by MarkAnnotationInfo + * @param marks + */ + AnnotationServiceImpl.prototype.parseAnnotationSelectionIds = function (annotations) { + var ids = []; + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + annotations.forEach(function (annotation) { + var annotationId = annotation.annotationId; + if (annotationId !== undefined && annotationId !== null && annotationId >= 0) { + ids.push(annotationId.toString()); // collect the annotation ids + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid annotationId'); + } + }); + if (ids.length !== 0) { + // annotation ids based selection + var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel(); + tupleSelectionModel.selectionType = 'annotations'; + tupleSelectionModel.objectIds = ids; + selectionModelContainer.selection = tupleSelectionModel; + } + return selectionModelContainer; + }; + /** + * Method to map Annotation to MarkAnnotationInfo + * @param annotation + * @returns {Annotation} + */ + AnnotationServiceImpl.prototype.mapAnnotation = function (annotation) { + return { + annotationHTML: annotation.annotationText, + annotationId: annotation.annotationId, + annotationText: annotation.annotationPlainText, + annotationType: InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.annotationType.convert(annotation.annotateEnum), + tupleId: annotation.tupleId, + }; + }; + /** + * Filter the Annotations to Mark Annotations, and map them to MarkAnnotationInfo + * @param annotations + * @returns {Array} + */ + AnnotationServiceImpl.prototype.annotationFilterMap = function (annotations) { + var _this = this; + var annotationInfos = annotations.map(function (annotation) { return _this.mapAnnotation(annotation); }); + return annotationInfos; + }; + return AnnotationServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.AnnotationServiceImpl = AnnotationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ClientInfoServiceImpl = /** @class */ (function (_super) { + __extends(ClientInfoServiceImpl, _super); + function ClientInfoServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ClientInfoServiceImpl.prototype, "serviceName", { + get: function () { + return "client-info-service" /* ClientInfo */; + }, + enumerable: true, + configurable: true + }); + ClientInfoServiceImpl.prototype.getClientInfoAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.GetEmbeddingClientInfo; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getClientInfoAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + var clientInfo = response.result; + return clientInfo; + }); + }; + return ClientInfoServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ClientInfoServiceImpl = ClientInfoServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalContract = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var DataSource_1 = __webpack_require__(/*! ../../DataSource */ "../api-shared-js/lib/src/ApiShared/DataSource.js"); +var Field_1 = __webpack_require__(/*! ../../Field */ "../api-shared-js/lib/src/ApiShared/Field.js"); +var DataSourceImpl_1 = __webpack_require__(/*! ../../Impl/DataSourceImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js"); +var FieldImpl_1 = __webpack_require__(/*! ../../Impl/FieldImpl */ "../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +exports.SENTINEL_LOGICAL_TABLE_INFO = { + id: InternalContract.ApiShowDataTableSentinel.SingleTableId, + caption: InternalContract.ApiShowDataTableSentinel.SingleTableCaption, +}; +// The minimum platform version when Object Model was supported +var platformVersionObjectModelSupport = { major: 1, minor: 20, fix: 1 }; +var DataSourceServiceImpl = /** @class */ (function (_super) { + __extends(DataSourceServiceImpl, _super); + // Since Object Model is supported since Tableau 2020.2, DataSourceServiceImpl can be initialized with the + // platform version when OM was supported. Once we drop support for Tableau versions <= 2020.1, all additional + // code in here for Object Model can be removed. + function DataSourceServiceImpl(dispatcher, registryId, _platformVersion) { + if (_platformVersion === void 0) { _platformVersion = platformVersionObjectModelSupport; } + var _this = _super.call(this, dispatcher, registryId) || this; + _this._platformVersion = _platformVersion; + return _this; + } + Object.defineProperty(DataSourceServiceImpl.prototype, "serviceName", { + get: function () { + return "data-source-service" /* DataSourceService */; + }, + enumerable: true, + configurable: true + }); + DataSourceServiceImpl.prototype.refreshAsync = function (dataSourceId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'refreshAsync', + _a[api_internal_contract_js_1.ParameterId.DeltaTimeMs] = 0, + _a[api_internal_contract_js_1.ParameterId.ShouldRefreshDS] = true, + _a); + // On server: Not passing the datasource id will refresh all datasources. + if (dataSourceId) { + parameters[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId; + } + return this.execute(api_internal_contract_js_1.VerbId.RefreshDataSource, parameters).then(function (response) { + return; + }); + }; + DataSourceServiceImpl.prototype.getActiveTablesAsync = function (dataSourceId) { + var _a; + var joinParameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getActiveTablesAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a); + // Get the description of the tables used by this connection + return this.execute(api_internal_contract_js_1.VerbId.GetActiveTables, joinParameters).then(function (joinResponse) { + var tableInfos = joinResponse.result; + // getActiveTables is unsupported for cubes and GA. We do not have a connection type property + // available from the platform (intentionally, to reduce code churn as new connections are added). + // Instead,just check if any tables are returned. This array will be empty for any non-table based datasource. + if (tableInfos.tables.length === 0) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedMethodForDataSourceType, "getActiveTables is not supported for: " + dataSourceId); + } + return tableInfos.tables; + }); + }; + DataSourceServiceImpl.prototype.getDataSourcesAsync = function (visualId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourcesAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataSources, parameters).then(function (response) { + var dataSchema = response.result; + return dataSchema; + }); + }; + DataSourceServiceImpl.prototype.getAllDataSourcesAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAllDataSourcesAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetAllDataSources, parameters).then(function (response) { + var dataSchema = response.result; + return dataSchema; + }); + }; + DataSourceServiceImpl.prototype.getConnectionSummariesAsync = function (dataSourceId) { + var _a; + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getConnectionSummariesAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a); + // Get the description of the tables used by this connection + return this.execute(api_internal_contract_js_1.VerbId.GetConnectionDescriptionSummaries, params).then(function (response) { + var descriptionSummaries = response.result; + return descriptionSummaries; + }); + }; + DataSourceServiceImpl.prototype.getFieldAsync = function (globalfieldName) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetFieldAndDataSource; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFieldAsync', + _a[api_internal_contract_js_1.ParameterId.FieldId] = globalfieldName, + _a); + return this.execute(verb, parameters).then(function (response) { + var dataSource = response.result[api_internal_contract_js_1.ParameterId.DataSource]; + var field = response.result[api_internal_contract_js_1.ParameterId.Field]; + return _this.convertField(field, _this.convertDataSource(dataSource)); + }); + }; + DataSourceServiceImpl.prototype.getLogicalTablesAsync = function (dataSourceId) { + var _a; + if (!this.isObjectModelSupportedByPlatform()) { + /** + * This sentinel ID can be passed to datasource.getLogicalTableData. + * Once the desktop is upgraded to a version that supports object model, + * the sentinel ID will automatically fetch the upgraded table. + * */ + return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); }); + } + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTablesAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTables, params).then(function (response) { + return response.result; + }); + }; + DataSourceServiceImpl.prototype.getUnderlyingTablesAsync = function (visualId) { + var _a; + if (!this.isObjectModelSupportedByPlatform()) { + /** + * This sentinel ID can be passed to worksheet.getUnderlyingTableData. + * Once the desktop is upgraded to a version that supports object model, + * the sentinel ID will automatically fetch the upgraded table. + * */ + return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); }); + } + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTablesAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTables, params).then(function (response) { + return response.result; + }); + }; + DataSourceServiceImpl.prototype.convertField = function (field, dataSource) { + return new Field_1.Field(new FieldImpl_1.FieldImpl(field, dataSource)); + }; + DataSourceServiceImpl.prototype.convertDataSource = function (dataSource) { + return new DataSource_1.DataSource(new DataSourceImpl_1.DataSourceImpl(dataSource, this._registryId)); + }; + DataSourceServiceImpl.prototype.isObjectModelSupportedByPlatform = function () { + var platformVersionNoObjectModelSupport = { major: 1, minor: 13, fix: 0 }; + return InternalContract.VersionLessThan(platformVersionNoObjectModelSupport, this._platformVersion); + }; + return DataSourceServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.DataSourceServiceImpl = DataSourceServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ExportServiceImpl.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ExportServiceImpl.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var ExportHelpers_1 = __webpack_require__(/*! ../../Utils/ExportHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ExportHelpers.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ExportServiceImpl = /** @class */ (function (_super) { + __extends(ExportServiceImpl, _super); + function ExportServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExportServiceImpl.prototype, "serviceName", { + get: function () { + return "export-service" /* Export */; + }, + enumerable: true, + configurable: true + }); + ExportServiceImpl.prototype.getExportCrosstabSheetMapAsync = function (currentSheetType) { + var _a; + var verb = api_internal_contract_js_1.VerbId.GetExportCrosstabSheetMap; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getExportCrosstabSheetMapAsync', + _a[api_internal_contract_js_1.ParameterId.CurrentSheetType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.sheetType.convert(currentSheetType), + _a); + return this.execute(verb, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + ExportServiceImpl.prototype.exportCrosstabAsync = function (sheetName, format, exportableWorksheetNames, currentSheetType) { + return __awaiter(this, void 0, void 0, function () { + var sheetNameToIdMap, parameters, verb; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + ErrorHelpers_1.ErrorHelpers.verifySheetName(exportableWorksheetNames, sheetName); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(format, api_external_contract_js_1.CrosstabFileFormat, 'CrosstabFileFormat'); + return [4 /*yield*/, this.getExportCrosstabSheetMapAsync(currentSheetType)]; + case 1: + sheetNameToIdMap = _b.sent(); + if (!sheetNameToIdMap[sheetName]) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'missing sheet doc id from sheetMap'); + } + parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportCrosstabAsync', + _a[api_internal_contract_js_1.ParameterId.SheetIdentifier] = sheetNameToIdMap[sheetName], + _a[api_internal_contract_js_1.ParameterId.SendNotifications] = true, + _a); + switch (format) { + case api_external_contract_js_1.CrosstabFileFormat.CSV: + verb = api_internal_contract_js_1.VerbId.ExportCrosstabCsvDownload; + // CSV only parameter: see browser-clients/export-crosstab-options-dialog repo + parameters[api_internal_contract_js_1.ParameterId.UseTabDelimiters] = true; + break; + case api_external_contract_js_1.CrosstabFileFormat.Excel: + verb = api_internal_contract_js_1.VerbId.ExportCrosstabExcelDownload; + break; + default: + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'unsupported Crosstab file format.'); + } + return [2 /*return*/, this.execute(verb, parameters) + .then(function (response) { + var result = response.result; + return result; + }) + .catch(function () { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.CrosstabCreationError, 'An unexpected error occurred while generating the document.'); + })]; + } + }); + }); + }; + ExportServiceImpl.prototype.exportDataAsync = function (visualId, options) { + var _a; + var _b; + ErrorHelpers_1.ErrorHelpers.verifyExportDataOptions(options); + // Remove any duplicates from the input array + var columnsAsSet = new Set(options.columnsToIncludeById); + var columnsToIncludeById = Array.from(columnsAsSet); + var verb = api_internal_contract_js_1.VerbId.ExportDataDownload; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportDataAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = (_b = options.ignoreAliases, (_b !== null && _b !== void 0 ? _b : false)), + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = columnsToIncludeById, + _a); + return this.execute(verb, parameters) + .then(function () { }) + .catch(function () { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.DataCreationError, 'An unexpected error occurred while generating the document.'); + }); + }; + ExportServiceImpl.prototype.exportPowerPointAsync = function (sheetNames, exportScenarios) { + var _a; + ErrorHelpers_1.ErrorHelpers.verifySheetNamesForPDFAndPPT(sheetNames, exportScenarios); + // Note: the ExportOriginUrl param is listed as optional for the pres layer command we are invoking; however, + // recent changes were made that enforced the use of the empty string when invoking this command with no ExportOriginUrl. + // see browser-clients/export-powerpoint-options-dialog repo. + var verb = api_internal_contract_js_1.VerbId.ExportPowerpointDownload; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportPowerPointAsync', + _a[api_internal_contract_js_1.ParameterId.ExportOriginUrl] = '', + _a[api_internal_contract_js_1.ParameterId.SelectedSheetNames] = sheetNames, + _a); + return this.execute(verb, parameters) + .then(function (response) { + var result = response.result; + return result; + }) + .catch(function () { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.PowerPointCreationError, 'An error occured while attempting to generate the PowerPoint file.'); + }); + }; + ExportServiceImpl.prototype.exportPDFAsync = function (sheetNames, externalExportPdfOptions, exportScenarios) { + return __awaiter(this, void 0, void 0, function () { + var internalExportPdfOptions, verb, parameters; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + ErrorHelpers_1.ErrorHelpers.verifyExportPDFOptions(externalExportPdfOptions); + ErrorHelpers_1.ErrorHelpers.verifySheetNamesForPDFAndPPT(sheetNames, exportScenarios); + return [4 /*yield*/, this.getExportPDFOptionsAsync()]; + case 1: + internalExportPdfOptions = _b.sent(); + ExportHelpers_1.ExportHelpers.updateInternalExportPDFOptions(internalExportPdfOptions, externalExportPdfOptions, sheetNames); + verb = api_internal_contract_js_1.VerbId.ExportPdfDownload; + parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'exportPDFAsync', + _a[api_internal_contract_js_1.ParameterId.ExportPdfOptions] = internalExportPdfOptions, + _a); + return [2 /*return*/, this.execute(verb, parameters) + .then(function (response) { + var result = response.result; + return result; + }) + .catch(function () { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.PDFCreationError, 'Unable to create PDF because something went wrong. Try again.'); + })]; + } + }); + }); + }; + ExportServiceImpl.prototype.getExportPDFOptionsAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.GetExportPdfOptions; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getExportPdfOptionsAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + return ExportServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ExportServiceImpl = ExportServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js": +/*!******************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js ***! + \******************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ExternalContextMenuServiceImpl = /** @class */ (function (_super) { + __extends(ExternalContextMenuServiceImpl, _super); + function ExternalContextMenuServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExternalContextMenuServiceImpl.prototype, "serviceName", { + get: function () { + return "external-context-menu-service" /* ExternalContextMenu */; + }, + enumerable: true, + configurable: true + }); + ExternalContextMenuServiceImpl.prototype.appendContextMenuAsync = function (sheetName, targetMenu, config) { + var _a; + var verb = api_internal_contract_js_1.VerbId.AppendExternalMenuItem; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'appendContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemDisplayName] = config.displayName, + _a); + return this.execute(verb, parameters).then(function (response) { + var newMenuItemId = response.result; + return newMenuItemId; + }); + }; + ExternalContextMenuServiceImpl.prototype.removeContextMenuAsync = function (sheetName, targetMenu, menuItemId) { + var _a; + var verb = api_internal_contract_js_1.VerbId.RemoveExternalMenuItem; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId, + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + ExternalContextMenuServiceImpl.prototype.executeContextMenuAsync = function (sheetName, targetMenu, menuItemId) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ExecuteExternalMenuItem; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'executeContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId, + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + ExternalContextMenuServiceImpl.prototype.renameContextMenuAsync = function (sheetName, targetMenu, menuHeader, menuDescription) { + var _a; + var verb = api_internal_contract_js_1.VerbId.RenameExternalMenu; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'renameContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuHeader] = menuHeader, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuDescription] = menuDescription, + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + return ExternalContextMenuServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ExternalContextMenuServiceImpl = ExternalContextMenuServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalContract = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ApiShared_1 = __webpack_require__(/*! ../../../ApiShared */ "../api-shared-js/lib/src/ApiShared.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var FilterModels_1 = __webpack_require__(/*! ../../Models/FilterModels */ "../api-shared-js/lib/src/ApiShared/Models/FilterModels.js"); +var DataValueFactory_1 = __webpack_require__(/*! ../../Utils/DataValueFactory */ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js"); +var Param_1 = __webpack_require__(/*! ../../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var FilterServiceImpl = /** @class */ (function (_super) { + __extends(FilterServiceImpl, _super); + function FilterServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(FilterServiceImpl.prototype, "serviceName", { + get: function () { + return "filter-service" /* Filter */; + }, + enumerable: true, + configurable: true + }); + FilterServiceImpl.prototype.applyFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ApplyCategoricalFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + if (!Array.isArray(values)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyFilterAsync must be an array'); + } + parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values; + parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType); + parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = + filterOptions === undefined || filterOptions.isExcludeMode === undefined ? false : filterOptions.isExcludeMode; + return this.execute(verb, parameters).then(function (response) { + return fieldName; + }); + }; + FilterServiceImpl.prototype.applyRangeFilterAsync = function (visualId, fieldName, filterOptions) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.ApplyRangeFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRangeFilterAsync', + _a); + if (filterOptions.min !== undefined && filterOptions.min !== null) { + var min = void 0; + if (filterOptions.min instanceof Date) { + min = Param_1.Param.serializeDateForPlatform(filterOptions.min); + } + else { + min = filterOptions.min; + } + parameters[api_internal_contract_js_1.ParameterId.FilterRangeMin] = min; + } + if (filterOptions.max !== undefined && filterOptions.max !== null) { + var max = void 0; + if (filterOptions.max instanceof Date) { + max = Param_1.Param.serializeDateForPlatform(filterOptions.max); + } + else { + max = filterOptions.max; + } + parameters[api_internal_contract_js_1.ParameterId.FilterRangeMax] = max; + } + // The null option is used with min+max for 'include-range' or 'include-range-or-null' + if (filterOptions.nullOption) { + parameters[api_internal_contract_js_1.ParameterId.FilterRangeNullOption] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.nullOptions.convert(filterOptions.nullOption); + } + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + return this.execute(verb, parameters).then(function (response) { + _this.apiFilterHandlerCheckForCommandError(response.result); + return fieldName; + }); + }; + FilterServiceImpl.prototype.applyHierarchicalFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) { + var _a; + var verb = api_internal_contract_js_1.VerbId.HierarchicalFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyHierarchicalFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + var hierarchicalLevels = values.levels; + if (Array.isArray(hierarchicalLevels) && hierarchicalLevels.length > 0) { + parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = hierarchicalLevels; + } + else if (values.length > 0) { + parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values; + } + else { + // the server command expects empty list for clearing the filter + // it also expects eithers FilterLevels or FilterValues to be set + parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = []; + } + parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType); + parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode; + return this.execute(verb, parameters).then(function (response) { + return fieldName; + }); + }; + FilterServiceImpl.prototype.clearFilterAsync = function (visualId, fieldName) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ClearFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + return this.execute(verb, parameters).then(function (resposne) { + return fieldName; + }); + }; + FilterServiceImpl.prototype.applyRelativeDateFilterAsync = function (visualId, fieldName, options) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ApplyRelativeDateFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRelativeDateFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + parameters[api_internal_contract_js_1.ParameterId.PeriodType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.periodType.convert(options.periodType); + parameters[api_internal_contract_js_1.ParameterId.DateRangeType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.dateRangeType.convert(options.rangeType); + if (options.rangeType === api_external_contract_js_1.DateRangeType.LastN || options.rangeType === api_external_contract_js_1.DateRangeType.NextN) { + if (options.rangeN === undefined || options.rangeN === null) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.MissingRangeNForRelativeDateFilters, 'Missing rangeN field for a relative date filter of LASTN or NEXTN.'); + } + parameters[api_internal_contract_js_1.ParameterId.RangeN] = options.rangeN; + } + if (options.anchorDate !== undefined && options.anchorDate !== null) { + parameters[api_internal_contract_js_1.ParameterId.AnchorDate] = this.convertAnchorDate(options.anchorDate); + } + return this.execute(verb, parameters).then(function (response) { + return response.result; + }); + }; + FilterServiceImpl.prototype.getFiltersAsync = function (visualId) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetFilters; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFiltersAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + return this.execute(verb, parameters).then(function (response) { + var filters = response.result; + return _this.convertDomainFilters(filters); + }); + }; + FilterServiceImpl.prototype.getCategoricalDomainAsync = function (worksheetName, fieldId, domainType) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetCategoricalDomain; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCategoricalDomainAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType); + return this.execute(verb, parameters).then(function (response) { + var domain = response.result; + return _this.convertCategoricalDomain(domain, domainType); + }); + }; + FilterServiceImpl.prototype.getRangeDomainAsync = function (worksheetName, fieldId, domainType) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetRangeDomain; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getRangeDomainAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType); + return this.execute(verb, parameters).then(function (response) { + var domain = response.result; + return _this.convertRangeDomain(domain, domainType); + }); + }; + FilterServiceImpl.prototype.getDashboardFiltersAsync = function () { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetDashboardFilters; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDashboardFiltersAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + var filters = response.result; + return _this.convertDomainFilters(filters); + }); + }; + FilterServiceImpl.prototype.applyDashboardFilterAsync = function (fieldName, values, updateType, filterOptions) { + var _a; + var verb = api_internal_contract_js_1.VerbId.DashboardCategoricalFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyDashboardFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values; + parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType); + parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode; + return this.execute(verb, parameters).then(function (response) { + return response.result; + }); + }; + FilterServiceImpl.prototype.getAppliedWorksheetsAsync = function (worksheetName, fieldId) { + var _a; + return __awaiter(this, void 0, void 0, function () { + var sharedFilterModel, worksheetNames; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsync')]; + case 1: + sharedFilterModel = _b.sent(); + worksheetNames = []; + (_a = sharedFilterModel.worksheets) === null || _a === void 0 ? void 0 : _a.map(function (worksheetInfo) { + if (worksheetInfo.isSelected) { + worksheetNames.push(worksheetInfo.worksheetName); + } + }); + return [2 /*return*/, worksheetNames]; + } + }); + }); + }; + FilterServiceImpl.prototype.setAppliedWorksheetsAsync = function (worksheetName, fieldName, fieldId, applyToWorksheets) { + return __awaiter(this, void 0, void 0, function () { + var sharedFilterModel, allowedWorksheets, activeWorksheet, verb, parameters; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsyncInternal')]; + case 1: + sharedFilterModel = _a.sent(); + if (!sharedFilterModel || !sharedFilterModel.worksheets) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'This filter does not apply to multiple worksheets'); + } + allowedWorksheets = []; + activeWorksheet = ''; + sharedFilterModel.worksheets.forEach(function (worksheet) { + // Get active worksheet + if (worksheet.isActive) { + activeWorksheet = worksheet.worksheetName; + } + // Populate allowed worksheets + if (worksheet.isSelected || worksheet.isEnabled) { + allowedWorksheets.push(worksheet.worksheetName); + } + }); + if (activeWorksheet === '') { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'No active worksheet'); + } + if (!applyToWorksheets.includes(activeWorksheet)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, activeWorksheet + " must be included in the applied worksheets"); + } + applyToWorksheets.forEach(function (sheet) { + // check if it's present within compatible sheets + if (!allowedWorksheets.includes(sheet)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, "The field " + fieldName + " isn't applicable to the worksheet " + sheet); + } + }); + verb = api_internal_contract_js_1.VerbId.ChangeSharedFilter; + parameters = {}; + parameters[api_internal_contract_js_1.ParameterId.FunctionName] = 'setAppliedWorksheetsAsync'; + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + parameters[api_internal_contract_js_1.ParameterId.SharedFilterSheets] = applyToWorksheets; + return [2 /*return*/, this.execute(verb, parameters).then(function (response) { + return applyToWorksheets; + })]; + } + }); + }); + }; + // Helper Methods + FilterServiceImpl.prototype.executeGetAppliedWorksheets = function (worksheetName, fieldId, telemetryFunctionName) { + var verb = api_internal_contract_js_1.VerbId.GetSharedFilter; + var parameters = {}; + parameters[api_internal_contract_js_1.ParameterId.FunctionName] = telemetryFunctionName; + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + return this.execute(verb, parameters).then(function (response) { + var sharedFilterModel = response.result; + return sharedFilterModel; + }); + }; + FilterServiceImpl.prototype.convertDomainFilters = function (domainFilters) { + var _this = this; + var filters = []; + domainFilters.forEach(function (domainFilter) { + switch (domainFilter.filterType) { + case api_internal_contract_js_1.FilterType.Categorical: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertCategoricalFilter(filter)); + } + else { + throw new Error('Invalid Categorical Filter'); + } + break; + } + case api_internal_contract_js_1.FilterType.Hierarchical: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertHierarchicalFilter(filter)); + } + else { + throw new Error('Invalid Hierarchical Filter'); + } + break; + } + case api_internal_contract_js_1.FilterType.Range: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertRangeFilter(filter)); + } + else { + throw new Error('Invalid Range Filter'); + } + break; + } + case api_internal_contract_js_1.FilterType.RelativeDate: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertRelativeDateFilter(filter)); + } + else { + throw new Error('Invalid Relative Date Filter'); + } + break; + } + default: { + break; + } + } + }); + return filters; + }; + FilterServiceImpl.prototype.convertCategoricalFilter = function (domainFilter) { + var appliedValues = domainFilter.values.map(function (dv) { + return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(dv); + }); + return new FilterModels_1.CategoricalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Categorical, this._registryId, appliedValues, domainFilter.isExclude, domainFilter.isAllSelected); + }; + FilterServiceImpl.prototype.convertHierarchicalFilter = function (domainFilter) { + var appliedValues = domainFilter.values.map(function (hierarchicalDataValue) { + return new FilterModels_1.HierarchicalDataValue(DataValueFactory_1.DataValueFactory.MakeFilterDataValue(hierarchicalDataValue.value), hierarchicalDataValue.hierarchicalPath, hierarchicalDataValue.level); + }); + var levelDetails = domainFilter.levelInfo.map(function (aLevel) { + return new FilterModels_1.HierarchicalLevelDetail(aLevel.name, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.hierarchicalLevelSelectionState.convert(aLevel.levelSelectionState)); + }); + return new FilterModels_1.HierarchicalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Hierarchical, this._registryId, domainFilter.dimensionName, domainFilter.hierarchyCaption, domainFilter.levels, levelDetails, appliedValues, domainFilter.isAllSelected); + }; + FilterServiceImpl.prototype.convertRangeFilter = function (domainFilter) { + var minValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.min); + var maxValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.max); + return new FilterModels_1.RangeFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Range, this._registryId, minValue, maxValue, domainFilter.includeNullValues); + }; + FilterServiceImpl.prototype.convertRelativeDateFilter = function (domainFilter) { + var anchorDateValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.anchorDate); + return new FilterModels_1.RelativeDateFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_external_contract_js_1.FilterType.RelativeDate, this._registryId, anchorDateValue, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(domainFilter.periodType), InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateRangeType.convert(domainFilter.rangeType), domainFilter.rangeN); + }; + FilterServiceImpl.prototype.convertCategoricalDomain = function (domain, domainType) { + var values = domain.values.map(function (domainDv) { + return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainDv); + }); + return new FilterModels_1.CategoricalDomain(values, domainType); + }; + FilterServiceImpl.prototype.convertRangeDomain = function (domain, domainType) { + var min = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.min); + var max = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.max); + return new FilterModels_1.RangeDomain(min, max, domainType); + }; + FilterServiceImpl.prototype.convertAnchorDate = function (anchorDate) { + // Converts a Date object into a string format that the server expects for date/time values. + // If anchorDate doesn't represent a valid Date object, any of these would be NaN. + var year = anchorDate.getUTCFullYear(); + var month = anchorDate.getUTCMonth() + 1; + var day = anchorDate.getUTCDate(); + var hh = anchorDate.getUTCHours(); + var mm = anchorDate.getUTCMinutes(); + var sec = anchorDate.getUTCSeconds(); + if (isNaN(year) || isNaN(month) || isNaN(day) || isNaN(hh) || isNaN(mm) || isNaN(sec)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.InvalidDateParameter, 'Invalid date parameter: anchorDate'); + } + var result = year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + sec; + return result; + }; + FilterServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) { + if (!serverPm[InternalContract.ParameterId.ParameterError]) { + return; + } + if (serverPm[InternalContract.ParameterId.InvalidFieldCaption]) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldName, serverPm[InternalContract.ParameterId.InvalidFieldCaption]); + } + if (serverPm[InternalContract.ParameterId.InvalidValues]) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldValue, serverPm[InternalContract.ParameterId.InvalidValues]); + } + if (serverPm[InternalContract.ParameterId.InvalidAggFieldName]) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidAggregationFieldName, serverPm[InternalContract.ParameterId.InvalidAggFieldName]); + } + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.ServerError, 'Server Error'); + }; + return FilterServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.FilterServiceImpl = FilterServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js": +/*!******************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js ***! + \******************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var uuid_1 = __webpack_require__(/*! uuid */ "../api-shared-js/node_modules/uuid/dist/esm-browser/index.js"); +var ApiShared_1 = __webpack_require__(/*! ../../../ApiShared */ "../api-shared-js/lib/src/ApiShared.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var GetDataModels_1 = __webpack_require__(/*! ../../Models/GetDataModels */ "../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js"); +var GetDataTableReaderModels_1 = __webpack_require__(/*! ../../Models/GetDataTableReaderModels */ "../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js"); +var DataValueFactory_1 = __webpack_require__(/*! ../../Utils/DataValueFactory */ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js"); +var GetDataService_1 = __webpack_require__(/*! ../GetDataService */ "../api-shared-js/lib/src/ApiShared/Services/GetDataService.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var GetDataServiceImpl = /** @class */ (function (_super) { + __extends(GetDataServiceImpl, _super); + function GetDataServiceImpl() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // The extension/embedding instance uses the same cache for all DataTableReaders. + _this.viewDataTableCacheId = uuid_1.v4(); + return _this; + } + Object.defineProperty(GetDataServiceImpl.prototype, "serviceName", { + get: function () { + return "get-data-service" /* GetData */; + }, + enumerable: true, + configurable: true + }); + GetDataServiceImpl.prototype.getMaxRowLimit = function () { + return 10000; + }; + GetDataServiceImpl.prototype.getViewDataTableCacheId = function () { + return this.viewDataTableCacheId; + }; + GetDataServiceImpl.prototype.getLimitedMaxRows = function (requestedRows) { + var rowCountLimit = this.getMaxRowLimit() + 1; + return requestedRows > 0 && requestedRows < rowCountLimit ? requestedRows : rowCountLimit; + }; + GetDataServiceImpl.prototype.getUnderlyingDataAsync = function (visualId, getType, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) { + var _a; + var _this = this; + // Create all of our parameters + var summaryData = getType === GetDataService_1.GetDataType.Summary; + var functionName = summaryData ? 'getSummaryDataAsync' : 'getUnderlyingDataAsync'; + var verb = summaryData ? api_internal_contract_js_1.VerbId.GetDataSummaryData : api_internal_contract_js_1.VerbId.GetUnderlyingData; + var requestMaxRows = verb === api_internal_contract_js_1.VerbId.GetUnderlyingData ? this.getLimitedMaxRows(maxRows) : maxRows; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = functionName, + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases; + parameters[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection; + parameters[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns; + parameters[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById); + parameters[api_internal_contract_js_1.ParameterId.MaxRows] = requestMaxRows; + parameters[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption); + return this.execute(verb, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, responseData.isSummary); + }); + }; + GetDataServiceImpl.prototype.getSummaryDataReaderAsync = function (visualId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryDataReaderAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataSummaryDataReader, parameters).then(function (response) { + var responseData = response.result; + return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId); + }); + }; + GetDataServiceImpl.prototype.getSummaryColumnsInfoAsync = function (visualId) { + var _a; + // Create all the parameters for GetDataType of Summary with 1 row, and only native values + // Then return just the columns + var verb = api_internal_contract_js_1.VerbId.GetDataSummaryData; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryColumnsInfoAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = true, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = true, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = true, + _a[api_internal_contract_js_1.ParameterId.MaxRows] = 1, + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly, + _a); + return this.execute(verb, parameters).then(function (response) { + var underlyingDataTable = response.result; + var dataTable = underlyingDataTable.data; + var columns = dataTable.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); }); + return columns; + }); + }; + GetDataServiceImpl.prototype.getSelectedMarksAsync = function (visualId) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSelectedMarksAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetSelectedMarks, parameters).then(function (response) { + var responseData = response.result; + return { + data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }), + }; + }); + }; + GetDataServiceImpl.prototype.getHighlightedMarksAsync = function (visualId) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getHighlightedMarksAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetHighlightedMarks, parameters).then(function (response) { + var responseData = response.result; + return { + data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }), + }; + }); + }; + GetDataServiceImpl.prototype.getDataSourceDataAsync = function (dataSourceId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourceDataAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows), + _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = this.verifyIncludeColumnArray(columnsToInclude), + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataSourceData, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, false); + }); + }; + GetDataServiceImpl.prototype.getLogicalTableDataAsync = function (datasourceId, logicalTableId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataAsync', + _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = columnsToInclude, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableData, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, false); + }); + }; + GetDataServiceImpl.prototype.getLogicalTableDataReaderAsync = function (datasourceId, logicalTableId, pageRowCount, ignoreAliases, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataReaderAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableDataReader, parameters).then(function (response) { + var responseData = response.result; + return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId); + }); + }; + GetDataServiceImpl.prototype.getUnderlyingTableDataAsync = function (visualId, logicalTableId, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableData, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, false); + }); + }; + GetDataServiceImpl.prototype.getUnderlyingTableDataReaderAsync = function (visualId, logicalTableId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataReaderAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableDataReader, parameters).then(function (response) { + var responseData = response.result; + return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId); + }); + }; + GetDataServiceImpl.prototype.getPageAsync = function (tableId, pageNumber, pageSize) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getPageAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId, + _a[api_internal_contract_js_1.ParameterId.DataRowIndex] = pageNumber * pageSize, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataTableReaderPage, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsPage(responseData, tableId === GetDataServiceImpl.summaryTableId ? true : false); + }); + }; + GetDataServiceImpl.prototype.releaseAsync = function (tableId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'release', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ReleaseDataTableReader, parameters).then(function (response) { + return; + }); + }; + GetDataServiceImpl.prototype.verifyIncludeColumnArray = function (columns) { + // columns must be a valid array + if (!Array.isArray(columns)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'columnsToInclude and columnsToIncludeById must be valid arrays'); + } + // Remove any duplicates from the input array + var columnsAsSet = new Set(columns); + return Array.from(columnsAsSet); + }; + GetDataServiceImpl.prototype.processResultsTable = function (responseData, isSummary) { + var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); }); + // TODO This should be controlled by a flag indicating whether this api will respond marks info or not + var marks; + if (responseData.marks) { + marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); }); + } + // Limit+1 is our sentinal that underlying data contains more rows than user is allowed to fetch. + // Remove the last element so we always return MaxRowLimit + var isTotalRowCountLimited = isSummary === false && responseData.dataTable.length === this.getMaxRowLimit() + 1; + if (isTotalRowCountLimited) { + responseData.dataTable.length -= 1; + } + var table = responseData.dataTable.map(function (row) { + return row.map(function (cell, index) { + return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType); + }); + }); + if (marks) { + return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary, marks); + } + return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary); + }; + GetDataServiceImpl.prototype.processResultsPage = function (responseData, isSummary) { + var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); }); + var marks; + if (responseData.marks) { + marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); }); + } + var table = responseData.dataTable.map(function (row) { + return row.map(function (cell, index) { + return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType); + }); + }); + if (marks) { + return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary, marks); + } + return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary); + }; + GetDataServiceImpl.summaryTableId = ''; + return GetDataServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.GetDataServiceImpl = GetDataServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js": +/*!***********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js ***! + \***********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var NotificationServiceImplBase_1 = __webpack_require__(/*! ./NotificationServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js"); +var NotificationServiceImpl = /** @class */ (function (_super) { + __extends(NotificationServiceImpl, _super); + function NotificationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(NotificationServiceImpl.prototype, "serviceName", { + get: function () { + return "notification-service" /* Notification */; + }, + enumerable: true, + configurable: true + }); + return NotificationServiceImpl; +}(NotificationServiceImplBase_1.NotificationServiceImplBase)); +exports.NotificationServiceImpl = NotificationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js": +/*!***************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Registration = /** @class */ (function () { + function Registration(_filterFn, _callbackFn) { + this._filterFn = _filterFn; + this._callbackFn = _callbackFn; + // Nothing Here + } + Registration.prototype.onNotification = function (notificationModel) { + if (this._filterFn(notificationModel)) { + this._callbackFn(notificationModel); + } + }; + return Registration; +}()); +exports.Registration = Registration; +var NotificationServiceImplBase = /** @class */ (function () { + function NotificationServiceImplBase(dispatcher) { + this.dispatcher = dispatcher; + this._handlers = {}; + this.dispatcher.registerNotificationHandler(this.onNotification.bind(this)); + } + NotificationServiceImplBase.prototype.registerHandler = function (id, filterFn, handler) { + var _this = this; + var handlers = this._handlers[id] || new Array(); + var registration = new Registration(filterFn, handler); + handlers.push(registration); + this._handlers[id] = handlers; + return function () { return _this.removeRegistration(id, registration); }; + }; + NotificationServiceImplBase.prototype.hasHandlersForNotificationType = function (id) { + // eslint-disable-next-line no-prototype-builtins + return this._handlers.hasOwnProperty(id); + }; + NotificationServiceImplBase.prototype.onNotification = function (notification) { + if (!this.hasHandlersForNotificationType(notification.notificationId)) { + return; + } + // Go through and check for all the handlers of this particular notification + this._handlers[notification.notificationId].forEach(function (h) { return h.onNotification(notification.data); }); + }; + NotificationServiceImplBase.prototype.removeRegistration = function (id, registration) { + if (!this.hasHandlersForNotificationType(id)) { + return; + } + this._handlers[id] = this._handlers[id].filter(function (reg) { return reg !== registration; }); + }; + return NotificationServiceImplBase; +}()); +exports.NotificationServiceImplBase = NotificationServiceImplBase; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ParameterImpl_1 = __webpack_require__(/*! ../../Impl/ParameterImpl */ "../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ParametersServiceImpl = /** @class */ (function (_super) { + __extends(ParametersServiceImpl, _super); + function ParametersServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ParametersServiceImpl.prototype, "serviceName", { + get: function () { + return "parameters-service" /* Parameters */; + }, + enumerable: true, + configurable: true + }); + ParametersServiceImpl.prototype.getParametersForSheetAsync = function (sheetPath) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync', + _a[api_internal_contract_js_1.ParameterId.SheetPath] = sheetPath, + _a); + return this.getParametersAsync(parameters); + }; + ParametersServiceImpl.prototype.getAllParametersAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync', + _a); + return this.getParametersAsync(parameters); + }; + ParametersServiceImpl.prototype.getParametersAsync = function (inputParameters) { + var _this = this; + return this.execute(api_internal_contract_js_1.VerbId.GetParametersForSheet, inputParameters).then(function (response) { + var result = response.result; + return result.map(function (parameterInfo) { + return new ParameterImpl_1.ParameterImpl(parameterInfo, _this._registryId); + }); + }); + }; + ParametersServiceImpl.prototype.changeParameterValueAsync = function (fieldName, newValue) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeParameterValueAsync', + _a[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName, + _a[api_internal_contract_js_1.ParameterId.ParameterValue] = newValue, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ChangeParameterValue, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + ParametersServiceImpl.prototype.findParameterByNameAsync = function (name) { + return this.findParameterAsync(name, undefined); + }; + ParametersServiceImpl.prototype.findParameterByGlobalFieldNameAsync = function (fieldName) { + return this.findParameterAsync(undefined, fieldName); + }; + ParametersServiceImpl.prototype.findParameterAsync = function (name, fieldName) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'findParameterAsync', + _a); + if (name !== undefined) { + parameters[api_internal_contract_js_1.ParameterId.ParameterCaption] = name; + } + else if (fieldName !== undefined) { + parameters[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName; + } + else { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'name or fieldName must be provided to find parameter'); + } + return this.execute(api_internal_contract_js_1.VerbId.FindParameter, parameters).then(function (response) { + var instanceOfParameterInfo = function (object) { + return 'fieldName' in object; + }; + // We need to check to see if we got a valid response back again + if (instanceOfParameterInfo(response.result)) { + var result = response.result; + return new ParameterImpl_1.ParameterImpl(result, _this._registryId); + } + else { + return undefined; + } + }); + }; + return ParametersServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ParametersServiceImpl = ParametersServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js": +/*!********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var SelectionModels_1 = __webpack_require__(/*! ../../Models/SelectionModels */ "../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var Param_1 = __webpack_require__(/*! ../../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var SelectionServiceImpl = /** @class */ (function (_super) { + __extends(SelectionServiceImpl, _super); + function SelectionServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(SelectionServiceImpl.prototype, "serviceName", { + get: function () { + return "selection-service" /* Selection */; + }, + enumerable: true, + configurable: true + }); + /** + * Method to clear all the selected marks for the given worksheet. + * + * @param visualId + */ + SelectionServiceImpl.prototype.clearSelectedMarksAsync = function (visualId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearSelectedMarksAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ClearSelectedMarks, parameters).then(function (response) { + return; // Expecting an empty model and hence the void response. + }); + }; + /** + * Method to select marks for the given worksheet. + * + * @param visualId + * @param selectionCriteria + * @param selectionUpdateType + */ + SelectionServiceImpl.prototype.selectMarksByValueAsync = function (visualId, selectionCriterias, selectionUpdateType) { + var _a; + var _this = this; + if (selectionCriterias.length === 0) { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Selection criteria missing for selecting marks by value'); + } + var selectionType = this.validateSelectionUpdateType(selectionUpdateType); + var selectionModelContainer = this.parseSelectionMarks(selectionCriterias); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByValueAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType, + _a); + if (selectionModelContainer.hierModelArr && selectionModelContainer.hierModelArr.length) { + parameters[api_internal_contract_js_1.ParameterId.HierValSelectionModels] = selectionModelContainer.hierModelArr; + } + if (selectionModelContainer.quantModelArr && selectionModelContainer.quantModelArr.length) { + parameters[api_internal_contract_js_1.ParameterId.QuantRangeSelectionModels] = selectionModelContainer.quantModelArr; + } + if (selectionModelContainer.dimModelArr && selectionModelContainer.dimModelArr.length) { + parameters[api_internal_contract_js_1.ParameterId.DimValSelectionModels] = selectionModelContainer.dimModelArr; + } + return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) { + _this.apiFilterHandlerCheckForCommandError(response.result); + return; + }); + }; + /** + * Method to execute hover actions and render tooltip for a given tuple representing a mark in the visualization. + * If the tooltip parameter is included it will show the tooltip on hover. If not, no tooltip is shown. + * + * @param visualId + * @param hoveredTuple + * @param tooltip + * @returns empty promise that resolves when the extension host has successfully been informed of the request and rejects on error + */ + SelectionServiceImpl.prototype.hoverTupleAsync = function (visualId, hoveredTuple, tooltip) { + var _a; + var interactionModel = new SelectionModels_1.HoverTupleInteractionModel(visualId, hoveredTuple, tooltip); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'hoverTupleAsync', + _a[api_internal_contract_js_1.ParameterId.HoverTupleInteraction] = interactionModel, + _a); + return this.execute(api_internal_contract_js_1.VerbId.RaiseHoverTupleNotification, parameters).then(function (response) { + return; + }); + }; + /** + * Method to modify selection, execute select actions and render tooltip for a given list of tuples representing a mark or marks in the visualization. + * If the tooltip parameter is included it will show the tooltip on select. If not, no tooltip is shown. + * + * @param visualId + * @param selectedTuples + * @param selectOption + * @param tooltip + * @returns empty promise that resolves when the extension host has successfully been informed of the request and rejects on error + */ + SelectionServiceImpl.prototype.selectTuplesAsync = function (visualId, selectedTuples, selectOption, tooltip) { + var _a; + var option = this.validateSelectOption(selectOption); + var interactionModel = new SelectionModels_1.SelectTuplesInteractionModel(visualId, selectedTuples, option, tooltip); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectTuplesAsync', + _a[api_internal_contract_js_1.ParameterId.SelectTuplesInteraction] = interactionModel, + _a); + return this.execute(api_internal_contract_js_1.VerbId.RaiseSelectTuplesNotification, parameters).then(function (response) { + return; + }); + }; + SelectionServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) { + if (!serverPm[api_internal_contract_js_1.ParameterId.ParameterError]) { + return; + } + if (serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionFieldName, serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]); + } + if (serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionValue, serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]); + } + if (serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionDate, serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]); + } + }; + /** + * Method to select marks for the given worksheet. + * + * @param visualId + * @param MarkInfo + * @param selectionUpdateType + */ + SelectionServiceImpl.prototype.selectMarksByIdAsync = function (visualId, marks, selectionUpdateType) { + var _a; + if (marks.length === 0) { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Marks info missing for selecting marks by Id'); + } + var selectionType = this.validateSelectionUpdateType(selectionUpdateType); + var selectionModelContainer = this.parseSelectionIds(marks); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByIdAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType, + _a[api_internal_contract_js_1.ParameterId.Selection] = selectionModelContainer.selection, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) { + // Expecting an empty model and hence the void response. + return; + // TODO Investigate the error response with multiple output params and throw error accordingly. + }); + }; + /** + * Method to prepare the pres models for selection by MarksInfo + * @param marks + */ + SelectionServiceImpl.prototype.parseSelectionIds = function (marks) { + var ids = []; + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + for (var i = 0; i < marks.length; i++) { + var tupleId = marks[i].tupleId; + if (tupleId !== undefined && tupleId !== null) { + // If tuple id is provided use that instead of pair + ids.push(tupleId.toString()); // collect the tuple ids + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'tupleId parsing error'); + } + } + if (ids.length !== 0) { + // tuple ids based selection + var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel(); + tupleSelectionModel.selectionType = 'tuples'; + tupleSelectionModel.objectIds = ids; + selectionModelContainer.selection = tupleSelectionModel; + } + return selectionModelContainer; + }; + /** + * Method to prepare the pres models for selection by values. + * + * Supports 3 types for selection: + * 1) Hierarchical value based selection + * 2) Range value based selection + * 3) Dimension value based selection + * + * @param marks + */ + SelectionServiceImpl.prototype.parseSelectionMarks = function (selectionCriterias) { + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + for (var i = 0; i < selectionCriterias.length; i++) { + var st = selectionCriterias[i]; + if (!(st.fieldName && st.value !== undefined && st.value !== null)) { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'Selection Criteria parsing error'); + } + var catRegex = new RegExp('([[A-Za-z0-9]+]).*', 'g'); + var rangeOption = st.value; + if (catRegex.test(st.fieldName)) { + // Hierarchical value selection + var hierModel = this.addToParamsList(st.fieldName, st.value); + selectionModelContainer.hierModelArr.push(hierModel); + } + else if (rangeOption.min !== undefined && rangeOption.max !== undefined) { + // Range value selection + var quantModel = this.addToRangeParamsList(st.fieldName, rangeOption); + selectionModelContainer.quantModelArr.push(quantModel); + } + else { + // Dimension value selection + var dimModel = this.addToParamsList(st.fieldName, st.value); + selectionModelContainer.dimModelArr.push(dimModel); + } + } + return selectionModelContainer; + }; + /** + * Method to transform the key value pair into value based pres model object. + * + * @param valueSelectionModel + * @param fieldName + * @param value + */ + SelectionServiceImpl.prototype.addToParamsList = function (fieldName, value) { + var valueSelectionModel = new SelectionModels_1.ValueSelectionModel(); + var markValues = []; + if (value instanceof Array) { + var valueArr = value; + for (var i = 0; i < valueArr.length; i++) { + markValues.push(Param_1.Param.serializeParameterValue(valueArr[i])); + } + } + else { + markValues.push(Param_1.Param.serializeParameterValue(value)); + } + valueSelectionModel.qualifiedFieldCaption = fieldName; + valueSelectionModel.selectValues = markValues; + return valueSelectionModel; + }; + /** + * Method to transform the key value pair into range based selection pres model. + * + * TODO: Need to handle the parsing of date type values. + * + * @param valueSelectionModel + * @param fieldName + * @param value + */ + SelectionServiceImpl.prototype.addToRangeParamsList = function (fieldName, value) { + var rangeSelectionModel = new SelectionModels_1.RangeSelectionModel(); + rangeSelectionModel.qualifiedFieldCaption = fieldName; + if (value.max !== undefined && value.max !== null) { + rangeSelectionModel.maxValue = Param_1.Param.serializeParameterValue(value.max); + } + if (value.min !== undefined && value.min !== null) { + rangeSelectionModel.minValue = Param_1.Param.serializeParameterValue(value.min); + } + rangeSelectionModel.included = this.validateNullOptionType(value.nullOption); + return rangeSelectionModel; + }; + /** + * Method to validate the selection update type. + * + * @param selectionUpdateType + */ + SelectionServiceImpl.prototype.validateSelectionUpdateType = function (selectionUpdateType) { + if (selectionUpdateType === Contract.SelectionUpdateType.Replace) { + return api_internal_contract_js_1.SelectionUpdateType.Replace; + } + else if (selectionUpdateType === Contract.SelectionUpdateType.Add) { + return api_internal_contract_js_1.SelectionUpdateType.Add; + } + else if (selectionUpdateType === Contract.SelectionUpdateType.Remove) { + return api_internal_contract_js_1.SelectionUpdateType.Remove; + } + return api_internal_contract_js_1.SelectionUpdateType.Replace; + }; + /** + * Method to validate the include type for range selection. + * + * @param nullOption + */ + SelectionServiceImpl.prototype.validateNullOptionType = function (nullOption) { + if (nullOption) { + if (nullOption === Contract.FilterNullOption.NullValues) { + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNull; + } + else if (nullOption === Contract.FilterNullOption.NonNullValues) { + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNonNull; + } + else if (nullOption === Contract.FilterNullOption.AllValues) { + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll; + } + } + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll; + }; + /** + * Method to validate the select option. + * + * @param selectOption + */ + SelectionServiceImpl.prototype.validateSelectOption = function (selectOption) { + if (selectOption === Contract.SelectOptions.Simple) { + return api_internal_contract_js_1.SelectOptions.Simple; + } + else if (selectOption === Contract.SelectOptions.Toggle) { + return api_internal_contract_js_1.SelectOptions.Toggle; + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Only simple and toggle select options are currently supported'); + } + }; + return SelectionServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.SelectionServiceImpl = SelectionServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js": +/*!***************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var EnumConverter_1 = __webpack_require__(/*! ../../Utils/EnumConverter */ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js"); +/** + * Each ServceImpl should extend this base class for the sake of + * proper error handling. This base handles the conversion + * from internal errors to external errors that we throw to developers + */ +var ServiceImplBase = /** @class */ (function () { + function ServiceImplBase(_dispatcher, _registryId) { + this._dispatcher = _dispatcher; + this._registryId = _registryId; + } + ServiceImplBase.prototype.execute = function (verb, params) { + return this._dispatcher.execute(verb, params).catch(function (error) { + // Any internal error that comes from the dispatcher should be converted + // to an external error using the enum mapper for error codes. + var internalError = error; + var externalErrorCode = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.errorCode.convert(internalError.errorCode, EnumConverter_1.ShouldThrow.No); + throw new TableauError_1.TableauError(externalErrorCode, internalError.message); + }); + }; + return ServiceImplBase; +}()); +exports.ServiceImplBase = ServiceImplBase; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js": +/*!***************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js ***! + \***************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var SizeServiceImpl = /** @class */ (function (_super) { + __extends(SizeServiceImpl, _super); + function SizeServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(SizeServiceImpl.prototype, "serviceName", { + get: function () { + return "size-service" /* Size */; + }, + enumerable: true, + configurable: true + }); + SizeServiceImpl.prototype.changeSizeAsync = function (name, newSize) { + var _a; + var _b, _c, _d, _e; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeSizeAsync', + _a[api_internal_contract_js_1.ParameterId.SheetName] = name, + _a[api_internal_contract_js_1.ParameterId.MinHeight] = ((_b = newSize.minSize) === null || _b === void 0 ? void 0 : _b.height) || 0, + _a[api_internal_contract_js_1.ParameterId.MinWidth] = ((_c = newSize.minSize) === null || _c === void 0 ? void 0 : _c.width) || 0, + _a[api_internal_contract_js_1.ParameterId.MaxHeight] = ((_d = newSize.maxSize) === null || _d === void 0 ? void 0 : _d.height) || 0, + _a[api_internal_contract_js_1.ParameterId.MaxWidth] = ((_e = newSize.maxSize) === null || _e === void 0 ? void 0 : _e.width) || 0, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SetSheetSize, parameters).then(function (_response) { + return; + }); + }; + return SizeServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.SizeServiceImpl = SizeServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js": +/*!**************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js ***! + \**************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var StoryActivationServiceImpl = /** @class */ (function (_super) { + __extends(StoryActivationServiceImpl, _super); + function StoryActivationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(StoryActivationServiceImpl.prototype, "serviceName", { + get: function () { + return "story-activation-service" /* StoryActivation */; + }, + enumerable: true, + configurable: true + }); + StoryActivationServiceImpl.prototype.activateNextStoryPointAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.ActivateNextStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateNextStoryPointAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + StoryActivationServiceImpl.prototype.activatePreviousStoryPointAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.ActivatePreviousStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activatePreviousStoryPointAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + StoryActivationServiceImpl.prototype.activateStoryPointAsync = function (index) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ActivateStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateStoryPointAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index; + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + StoryActivationServiceImpl.prototype.revertStoryPointAsync = function (index) { + var _a; + var verb = api_internal_contract_js_1.VerbId.RevertStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'revertStoryPointAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index; + return this.execute(verb, parameters).then(function (response) { + return response.result; + }); + }; + return StoryActivationServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.StoryActivationServiceImpl = StoryActivationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/VisualModelServiceImpl.js": +/*!**********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/VisualModelServiceImpl.js ***! + \**********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var VisualModelServiceImpl = /** @class */ (function (_super) { + __extends(VisualModelServiceImpl, _super); + function VisualModelServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(VisualModelServiceImpl.prototype, "serviceName", { + get: function () { + return "visual-model-service" /* VisualModel */; + }, + enumerable: true, + configurable: true + }); + VisualModelServiceImpl.prototype.getVisualSpecificationAsync = function (visualId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getVisualSpecificationAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = visualId.worksheet, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetVisualSpecification, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + return VisualModelServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.VisualModelServiceImpl = VisualModelServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js": +/*!**************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js ***! + \**************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var CustomViewImpl_1 = __webpack_require__(/*! ../../Impl/CustomViewImpl */ "../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var VizServiceImpl = /** @class */ (function (_super) { + __extends(VizServiceImpl, _super); + function VizServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(VizServiceImpl.prototype, "serviceName", { + get: function () { + return "viz-service" /* Viz */; + }, + enumerable: true, + configurable: true + }); + VizServiceImpl.prototype.createVizImageAsync = function (inputSpec) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'createVizImageAsync', + _a[api_internal_contract_js_1.ParameterId.VizAPIInputJson] = JSON.stringify(inputSpec), + _a); + return this.execute(api_internal_contract_js_1.VerbId.VizAPI, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + VizServiceImpl.prototype.activateSheetAsync = function (name) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateSheetAsync', + _a[api_internal_contract_js_1.ParameterId.SwitchToSheetName] = name, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ActivateSheet, parameters).then(function () { + return; + }); + }; + VizServiceImpl.prototype.getCustomViewsAsync = function () { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCustomViewsAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetCustomViews, parameters).then(function (response) { + var customViews = response.result; + return customViews.map(function (customView) { + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }); + }; + VizServiceImpl.prototype.showCustomViewAsync = function (customViewName) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'showCustomViewAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ShowCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.removeCustomViewAsync = function (customViewName) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeCustomViewAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName, + _a); + return this.execute(api_internal_contract_js_1.VerbId.RemoveCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.saveCustomViewAsync = function (customViewName) { + var _a; + var _this = this; + // CustomViewIsDefault is a required parameter, but our API has not been updated to allow it to be specified yet. + // We should add a 'default' parameter to the interface. + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveCustomViewAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName, + _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = false, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SaveWorkbookAsCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.setActiveCustomViewAsDefaultAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setActiveCustomViewAsDefaultAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.SetActiveCustomViewAsDefault, parameters).then(function () { + return; + }); + }; + VizServiceImpl.prototype.saveAsync = function (customView) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewLuid] = customView.luid, + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customView.name, + _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = customView.isDefault, + _a[api_internal_contract_js_1.ParameterId.CustomViewIsPublic] = customView.shared, + _a); + return this.execute(api_internal_contract_js_1.VerbId.UpdateCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.getCurrentSrcAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCurrentSrcAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetCurrentSrc, parameters).then(function (response) { return response.result; }); + }; + return VizServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.VizServiceImpl = VizServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js": +/*!***************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js ***! + \***************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param_1 = __webpack_require__(/*! ../../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ZoneServiceImpl = /** @class */ (function (_super) { + __extends(ZoneServiceImpl, _super); + function ZoneServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ZoneServiceImpl.prototype, "serviceName", { + get: function () { + return "zone-service" /* Zone */; + }, + enumerable: true, + configurable: true + }); + ZoneServiceImpl.prototype.setVisibilityAsync = function (dashboard, dashboardZoneMap, zoneVisibilityMap) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setVisibilityAsync', + _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard, + _a[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap] = {}, + _a); + // zoneVisibilityMap can be either an object or a Map - convert it to a Map + var parameterAsMap = Param_1.Param.convertParameterToMap(zoneVisibilityMap, 'zoneVisibilityMap'); + parameterAsMap.forEach(function (value, key) { + ErrorHelpers_1.ErrorHelpers.verifyZoneIsValid(dashboardZoneMap, Number.parseInt(key, 10)); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(value, api_external_contract_js_1.DashboardObjectVisibilityType, 'DashboardObjectVisibilityType'); + parameters[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap][key] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setVisibilityType.convert(value); + }); + return this.execute(api_internal_contract_js_1.VerbId.SetZoneVisibility, parameters).then(function (response) { + return; + }); + }; + ZoneServiceImpl.prototype.moveAndResizeAsync = function (dashboard, dashboardZoneMap, dashboardObjectPositionAndSizeUpdateArray) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard, + _a[api_internal_contract_js_1.ParameterId.DashboardObjectPositionAndSizeUpdateList] = dashboardObjectPositionAndSizeUpdateArray, + _a); + dashboardObjectPositionAndSizeUpdateArray.forEach(function (dashboardObject) { + ErrorHelpers_1.ErrorHelpers.verifyZoneIsValidAndFloating(dashboardZoneMap, dashboardObject.dashboardObjectID); + ErrorHelpers_1.ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate(dashboardObject); + }); + return this.execute(api_internal_contract_js_1.VerbId.MoveAndResizeZones, parameters).then(function (response) { + return; + }); + }; + return ZoneServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ZoneServiceImpl = ZoneServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/TableSummary.js": +/*!**********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/TableSummary.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of a table summary. + * This does not follow the Impl pattern as it is just a property bag. + */ +var TableSummary = /** @class */ (function () { + function TableSummary(_tableInfo) { + this._tableInfo = _tableInfo; + } + Object.defineProperty(TableSummary.prototype, "name", { + get: function () { + return this._tableInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableSummary.prototype, "id", { + get: function () { + return this._tableInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableSummary.prototype, "connectionId", { + get: function () { + return this._tableInfo.connectionId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableSummary.prototype, "customSQL", { + get: function () { + return this._tableInfo.customSQL; + }, + enumerable: true, + configurable: true + }); + return TableSummary; +}()); +exports.TableSummary = TableSummary; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/TableauError.js": +/*!**********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/TableauError.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Custom error class that extends the default JavaScript Error object. + * This allows us to provide a field with a specific error code + * so that developers can more easily programmatically respond + * to error scenarios. + */ +var TableauError = /** @class */ (function (_super) { + __extends(TableauError, _super); + function TableauError(_errorCode, message) { + var _this = _super.call(this, _errorCode + ": " + message) || this; + _this._errorCode = _errorCode; + /*tslint:disable-next-line */ + // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work + // Error inheritance does not work propertly when compiling to ES5, this is a workaround to force + // the proto chain to be built correctly. See the github link above for details. + Object.setPrototypeOf(_this, TableauError.prototype); + return _this; + } + Object.defineProperty(TableauError.prototype, "errorCode", { + get: function () { + return this._errorCode; + }, + enumerable: true, + configurable: true + }); + return TableauError; +}(Error)); +exports.TableauError = TableauError; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var InternalContract = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var GetDataModels_1 = __webpack_require__(/*! ../Models/GetDataModels */ "../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js"); +/** + * In version 2 of the interface, we should collapse value into nativeValue, and do all this work over + * in the platform. + */ +var DataValueFactory = /** @class */ (function () { + function DataValueFactory() { + } + DataValueFactory.MakeParameterDataValue = function (internalDataValue, dataType) { + // Parameter values are all strings, convert from string to value + return new GetDataModels_1.DataValue(internalDataValue.value, InternalContract.DataTypeConverter.convertStringValueToNativeValue(internalDataValue.value, dataType), internalDataValue.formattedValue); + }; + DataValueFactory.MakeFilterDataValue = function (internalDataValue) { + // Filters already have native type in value, just use that for nativeValue also + return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value, internalDataValue.formattedValue); + }; + DataValueFactory.MakeTableDataValue = function (internalDataValue, dataType) { + // DataTables contain boolean | number | string | date as string | '%null% + // convertValueToNativeValue converts dates as string to dates, and any special to null + // (boolean, numbers, strings are passed through) + // Because of IncludeDataValuesOption - we can have undefined values, which are different than any special + return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value !== undefined + ? InternalContract.DataTypeConverter.convertValueToNativeValue(internalDataValue.value, dataType) + : undefined, internalDataValue.formattedValue); + }; + return DataValueFactory; +}()); +exports.DataValueFactory = DataValueFactory; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/Deferred.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/Deferred.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * A Promise wrapper class allowing for resolving/rejecting the Promise outside the context of its constructor. + * + * @export + * @class Deferred + * @template TResolve The type used to resolve the promise. + * @template TReject The type used to reject the promise. Defaults to any. + * @link https://stackoverflow.com/a/34637436 + */ +var Deferred = /** @class */ (function () { + /** + * Creates an instance of Deferred. + */ + function Deferred() { + var _this = this; + this._promise = new Promise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + } + Object.defineProperty(Deferred.prototype, "promise", { + /** + * Gets the Promise. + * + * @readonly + * @type {Promise} + */ + get: function () { + return this._promise; + }, + enumerable: true, + configurable: true + }); + /** + * Resolves the wrapped Promise. + * + * @param {(TResolve | PromiseLike)} response The argument to be resolved by the Promise. + * @returns {*} {void} + */ + Deferred.prototype.resolve = function (response) { + if (!this._resolve) { + return; + } + this._resolve(response); + }; + /** + * + * + * @param {TReject} [reason] The reason why the Promise rejected. + * @returns {*} {void} + */ + Deferred.prototype.reject = function (reason) { + if (!this._reject) { + return; + } + this._reject(reason); + }; + return Deferred; +}()); +exports.Deferred = Deferred; +exports.UnregisterTimeoutInMilliseconds = 30000; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * This class converts from a source enum value to destination enum + * value given a mapping from source to destination when constructed. + * + * Note: This exact same class is defined in api-core. Given its small + * nature, it is not worth having in a separate project to share this between + * api-core and api-shared. If more utility functionality is added that is used by api-core + * and api-shared but has no other dependecies, a utiltity project might be merited, + * and this class could be moved. + */ +var EnumConverter = /** @class */ (function () { + function EnumConverter(_mappings, _defaultVal) { + this._mappings = _mappings; + this._defaultVal = _defaultVal; + } + EnumConverter.prototype.convert = function (enumVal, throwIfMissing) { + if (throwIfMissing === void 0) { throwIfMissing = ShouldThrow.Yes; } + if (this._mappings.hasOwnProperty(enumVal)) { + return this._mappings[enumVal]; + } + if (this._defaultVal !== undefined && throwIfMissing !== ShouldThrow.Yes) { + return this._defaultVal; + } + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Enum Mapping not found for: " + enumVal); + }; + return EnumConverter; +}()); +exports.EnumConverter = EnumConverter; +var ShouldThrow; +(function (ShouldThrow) { + ShouldThrow["Yes"] = "yes"; + ShouldThrow["No"] = "no"; +})(ShouldThrow = exports.ShouldThrow || (exports.ShouldThrow = {})); + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var Param_1 = __webpack_require__(/*! ./Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +/** + * This class is used to construct common errors throughout the external + * projects (api-shared, extensions-api, etc.). It has some duplication with + * the ErrorHelpers class in api-core, but is separate due to the need to throw + * an external TableauError vs. an InternalTableauError. + */ +var ErrorHelpers = /** @class */ (function () { + function ErrorHelpers() { + } + /** + * Throws with code InternalError. + * + * @param apiName name of api that was called. + */ + ErrorHelpers.apiNotImplemented = function (apiName) { + return new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, apiName + " API not yet implemented."); + }; + /** + * Throws an internal error if argument is null or undefined. + * + * @param argumentValue value to verify + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyInternalValue = function (argumentValue, argumentName) { + if (argumentValue === null || argumentValue === undefined) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, argumentValue + " is invalid value for: " + argumentName); + } + }; + /** + * Throws an InvalidParameter error if argument is null or undefined. + * + * @param argumentValue value to verify + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyParameter = function (argumentValue, argumentName) { + if (argumentValue === null || argumentValue === undefined) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + " is invalid value for parameter: " + argumentName); + } + }; + /** + * Throws an InvalidParameter error if argument is not the specified type. + * For objects, it just tests that it is an object + * + * @param argumentValue value to verify + * @param expectedType expected result of typeof + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyParameterType = function (argumentValue, expectedType, argumentName) { + if (typeof argumentValue !== expectedType) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + " has invalid type for parameter: " + argumentName + "."); + } + }; + /** + * Throws an InvalidParameter error if argument is empty string, null or undefined. + * + * @param argumentValue value to verify + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyStringParameter = function (argumentValue, argumentName) { + if (argumentValue === null || argumentValue === undefined || argumentValue === '') { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + " is invalid value for paramter: " + argumentName); + } + }; + /** + * Verifies passed value is a valid value for that enum. + * Throws an InvalidParameter error if the enum value is not valid. + * + * String enums are {string : string} dictionaries which are not reverse mappable + * This is an ugly workaround + * + * @param enumValue value to verify + * @param enumType enum to verify against + * @param enumName enum name for clear error message + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyEnumValue = function (enumValue, enumType, enumName) { + var isValid = false; + Object.keys(enumType).forEach(function (enumKey) { + if (enumType[enumKey] === enumValue.toString()) { + isValid = true; + } + }); + if (!isValid) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, enumValue + " is invalid value for enum: " + enumName + "."); + } + }; + /** + * Verifies passed value is between [min, max) ... min <= value < max + * Throws an InvalidParameter error if the value is not valid. + * + * + * @param value value to verify + * @param min value must be >= min + * @param max value must be < max + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyRange = function (value, min, max) { + var isValid = min <= value && value < max; + if (!isValid) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, value + " is invalid value for range: [" + min + ".." + max + ")"); + } + }; + /** + * Verifies the params min and max for applying range filter. + * Throws with error code InvalidParameter if range is invalid. + * + * @param min range min + * @param max range max + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyRangeParamType = function (min, max) { + if (!min && !max) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, at least one of min or max is required.'); + } + if (min && !Param_1.Param.isTypeNumber(min) && !Param_1.Param.isTypeDate(min)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter min.'); + } + if (max && !Param_1.Param.isTypeNumber(max) && !Param_1.Param.isTypeDate(max)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter max.'); + } + if (min && max && typeof min !== typeof max) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, parameters min and max should be of the same type.'); + } + }; + /** + * Verifies that the zoneId is present in the current dashboard. + * Throws with error code InvalidParameter if either condition is false. + * + * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object. + * @param zoneID ZoneId to be validated + */ + ErrorHelpers.verifyZoneIsValid = function (dashboardZoneMap, zoneID) { + if (dashboardZoneMap.has(zoneID)) { + return; + } + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, "Unexpected invalid param value, Dashboard Object Id: " + zoneID + " is not present in dashboard."); + }; + /** + * Verifies that the zone is present and floating in the current dashboard. + * Throws with error code InvalidParameter if either condition is false. + * + * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object. + * @param zoneID ZoneId to be validated + */ + ErrorHelpers.verifyZoneIsValidAndFloating = function (dashboardZoneMap, zoneID) { + if (dashboardZoneMap.has(zoneID) && dashboardZoneMap.get(zoneID).isFloating) { + return; + } + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, "Unexpected invalid param value, Dashboard Object Id: " + zoneID + " is not present or is a fixed zone in the dashboard."); + }; + /** + * Verifies that width and height are > 0 for each DashboardObjectPositionAndSizeUpdate object. + * Throws with error code InvalidParameter if either condition is false. + * + * @param dashboardObjectPositionAndSizeUpdate DashboardObjectPositionAndSizeUpdate object for which width and height will be validated + */ + ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate = function (dashboardObjectPositionAndSizeUpdate) { + if (dashboardObjectPositionAndSizeUpdate.width < 0 || dashboardObjectPositionAndSizeUpdate.height < 0) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, "Unexpected invalid param value for dashboard object ID " + dashboardObjectPositionAndSizeUpdate.dashboardObjectID + ":" + + " negative widths and heights are not allowed."); + } + }; + /** + * Verifies is the given sheet name is in the list of sheets names allowed for exporting. + * Throws with error code InvalidParameter if the condition above is false. + * + * @param exportableSheetNames A list of sheet names allowed for exporting + * @param sheetName the name of the sheet selected for export + */ + ErrorHelpers.verifySheetName = function (exportableSheetNames, sheetName) { + if (!exportableSheetNames.includes(sheetName)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidSelectionSheet, 'sheetName parameter must belong to a worksheet within the current view'); + } + }; + /** + * Verifies the ExportDataOptions object + * Throws with error code InvalidParameter if the parameter is not of ExportDataOptions type. + * + * @param options The ExportDataOptions object used to configure the output CSV file for exportDataAsync. + */ + ErrorHelpers.verifyExportDataOptions = function (options) { + if ((!Param_1.Param.isNullOrUndefined(options.ignoreAliases) && !Param_1.Param.isTypeBool(options.ignoreAliases)) || + (!Param_1.Param.isNullOrUndefined(options.columnsToIncludeById) && !Array.isArray(options.columnsToIncludeById))) + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'options paramater must be of type ExportDataOptions'); + }; + /** + * Verifies if the sheet names are included in any of the export scenarios. + * Throws with error code InvalidParameter if the parameter is not an array. + * Throws with error code InvalidSelectionSheet if there are array entries that dont exist or if there is mixing between sheets from the dashboard and sheet from the workbook. + * + * @param sheetNames List of sheet names selected for exporting. + * @param exportScenarios an object containing the current sheet name, exportable sheets from the dashboard, and exportable sheets from the workbook. + */ + ErrorHelpers.verifySheetNamesForPDFAndPPT = function (sheetNames, exportScenarios) { + if (!Array.isArray(sheetNames)) + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'sheetNames parameter must be an array'); + if (sheetNames.length === 0) + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'sheetNames should not be empty'); + var isIncludedInDashboard = sheetNames.every(function (sheetName) { + return exportScenarios.exportableSheetNamesFromDashboard.includes(sheetName); + }); + if (isIncludedInDashboard) { + return; + } + var isIncludedInWorkbook = sheetNames.every(function (sheetName) { + return exportScenarios.exportableSheetNamesFromWorkbook.includes(sheetName); + }); + if (isIncludedInWorkbook) { + return; + } + var isCurrentSheet = sheetNames.length === 1 && sheetNames[0] === exportScenarios.currentSheetName; + if (isCurrentSheet) { + return; + } + // Export requirement: all sheet names must be included in the list of exportable sheets in the dashboard or + // all sheet names must be included in the list of exportable sheets in the workbook, or the sheet name is the current sheet + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidSelectionSheet, 'sheetNames parameter must have all its entries be exportable sheet names from the dashboard or all its entries be exportable sheet names from the workbook'); + }; + /** + * Verifies the external ExportPDFOptions object's properties. + * Throws with error code InvalidParameter if the parameter is not of external ExportPDFOptions type. + * + * @param options The external user-facing ExportPDFOptions object used to configure the output PDF file for exportPDFAsync. + */ + ErrorHelpers.verifyExportPDFOptions = function (options) { + try { + this.verifyEnumValue(options.orientation, api_external_contract_js_1.PrintOrientation, 'PrintOrientation'); + this.verifyEnumValue(options.pageSize, api_external_contract_js_1.PrintPageSize, 'PrintPageSize'); + this.verifyEnumValue(options.scaling, api_external_contract_js_1.PrintScaling, 'PrintScaling'); + } + catch (_a) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'options parameter must be of type ExportPDFOptions'); + } + }; + return ErrorHelpers; +}()); +exports.ErrorHelpers = ErrorHelpers; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/ExportHelpers.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/ExportHelpers.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * Helper methods for Export APIs. + * + * @class ExportHelpers + */ +var ExportHelpers = /** @class */ (function () { + function ExportHelpers() { + } + /** + * Modifies the internal ExportPDFOptions' properties based on the given PDF export configuration. + * This method will construct the internal ExportPDFOptions identically to how the 'Export PDF' dialog constructs the ExportPdfOptionsPresModel. + * See the handleExportClick method in @browser-clients/export-pdf-options-dialog for reference. + * + * @param internalExportPdfOptions The internal ExportPDFOptions pres model used to configure the output PDF file. + * @param externalExportPdfOptions The external ExportPDFOptions user-facing object passed to exportPDFAsync. + * @param sheetNames The list of sheets selected for export. + */ + ExportHelpers.updateInternalExportPDFOptions = function (internalExportPdfOptions, externalExportPdfOptions, sheetNames) { + internalExportPdfOptions.currentSheet = sheetNames[0]; + this.updateExportLayoutOptions(internalExportPdfOptions, externalExportPdfOptions); + this.updateSheetOptions(internalExportPdfOptions, sheetNames); + }; + /** + * Helper method for updateInternalExportPDFOptions. + * Modifies the exportLayoutOptions property of the internal ExportPDFOptions based on the external ExportPDFOptions. + * See the getExportLayoutOptions method in @browser-clients/export-pdf-options-dialog for reference. + * + * @param internalExportPdfOptions The internal ExportPDFOptions pres model used to configure the output PDF file. + * @param externalExportPdfOptions The external ExportPDFOptions user-facing object passed to exportPDFAsync. + */ + ExportHelpers.updateExportLayoutOptions = function (internalExportPdfOptions, externalExportPdfOptions) { + var exportLayoutOptions = internalExportPdfOptions.exportLayoutOptions; + // setting the image height and width properties to their default values + exportLayoutOptions.imageHeight = this.DefaultLayoutOptions.imageHeight; + exportLayoutOptions.imageWidth = this.DefaultLayoutOptions.imageWidth; + // setting the orientation value for the exportLayoutOptions + switch (externalExportPdfOptions.orientation) { + case api_external_contract_js_1.PrintOrientation.Landscape: + exportLayoutOptions.pageOrientationOption = api_internal_contract_js_1.PageOrientation.Landscape; + break; + case api_external_contract_js_1.PrintOrientation.Portrait: + exportLayoutOptions.pageOrientationOption = api_internal_contract_js_1.PageOrientation.Portrait; + break; + default: + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'invalid orientation for ExportPDFOption'); + } + // setting the page size value for the exportLayoutOptions + switch (externalExportPdfOptions.pageSize) { + case api_external_contract_js_1.PrintPageSize.A3: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.A3; + break; + case api_external_contract_js_1.PrintPageSize.A4: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.A4; + break; + case api_external_contract_js_1.PrintPageSize.A5: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.A5; + break; + case api_external_contract_js_1.PrintPageSize.B4: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.B4; + break; + case api_external_contract_js_1.PrintPageSize.B5: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.B5; + break; + case api_external_contract_js_1.PrintPageSize.Executive: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Executive; + break; + case api_external_contract_js_1.PrintPageSize.Folio: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Folio; + break; + case api_external_contract_js_1.PrintPageSize.Ledger: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Ledger; + break; + case api_external_contract_js_1.PrintPageSize.Legal: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Legal; + break; + case api_external_contract_js_1.PrintPageSize.Letter: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Letter; + break; + case api_external_contract_js_1.PrintPageSize.Note: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Note; + break; + case api_external_contract_js_1.PrintPageSize.Quarto: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Quarto; + break; + case api_external_contract_js_1.PrintPageSize.Statement: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Statement; + break; + case api_external_contract_js_1.PrintPageSize.Tabloid: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Tabloid; + break; + case api_external_contract_js_1.PrintPageSize.Unspecified: + exportLayoutOptions.pageSizeOption = api_internal_contract_js_1.PageSizeOption.Unspecified; + break; + default: + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'invalid pageSize for ExportPDFOption'); + } + // setting the scaling values for the exportLayoutOptions + switch (externalExportPdfOptions.scaling) { + case api_external_contract_js_1.PrintScaling.AtMost1PageHigh: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitOneHigh); + break; + case api_external_contract_js_1.PrintScaling.AtMost1PageWide: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitOneWide); + break; + case api_external_contract_js_1.PrintScaling.AtMost2PagesHigh: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitTwoHigh); + break; + case api_external_contract_js_1.PrintScaling.AtMost2PagesWide: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.FitPages.FitTwoWide); + break; + case api_external_contract_js_1.PrintScaling.Automatic: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePctAuto); + break; + case api_external_contract_js_1.PrintScaling.Perc100: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct100); + break; + case api_external_contract_js_1.PrintScaling.Perc200: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct200); + break; + case api_external_contract_js_1.PrintScaling.Perc25: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct25); + break; + case api_external_contract_js_1.PrintScaling.Perc400: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct400); + break; + case api_external_contract_js_1.PrintScaling.Perc50: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct50); + break; + case api_external_contract_js_1.PrintScaling.Perc60: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct60); + break; + case api_external_contract_js_1.PrintScaling.Perc75: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct75); + break; + case api_external_contract_js_1.PrintScaling.Perc80: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct80); + break; + case api_external_contract_js_1.PrintScaling.Perc90: + this.setFitAndScaleValues(exportLayoutOptions, api_internal_contract_js_1.PageScalingOption.ScalePct90); + break; + default: + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'invalid scaling for ExportPDFOption'); + } + }; + /** + * Helper method for updateInternalExportPDFOptions. + * Modifies the sheetOptions property of the internal ExportPDFOptions based on the sheets selected for export. + * See the handleExportClick method in @browser-clients/export-pdf-options-dialog for reference. + * + * @param internalExportPdfOptions The internal ExportPDFOptions pres model used to configure the output PDF file. + * @param sheetNames The list of sheets selected for export. + */ + ExportHelpers.updateSheetOptions = function (internalExportPdfOptions, sheetNames) { + var exportLayoutOptions = internalExportPdfOptions.exportLayoutOptions, sheetOptions = internalExportPdfOptions.sheetOptions; + // updating the export layouts options for each sheet and selecting sheet for export if included in list + for (var _i = 0, sheetOptions_1 = sheetOptions; _i < sheetOptions_1.length; _i++) { + var sheetOption = sheetOptions_1[_i]; + sheetOption.exportLayoutOptions = exportLayoutOptions; + sheetOption.isSelected = sheetNames.includes(sheetOption.sheet); + } + }; + /** + * Helper method for updateExportLayoutOptons. + * This method is a spoof of the getFitAndScaleValues method used in @browser-clients/export-pdf-options to set the exportLayoutOptions' scaling properties. + * In the future, this file should be refactored to import the method directly from @browser-clients/export-pdf-options. + * + * @param scalingSelection string used for setting the exportLayoutOptions based on the PrintScaling property from the ExternalExportPDFOptions. + * @param exportLayoutOptions the ExportLayoutOptions used by the internal ExportPDFOptions pres model. + */ + ExportHelpers.setFitAndScaleValues = function (exportLayoutOptions, scalingSelection) { + var _a; + var _b = this.DefaultLayoutOptions, pageFitHorizontal = _b.pageFitHorizontal, pageFitVertical = _b.pageFitVertical, pageScaleMode = _b.pageScaleMode, pageScalePercent = _b.pageScalePercent; + var fitMatch = this.fitRegex.exec(scalingSelection); + var percentMatch = this.pctRegex.exec(scalingSelection); + if (fitMatch) { + _a = fitMatch.slice(1).map(function (value) { return Number(value); }), pageFitHorizontal = _a[0], pageFitVertical = _a[1]; + pageScaleMode = api_internal_contract_js_1.ScaleMode.ScaleFitPages; + } + else if (percentMatch) { + pageScalePercent = percentMatch.slice(1).map(function (value) { return Number(value); })[0]; + pageScaleMode = api_internal_contract_js_1.ScaleMode.ScalePercentage; + } + // getFitAndScaleValues returns the properties below, but instead this method will set them. + exportLayoutOptions.pageFitHorizontal = pageFitHorizontal; + exportLayoutOptions.pageFitVertical = pageFitVertical; + exportLayoutOptions.pageScaleMode = pageScaleMode; + exportLayoutOptions.pageScalePercent = pageScalePercent; + }; + ExportHelpers.DefaultDataOptions = { + ignoreAliases: false, + columnsToIncludeById: [], + }; + ExportHelpers.DefaultPDFOptions = { + scaling: api_external_contract_js_1.PrintScaling.Automatic, + pageSize: api_external_contract_js_1.PrintPageSize.Letter, + orientation: api_external_contract_js_1.PrintOrientation.Portrait, + }; + ExportHelpers.DefaultLayoutOptions = { + imageHeight: 0, + imageWidth: 0, + pageFitHorizontal: 1, + pageFitVertical: 1, + pageOrientationOption: api_internal_contract_js_1.PageOrientation.Portrait, + pageScaleMode: api_internal_contract_js_1.ScaleMode.ScaleAuto, + pageScalePercent: 100, + pageSizeOption: api_internal_contract_js_1.PageSizeOption.Letter, + }; + ExportHelpers.fitRegex = new RegExp('fit([0-9]+)x([0-9]+)'); + ExportHelpers.pctRegex = new RegExp('pct([0-9]+)'); + return ExportHelpers; +}()); +exports.ExportHelpers = ExportHelpers; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/Param.js": +/*!*********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/Param.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ./ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param = /** @class */ (function () { + function Param() { + } + /** + * serializes the date into the format that the server expects. + * @param date the date to serialize + */ + Param.serializeDateForPlatform = function (date) { + var year = date.getUTCFullYear(); + var month = date.getUTCMonth() + 1; + var day = date.getUTCDate(); + var hh = date.getUTCHours(); + var mm = date.getUTCMinutes(); + var sec = date.getUTCSeconds(); + return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + sec; + }; + Param.serializeBooleanForPlatform = function (bool) { + return bool ? 'true' : 'false'; + }; + Param.serializeNumberForPlatform = function (num) { + return num.toString(10); + }; + /** + * Verifies the input is a number + */ + /* tslint:disable-next-line:no-any */ + Param.isTypeNumber = function (input) { + return typeof input === 'number' || input instanceof Number; + }; + /** + * Verifies the input is a Date + */ + /* tslint:disable-next-line:no-any */ + Param.isTypeDate = function (input) { + return input instanceof Date; + }; + /* tslint:disable-next-line:no-any */ + Param.isTypeString = function (input) { + return typeof input === 'string' || input instanceof String; + }; + /* tslint:disable-next-line:no-any */ + Param.isTypeBool = function (input) { + return typeof input === 'boolean' || input instanceof Boolean; + }; + /** + * Determines if the input is null or undefined + */ + /* tslint:disable-next-line:no-any */ + Param.isNullOrUndefined = function (input) { + return input === null || input === undefined; + }; + /* tslint:disable-next-line:no-any */ + Param.serializeParameterValue = function (value) { + if (Param.isTypeNumber(value)) { + return Param.serializeNumberForPlatform(value); + } + else if (Param.isTypeDate(value)) { + return Param.serializeDateForPlatform(value); + } + else if (Param.isTypeBool(value)) { + return Param.serializeBooleanForPlatform(value); + } + else if (Param.isTypeString(value)) { + return value; + } + else { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Unexpected invalid value for: " + value); + } + }; + /** + * Verifies that the parameter is already a Map, or converts an object to a Map. + * If the parameter is an object, we convert it to a Map using Object.entries. + * @throws if the parameter is not an object or Map + */ + // tslint:disable-next-line:no-any + Param.convertParameterToMap = function (param, paramName) { + ErrorHelpers_1.ErrorHelpers.verifyParameterType(param, 'object', paramName); + if (Array.isArray(param)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, "Expecting object or Map for: " + paramName + "."); + } + return param instanceof Map ? param : new Map(Object.entries(param)); + }; + /* tslint:disable-next-line:no-any */ + Param.tryParseNumber = function (value) { + if (Param.isNullOrUndefined(value)) { + return { success: false }; + } + if (Param.isTypeNumber(value)) { + return { parsed: value, success: true }; + } + var valueString = value.toString(); + if (valueString === 'NaN') { + // 'NaN' parses as NaN which is indistinguishable from a failed parse. + return { parsed: NaN, success: true }; + } + var parsed = parseFloat(valueString); + if (isNaN(parsed)) { + return { success: false }; + } + return { parsed: parsed, success: true }; + }; + return Param; +}()); +exports.Param = Param; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js": +/*!**************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var SheetUtils = /** @class */ (function () { + function SheetUtils() { + } + // This is a direct port from SheetSize.cs - SheetSizeFactory + SheetUtils.getSheetSizeFromSizeConstraints = function (sizeConstraint) { + var minWidth = sizeConstraint.minWidth, minHeight = sizeConstraint.minHeight, maxWidth = sizeConstraint.maxWidth, maxHeight = sizeConstraint.maxHeight; + if (minHeight === 0 && minWidth === 0) { + if (maxHeight === 0 && maxWidth === 0) { + return { + behavior: Contract.SheetSizeBehavior.Automatic, + }; + } + return { + behavior: Contract.SheetSizeBehavior.AtMost, + maxSize: { width: maxWidth, height: maxHeight }, + }; + } + if (maxHeight === 0 && maxWidth === 0) { + return { + behavior: Contract.SheetSizeBehavior.AtLeast, + minSize: { width: minWidth, height: minHeight }, + }; + } + if (maxHeight === minHeight && maxWidth === minWidth && minWidth > 0) { + return { + behavior: Contract.SheetSizeBehavior.Exactly, + minSize: { width: minWidth, height: minHeight }, + maxSize: { width: minWidth, height: minHeight }, + }; + } + // 'Fit Width' for a DSD layout + var isDsdLayout = minWidth === 0 && maxWidth === 0; + return { + behavior: Contract.SheetSizeBehavior.Range, + minSize: { width: minWidth, height: minHeight }, + maxSize: { width: isDsdLayout ? 2147483647 : maxWidth, height: maxHeight }, + }; + }; + SheetUtils.createAutomaticSize = function () { + var behavior = Contract.SheetSizeBehavior.Automatic; + var minSize = { width: 0, height: 0 }; + var maxSize = { width: 0, height: 0 }; + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + }; + SheetUtils.getPublishedSheetInfoByName = function (name, sheetInfos) { + var sheetInfo = sheetInfos.find(function (sheet) { return sheet.name === name; }); + return sheetInfo; + }; + SheetUtils.getSheetTypeEnum = function (internalSheetType) { + var sheetType; + switch (internalSheetType) { + case api_internal_contract_js_1.SheetType.Worksheet: { + sheetType = Contract.SheetType.Worksheet; + break; + } + case api_internal_contract_js_1.SheetType.Dashboard: { + sheetType = Contract.SheetType.Dashboard; + break; + } + case api_internal_contract_js_1.SheetType.Story: { + sheetType = Contract.SheetType.Story; + break; + } + default: { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType'); + } + } + return sheetType; + }; + SheetUtils.isValidSheetSize = function (sizeObject) { + return sizeObject.behavior !== undefined; + }; + return SheetUtils; +}()); +exports.SheetUtils = SheetUtils; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var Deferred_1 = __webpack_require__(/*! ./Deferred */ "../api-shared-js/lib/src/ApiShared/Utils/Deferred.js"); +/** + * A Deferred wrapper class adding functionality to reject unresponsive promises after timeout + * + * this class handles two things: + + * 1. Adds timeout logic for deferred + * 2. It blocks multiple calls from executing at the same time. + * + * @export + * @class ShortLivedDeferred + * @template TResolve The type used to resolve the promise. + * @template TReject The type used to reject the promise. Defaults to any. + * + */ +var ShortLivedDeferred = /** @class */ (function () { + function ShortLivedDeferred(_timeoutInMilliseconds) { + if (_timeoutInMilliseconds === void 0) { _timeoutInMilliseconds = Deferred_1.UnregisterTimeoutInMilliseconds; } + this._timeoutInMilliseconds = _timeoutInMilliseconds; + } + ShortLivedDeferred.prototype.getNewPromiseOrThrowIfBusy = function () { + var _this = this; + if (this._deferred) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ApiExecutionError, 'This api cannot be executed till previous call is resolved.'); + } + this._deferred = new Deferred_1.Deferred(); + this._timeoutId = setTimeout(function () { + var error = new TableauError_1.TableauError(Contract.SharedErrorCodes.Timeout, "Api failed to complete in " + _this._timeoutInMilliseconds / 1000 + " seconds"); + _this.reject(error); + }, this._timeoutInMilliseconds); + return this._deferred.promise; + }; + ShortLivedDeferred.prototype.resolve = function (response) { + if (this._deferred) { + clearTimeout(this._timeoutId); + this._deferred.resolve(response); + this._deferred = undefined; + } + }; + ShortLivedDeferred.prototype.reject = function (error) { + if (this._deferred) { + clearTimeout(this._timeoutId); + this._deferred.reject(error); + this._deferred = undefined; + } + }; + return ShortLivedDeferred; +}()); +exports.ShortLivedDeferred = ShortLivedDeferred; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/VersionNumber.js": +/*!***********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/VersionNumber.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ./TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * Represents the current version of the extensions, embedding + * and extensions-api-types library + */ +var VersionNumber = /** @class */ (function () { + // private constructor so everyone uses the singleton instance + // build numbers have this form: M.m.f-pre.N + function VersionNumber(versionString, isAlpha) { + var partStr = versionString.split('-'); + this.build = this.getBuildNumber(partStr[1]); + versionString = partStr[0]; + var parts = versionString.split('.').map(function (p) { return parseInt(p, 10); }); + if (parts.length !== 3) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Invalid version number: " + versionString); + } + this.major = parts[0]; + this.minor = parts[1]; + this.fix = parts[2]; + this.isAlpha = isAlpha; + } + VersionNumber.prototype.getBuildNumber = function (preReleaseString) { + var noBuildNumber = -1; + if (!preReleaseString) { + return noBuildNumber; + } + // The preRelease string has this form: pre.N, but we don't depend on the actual string being 'pre' + var partStr = preReleaseString.split('.'); + return partStr[1] ? parseInt(partStr[1], 10) : noBuildNumber; + }; + Object.defineProperty(VersionNumber.prototype, "formattedValue", { + get: function () { + return this.major + "." + this.minor + "." + this.fix; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VersionNumber.prototype, "fullFormattedValue", { + get: function () { + return this.major + "." + this.minor + "." + this.fix + "-pre." + this.build; + }, + enumerable: true, + configurable: true + }); + return VersionNumber; +}()); +exports.VersionNumber = VersionNumber; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/VersionedExternalApiDispatcher.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/lib/src/VersionedExternalApiDispatcher.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +/** + * Implementation of the InternalApiDispatcher which supports upgrading and downgrading the input + * internal contract to the version that this module is built against + * + * @class VersionedExternalApiDispatcher + * @implements {InternalApiDispatcher} + */ +var VersionedExternalApiDispatcher = /** @class */ (function () { + /** + * Creates a new instance of the VersionedExternalApiDispatcher + * We have multiple version converting dispatchers that work together. + * If needed, the VersionedExternalApiDispatcher wraps either the InternalApiDispatcher (desktop) + * or the CrossFrameDispatcher (server). + * The Internal/CrossFrame dispatchers handle an updated platform with an older external library. + * (The CrossFrameDispatcher sends messages across the frame, and it is handled by the PresLayerHandler.) + * Meanwhile, the VersionedExternalApiDispatcher handles an updated external library with an older platform. + + * @param _apiDelegateDispatcher The delegate that does the actual work. + * @param platformVersionNumber The version of the internal contract which the platform module is using. + * This number will be used to figure out how to downgrade incoming commands and upgrade the results + */ + function VersionedExternalApiDispatcher(_apiDelegateDispatcher, platformVersionNumber) { + var _this = this; + this._apiDelegateDispatcher = _apiDelegateDispatcher; + this._versionConverter = api_internal_contract_js_1.CreateExternalCompatibleVersionConverter(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, platformVersionNumber); + this._notificationHandlers = []; + _apiDelegateDispatcher.registerNotificationHandler(function (notification) { + if (_this._notificationHandlers.length === 0) { + return; + } + var upgradedNotification = _this._versionConverter.upgradeNotification(notification); + _this._notificationHandlers.forEach(function (handler) { + handler(upgradedNotification); + }); + }); + } + VersionedExternalApiDispatcher.needsVersionConverter = function (platformVersion) { + // If our platform is less than external library version, then we need a converter + return api_internal_contract_js_1.VersionLessThan(platformVersion, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION); + }; + VersionedExternalApiDispatcher.prototype.execute = function (verb, parameters) { + var _this = this; + try { + var downgradeParameters = this._versionConverter.downgradeExecuteCall(verb, parameters); + return this._apiDelegateDispatcher.execute(downgradeParameters.verb, downgradeParameters.parameters).then(function (response) { + var upgradeResponse = _this._versionConverter.upgradeExecuteReturn(response, verb, parameters); + return upgradeResponse; + }); + } + catch (e) { + return Promise.reject(e); + } + }; + VersionedExternalApiDispatcher.prototype.registerNotificationHandler = function (handler) { + this._notificationHandlers.push(handler); + }; + VersionedExternalApiDispatcher.prototype.unregisterNotificationHandler = function (handler) { + this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; }); + }; + return VersionedExternalApiDispatcher; +}()); +exports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher; + + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/index.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/index.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "v1": () => (/* reexport safe */ _v1_js__WEBPACK_IMPORTED_MODULE_0__["default"]), +/* harmony export */ "v3": () => (/* reexport safe */ _v3_js__WEBPACK_IMPORTED_MODULE_1__["default"]), +/* harmony export */ "v4": () => (/* reexport safe */ _v4_js__WEBPACK_IMPORTED_MODULE_2__["default"]), +/* harmony export */ "v5": () => (/* reexport safe */ _v5_js__WEBPACK_IMPORTED_MODULE_3__["default"]), +/* harmony export */ "NIL": () => (/* reexport safe */ _nil_js__WEBPACK_IMPORTED_MODULE_4__["default"]), +/* harmony export */ "version": () => (/* reexport safe */ _version_js__WEBPACK_IMPORTED_MODULE_5__["default"]), +/* harmony export */ "validate": () => (/* reexport safe */ _validate_js__WEBPACK_IMPORTED_MODULE_6__["default"]), +/* harmony export */ "stringify": () => (/* reexport safe */ _stringify_js__WEBPACK_IMPORTED_MODULE_7__["default"]), +/* harmony export */ "parse": () => (/* reexport safe */ _parse_js__WEBPACK_IMPORTED_MODULE_8__["default"]) +/* harmony export */ }); +/* harmony import */ var _v1_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./v1.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/v1.js"); +/* harmony import */ var _v3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./v3.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/v3.js"); +/* harmony import */ var _v4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v4.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/v4.js"); +/* harmony import */ var _v5_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./v5.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/v5.js"); +/* harmony import */ var _nil_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./nil.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/nil.js"); +/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./version.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/version.js"); +/* harmony import */ var _validate_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./validate.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js"); +/* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./stringify.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js"); +/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./parse.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/parse.js"); + + + + + + + + + + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/md5.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/md5.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (var i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + + for (var i = 0; i < length32; i += 8) { + var x = input[i >> 5] >>> i % 32 & 0xff; + var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for (var i = 0; i < x.length; i += 16) { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + var length8 = input.length * 8; + var output = new Uint32Array(getOutputLength(length8)); + + for (var i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + var lsw = (x & 0xffff) + (y & 0xffff); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (md5); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/nil.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/nil.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ('00000000-0000-0000-0000-000000000000'); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/parse.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/parse.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validate.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js"); + + +function parse(uuid) { + if (!(0,_validate_js__WEBPACK_IMPORTED_MODULE_0__["default"])(uuid)) { + throw TypeError('Invalid UUID'); + } + + var v; + var arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parse); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/regex.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/regex.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/rng.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/rng.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ rng) +/* harmony export */ }); +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +var getRandomValues; +var rnds8 = new Uint8Array(16); +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/sha1.js": +/*!*******************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/sha1.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (var i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + var l = bytes.length / 4 + 2; + var N = Math.ceil(l / 16); + var M = new Array(N); + + for (var _i = 0; _i < N; ++_i) { + var arr = new Uint32Array(16); + + for (var j = 0; j < 16; ++j) { + arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3]; + } + + M[_i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (var _i2 = 0; _i2 < N; ++_i2) { + var W = new Uint32Array(80); + + for (var t = 0; t < 16; ++t) { + W[t] = M[_i2][t]; + } + + for (var _t = 16; _t < 80; ++_t) { + W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1); + } + + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + for (var _t2 = 0; _t2 < 80; ++_t2) { + var s = Math.floor(_t2 / 20); + var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (sha1); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js": +/*!************************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validate.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js"); + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +var byteToHex = []; + +for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0,_validate_js__WEBPACK_IMPORTED_MODULE_0__["default"])(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stringify); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/v1.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/v1.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _rng_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rng.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/rng.js"); +/* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stringify.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js"); + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; + +var _clockseq; // Previous uuid creation time + + +var _lastMSecs = 0; +var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || new Array(16); + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + var seedBytes = options.random || (options.rng || _rng_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + var tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || (0,_stringify_js__WEBPACK_IMPORTED_MODULE_1__["default"])(b); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v1); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/v3.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/v3.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _v35_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./v35.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/v35.js"); +/* harmony import */ var _md5_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./md5.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/md5.js"); + + +var v3 = (0,_v35_js__WEBPACK_IMPORTED_MODULE_0__["default"])('v3', 0x30, _md5_js__WEBPACK_IMPORTED_MODULE_1__["default"]); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v3); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/v35.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/v35.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DNS": () => (/* binding */ DNS), +/* harmony export */ "URL": () => (/* binding */ URL), +/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stringify.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js"); +/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parse.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/parse.js"); + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + var bytes = []; + + for (var i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = (0,_parse_js__WEBPACK_IMPORTED_MODULE_0__["default"])(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + var bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return (0,_stringify_js__WEBPACK_IMPORTED_MODULE_1__["default"])(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/v4.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/v4.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _rng_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rng.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/rng.js"); +/* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stringify.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/stringify.js"); + + + +function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || _rng_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return (0,_stringify_js__WEBPACK_IMPORTED_MODULE_1__["default"])(rnds); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v4); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/v5.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/v5.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _v35_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./v35.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/v35.js"); +/* harmony import */ var _sha1_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sha1.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/sha1.js"); + + +var v5 = (0,_v35_js__WEBPACK_IMPORTED_MODULE_0__["default"])('v5', 0x50, _sha1_js__WEBPACK_IMPORTED_MODULE_1__["default"]); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v5); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js": +/*!***********************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _regex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./regex.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/regex.js"); + + +function validate(uuid) { + return typeof uuid === 'string' && _regex_js__WEBPACK_IMPORTED_MODULE_0__["default"].test(uuid); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (validate); + +/***/ }), + +/***/ "../api-shared-js/node_modules/uuid/dist/esm-browser/version.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/node_modules/uuid/dist/esm-browser/version.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validate.js */ "../api-shared-js/node_modules/uuid/dist/esm-browser/validate.js"); + + +function version(uuid) { + if (!(0,_validate_js__WEBPACK_IMPORTED_MODULE_0__["default"])(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (version); + +/***/ }), + +/***/ "../api-internal-contract-js/lib/internal-contract-version.json": +/*!**********************************************************************!*\ + !*** ../api-internal-contract-js/lib/internal-contract-version.json ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"major":1,"minor":153,"fix":0}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +var exports = __webpack_exports__; +/*!**********************************!*\ + !*** ./lib/src/ExtensionsApi.js ***! + \**********************************/ + +/** + * This is your main. This is where you re-export everything you want to be publicly available. + * + * The build enforces that the file has the same name as the global variable that is exported. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +// The following polyfills are needed for IE11 +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +__webpack_require__(/*! core-js/es/array/find */ "../../node_modules/core-js/es/array/find.js"); +__webpack_require__(/*! core-js/es/array/from */ "../../node_modules/core-js/es/array/from.js"); +__webpack_require__(/*! core-js/es/map */ "../../node_modules/core-js/es/map/index.js"); +__webpack_require__(/*! core-js/es/number/is-integer */ "../../node_modules/core-js/es/number/is-integer.js"); +__webpack_require__(/*! core-js/es/number/is-nan */ "../../node_modules/core-js/es/number/is-nan.js"); +__webpack_require__(/*! core-js/es/number/parse-float */ "../../node_modules/core-js/es/number/parse-float.js"); +__webpack_require__(/*! core-js/es/number/parse-int */ "../../node_modules/core-js/es/number/parse-int.js"); +__webpack_require__(/*! core-js/es/object/assign */ "../../node_modules/core-js/es/object/assign.js"); +__webpack_require__(/*! core-js/es/object/entries */ "../../node_modules/core-js/es/object/entries.js"); +__webpack_require__(/*! core-js/es/object/set-prototype-of */ "../../node_modules/core-js/es/object/set-prototype-of.js"); +__webpack_require__(/*! core-js/es/promise */ "../../node_modules/core-js/es/promise/index.js"); +// Due to the way we configured webpack, we should be exporting things which will be under +// a global variable called "tableau". Export everything we want to be visible under tableau +// from this file. +var ExtensionsImpl_1 = __webpack_require__(/*! ./ExtensionsApi/Impl/ExtensionsImpl */ "./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js"); +var Extensions_1 = __webpack_require__(/*! ./ExtensionsApi/Namespaces/Extensions */ "./lib/src/ExtensionsApi/Namespaces/Extensions.js"); +var isAlpha = typeof VERSION_IS_ALPHA !== 'undefined' ? VERSION_IS_ALPHA : false; +api_shared_js_1.ApiVersion.SetVersionNumber( true ? "1.11.0-pre.63" : 0, isAlpha); +var extensionImpl = new ExtensionsImpl_1.ExtensionsImpl(); +exports.extensions = new Extensions_1.Extensions(extensionImpl); +// Export Enums +// These show up under the tableau object. I.e. tableau.ExtensionContext.Server +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +exports.AnalyticsObjectType = api_external_contract_js_1.AnalyticsObjectType; +exports.AnnotationType = api_external_contract_js_1.AnnotationType; +exports.ClassNameKey = api_external_contract_js_1.ClassNameKey; +exports.ColumnType = api_external_contract_js_1.ColumnType; +exports.DashboardLayoutChange = api_external_contract_js_1.DashboardLayoutChange; +exports.DashboardObjectType = api_external_contract_js_1.DashboardObjectType; +exports.DashboardObjectVisibilityType = api_external_contract_js_1.DashboardObjectVisibilityType; +exports.DataType = api_external_contract_js_1.DataType; +exports.DateRangeType = api_external_contract_js_1.DateRangeType; +exports.DialogStyle = api_external_contract_js_1.DialogStyle; +exports.EncodingType = api_external_contract_js_1.EncodingType; +exports.ErrorCodes = api_external_contract_js_1.ErrorCodes; +exports.ExtensionContext = api_external_contract_js_1.ExtensionContext; +exports.ExtensionMode = api_external_contract_js_1.ExtensionMode; +exports.FieldAggregationType = api_external_contract_js_1.FieldAggregationType; +exports.FieldRoleType = api_external_contract_js_1.FieldRoleType; +exports.FilterDomainType = api_external_contract_js_1.FilterDomainType; +exports.FilterNullOption = api_external_contract_js_1.FilterNullOption; +exports.FilterType = api_external_contract_js_1.FilterType; +exports.FilterUpdateType = api_external_contract_js_1.FilterUpdateType; +exports.HierarchicalLevelSelectionState = api_external_contract_js_1.HierarchicalLevelSelectionState; +exports.IncludeDataValuesOption = api_external_contract_js_1.IncludeDataValuesOption; +exports.MarkType = api_external_contract_js_1.MarkType; +exports.ParameterValueType = api_external_contract_js_1.ParameterValueType; +exports.PeriodType = api_external_contract_js_1.PeriodType; +exports.QuickTableCalcType = api_external_contract_js_1.QuickTableCalcType; +exports.ReplaySpeedType = api_external_contract_js_1.ReplaySpeedType; +exports.SelectOptions = api_external_contract_js_1.SelectOptions; +exports.SelectionUpdateType = api_external_contract_js_1.SelectionUpdateType; +exports.SheetType = api_external_contract_js_1.SheetType; +exports.SortDirection = api_external_contract_js_1.SortDirection; +exports.TableauEventType = api_external_contract_js_1.TableauEventType; +exports.TrendLineModelType = api_external_contract_js_1.TrendLineModelType; +exports.VizImageEncodingType = api_external_contract_js_1.VizImageEncodingType; +exports.VizImagePaletteType = api_external_contract_js_1.VizImagePaletteType; +exports.VizImageSizeSettingAlignmentType = api_external_contract_js_1.VizImageSizeSettingAlignmentType; +exports.VizImageSizeSettingType = api_external_contract_js_1.VizImageSizeSettingType; +exports.VizImageSortDirectionType = api_external_contract_js_1.VizImageSortDirectionType; +exports.ZoneVisibilityType = api_external_contract_js_1.ZoneVisibilityType; + +})(); + +window.tableau = __webpack_exports__; +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVhdS5leHRlbnNpb25zLjEuMTEuMC1wcmUuNjMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsMEZBQThCOztBQUV4RDs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNKQSxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNOQSxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGtIQUEwQztBQUNsRCxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFB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QywrQ0FBNEIsQ0FBQyxLQUFLLElBQUcsK0NBQTRCLENBQUMsS0FBSztRQUN4RSxHQUFDLCtDQUE0QixDQUFDLE1BQU0sSUFBRywrQ0FBNEIsQ0FBQyxNQUFNO1FBQzFFLEdBQUMsK0NBQTRCLENBQUMsR0FBRyxJQUFHLCtDQUE0QixDQUFDLEdBQUc7UUFDcEUsR0FBQywrQ0FBNEIsQ0FBQyxHQUFHLElBQUcsK0NBQTRCLENBQUMsR0FBRztRQUNwRSxHQUFDLCtDQUE0QixDQUFDLElBQUksSUFBRywrQ0FBNEIsQ0FBQyxJQUFJO1FBQ3RFLEdBQUMsK0NBQTRCLENBQUMsS0FBSyxJQUFHLCtDQUE0QixDQUFDLEtBQUs7UUFDeEUsR0FBQywrQ0FBNEIsQ0FBQyxRQUFRLElBQUcsK0NBQTRCLENBQUMsUUFBUTtRQUM5RSxHQUFDLCtDQUE0QixDQUFDLEdBQUcsSUFBRywrQ0FBNEIsQ0FBQyxHQUFHO1FBQ3BFLEdBQUMsK0NBQTRCLENBQUMsR0FBRyxJQUFHLCtDQUE0QixDQUFDLEdBQUc7UUFDcEUsR0FBQywrQ0FBNEIsQ0FBQyxNQUFNLElBQUcsK0NBQTRCLENBQUMsTUFBTTtRQUMxRSxHQUFDLCtDQUE0QixDQUFDLEdBQUcsSUFBRywrQ0FBNEIsQ0FBQyxHQUFHO1FBQ3BFLEdBQUMsK0NBQTRCLENBQUMsTUFBTSxJQUFHLCtDQUE0QixDQUFDLE1BQU07UUFDMUUsR0FBQywrQ0FBNEIsQ0FBQyxTQUFTLElBQUcsK0NBQTRCLENBQUMsU0FBUztRQUNoRixHQUFDLCtDQUE0QixDQUFDLElBQUksSUFBRywrQ0FBNEIsQ0FBQyxJQUFJO1FBQ3RFLEdBQUMsK0NBQTRCLENBQUMsR0FBRyxJQUFHLCtDQUE0QixDQUFDLEdBQUc7UUFDcEUsR0FBQywrQ0FBNEIsQ0FBQyxNQUFNLElBQUcsK0NBQTRCLENBQUMsTUFBTTtRQUMxRSxHQUFDLCtDQUE0QixDQUFDLE1BQU0sSUFBRywrQ0FBNEIsQ0FBQyxNQUFNO1FBQzFFLEdBQUMsK0NBQTRCLENBQUMsTUFBTSxJQUFHLCtDQUE0QixDQUFDLE1BQU07UUFDMUUsR0FB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eUMyQztBQXhDekMsNEVBQW1CO0FBQ25CLGtFQUFjO0FBQ2QsOERBQVk7QUFDWiwwREFBVTtBQUNWLGdGQUFxQjtBQUNyQiw0RUFBbUI7QUFDbkIsZ0dBQTZCO0FBQzdCLHNEQUFRO0FBQ1IsZ0VBQWE7QUFDYiw0REFBVztBQUNYLDhEQUFZO0FBQ1osMERBQVU7QUFDVixzRUFBZ0I7QUFDaEIsZ0VBQWE7QUFDYiw4RUFBb0I7QUFDcEIsZ0VBQWE7QUFDYixzRUFBZ0I7QUFDaEIsc0VBQWdCO0FBQ2hCLDBEQUFVO0FBQ1Ysc0VBQWdCO0FBQ2hCLG9HQUErQjtBQUMvQixvRkFBdUI7QUFDdkIsc0RBQVE7QUFDUiwwRUFBa0I7QUFDbEIsMERBQVU7QUFDViwwRUFBa0I7QUFFbEIsb0VBQWU7QUFDZixnRUFBYTtBQUNiLDRFQUFtQjtBQUNuQix3REFBUztBQUNULGdFQUFhO0FBQ2Isc0VBQWdCO0FBQ2hCLDBFQUFrQjtBQUNsQiw4RUFBb0I7QUFDcEIsNEVBQW1CO0FBQ25CLHNHQUFnQztBQUNoQyxvRkFBdUI7QUFDdkIsd0ZBQXlCO0FBQ3pCLDBFQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvYXJyYXkvZmluZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL2FycmF5L2Zyb20uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9tYXAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9udW1iZXIvaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL251bWJlci9pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9udW1iZXIvcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9udW1iZXIvcGFyc2UtaW50LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL29iamVjdC9lbnRyaWVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xlYXItZXJyb3Itc3RhY2suanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW50cnktdW5iaW5kLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXAuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2d1aWQvZ3VpZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL0Rhc2hib2FyZExheW91dENoYW5nZWRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL0ZpbHRlckNoYW5nZWRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL01hcmtzU2VsZWN0ZWRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL1BhcmFtZXRlckNoYW5nZWRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL1N1bW1hcnlEYXRhQ2hhbmdlZEV2ZW50LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9FdmVudHMvVGFibGVhdUV2ZW50LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9FdmVudHMvVGFibGVhdVNoZWV0RXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9UYWJsZWF1V29ya3NoZWV0RXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9Xb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkRXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0ltcGwvQmVudG9uU2Fuc0ZvbnROYW1lQ29uc3RhbnRzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9JbXBsL0Nvbm5lY3RlZFNlcnZlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvSW1wbC9FeHRlbnNpb25Xb3JrYm9va0ltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0ltcGwvRXh0ZW5zaW9uc0ltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0ltcGwvTGVnYWN5SW50ZXJuYWxBcGlEaXNwYXRjaGVySG9sZGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9JbXBsL1NldHRpbmdzSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvSW1wbC9UYWJsZWF1Qm9va0ZvbnROYW1lQ29uc3RhbnRzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9JbXBsL1VJSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTW9kZWxzL0Rhc2hib2FyZC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTW9kZWxzL0Rhc2hib2FyZE9iamVjdC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTW9kZWxzL1BhcmFtZXRlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTW9kZWxzL1NoZWV0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9Nb2RlbHMvV29ya2Jvb2sudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL01vZGVscy9Xb3Jrc2hlZXQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL05hbWVzcGFjZXMvRGFzaGJvYXJkQ29udGVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTmFtZXNwYWNlcy9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTmFtZXNwYWNlcy9FeHRlbnNpb25zLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9OYW1lc3BhY2VzL1NldHRpbmdzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9OYW1lc3BhY2VzL1VJLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9OYW1lc3BhY2VzL1dvcmtib29rRm9ybWF0dGluZ0VudlV0aWwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL05hbWVzcGFjZXMvV29ya3NoZWV0Q29udGVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvU2VydmljZXMvSW1wbC9Jbml0aWFsaXphdGlvblNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9TZXJ2aWNlcy9JbXBsL1NldHRpbmdzU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL1NlcnZpY2VzL0ltcGwvVUlTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvU2VydmljZXMvUmVnaXN0ZXJBbGxFeHRlbnNpb25zU2VydmljZXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0VtYmVkZGluZ0FwaUV4dGVybmFsQ29udHJhY3QudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVuc2lvbnNBcGlFeHRlcm5hbENvbnRyYWN0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL3NyYy9FeHRlcm5hbENvbnRyYWN0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL3NyYy9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9Bc2tEYXRhSW50ZXJmYWNlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvRW51bXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1B1bHNlSW50ZXJmYWNlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvVml6SW50ZXJmYWNlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvV2ViQ29tcG9uZW50SW50ZXJmYWNlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvVGFibGVhdS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvRW51bXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL05hbWVzcGFjZXMvVGFibGVhdS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvU2hhcmVkQXBpRXh0ZXJuYWxDb250cmFjdC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvSnNBcGlJbnRlcm5hbENvbnRyYWN0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9jb250cmFjdC9EYXRhVHlwZUNvbnZlcnRlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvY29udHJhY3QvRW51bXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL2NvbnRyYWN0L05vdGlmaWNhdGlvbnMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL2NvbnRyYWN0L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL2NvbnRyYWN0L1ZlcmJzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9pbnRlcmZhY2UvQXNrRGF0YUludGVyZmFjZS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvaW50ZXJmYWNlL1B1bHNlSW50ZXJmYWNlLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9pbnRlcmZhY2UvVnFsSW50ZXJmYWNlLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9tZXNzYWdpbmcvQ3Jvc3NGcmFtZU1lc3Nlbmdlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvbWVzc2FnaW5nL0Nyb3NzRnJhbWVQcmVwYXJlZE1lc3NhZ2UudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL21lc3NhZ2luZy9NZXNzYWdlVHlwZUNoZWNrcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvbWVzc2FnaW5nL2ludGVyZmFjZS9NZXNzYWdlVHlwZXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL3ZlcnNpb25pbmcvSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy92ZXJzaW9uaW5nL1N0YWNraW5nVmVyc2lvbkNvbnZlcnRlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvdmVyc2lvbmluZy9WZXJzaW9uQ29udmVydGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvdmVyc2lvbmluZy9WZXJzaW9uVHJhbnNsYXRpb25zLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy92ZXJzaW9uaW5nL2V4dGVybmFsL0V4dGVybmFsSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy92ZXJzaW9uaW5nL2V4dGVybmFsL0V4dGVybmFsU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy92ZXJzaW9uaW5nL2V4dGVybmFsL0V4dGVybmFsVmVyc2lvbkNvbnZlcnRlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL3ZlcnNpb25pbmcvZXh0ZXJuYWwvRXh0ZXJuYWxWZXJzaW9uVHJhbnNsYXRpb25zLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0FwaVZlcnNpb24udHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvQ29ubmVjdGlvblN1bW1hcnkudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvQ3Jvc3NGcmFtZS9Dcm9zc0ZyYW1lQm9vdHN0cmFwLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0Nyb3NzRnJhbWUvQ3Jvc3NGcmFtZURpc3BhdGNoZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvRGF0YVNvdXJjZS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9FbnVtTWFwcGluZ3MvRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvRXZlbnRMaXN0ZW5lck1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvRmllbGQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9DdXN0b21WaWV3SW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL0Rhc2hib2FyZEltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9EYXNoYm9hcmRPYmplY3RJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvRGF0YVNvdXJjZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9GaWVsZEltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9QYXJhbWV0ZXJJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvU2hlZXRJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvU2hlZXRJbmZvSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1NpbmdsZUV2ZW50TWFuYWdlckltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9TdG9yeUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9TdG9yeVBvaW50SW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1N0b3J5UG9pbnRJbmZvSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1dvcmtib29rSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1dvcmtzaGVldEltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvTG9naWNhbFRhYmxlLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL01vZGVscy9GaWx0ZXJNb2RlbHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvTW9kZWxzL0dldERhdGFNb2RlbHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvTW9kZWxzL0dldERhdGFUYWJsZVJlYWRlck1vZGVscy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9Nb2RlbHMvU2VsZWN0aW9uTW9kZWxzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1BvaW50LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL0dldERhdGFTZXJ2aWNlLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL1JlZ2lzdGVyQWxsU2hhcmVkU2VydmljZXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvQW5pbWF0aW9uU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9Bbm5vdGF0aW9uU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9DbGllbnRJbmZvU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9EYXRhU291cmNlU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9FeHBvcnRTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0V4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0ZpbHRlclNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvR2V0RGF0YVNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvTm90aWZpY2F0aW9uU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9Ob3RpZmljYXRpb25TZXJ2aWNlSW1wbEJhc2UudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9QYXJhbWV0ZXJzU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9TZWxlY3Rpb25TZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1NlcnZpY2VJbXBsQmFzZS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1NpemVTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1N0b3J5QWN0aXZhdGlvblNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvVmlzdWFsTW9kZWxTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1ZpelNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvWm9uZVNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1RhYmxlU3VtbWFyeS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9UYWJsZWF1RXJyb3IudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvVXRpbHMvRGF0YVZhbHVlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9VdGlscy9EZWZlcnJlZC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9VdGlscy9FbnVtQ29udmVydGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL0Vycm9ySGVscGVycy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9VdGlscy9FeHBvcnRIZWxwZXJzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL1BhcmFtLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL1NoZWV0VXRpbHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvVXRpbHMvU2hvcnRMaXZlZERlZmVycmVkLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1ZlcnNpb25OdW1iZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9WZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbWQ1LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9wYXJzZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjM1LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y1LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly90YWJsZWF1L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly90YWJsZWF1L3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vdGFibGVhdS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3RhYmxlYXUvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maW5kJyk7XG52YXIgZW50cnlVbmJpbmQgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZW50cnktdW5iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlVbmJpbmQoJ0FycmF5JywgJ2ZpbmQnKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtaW50ZWdlcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTnVtYmVyLmlzSW50ZWdlcjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubnVtYmVyLmlzLW5hbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTnVtYmVyLmlzTmFOO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5wYXJzZUZsb2F0O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIucGFyc2UtaW50Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIucGFyc2VJbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5lbnRyaWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZW50cmllcztcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYW55Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlByb21pc2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyIEFycmF5ID0gZ2xvYmFsLkFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIEFycmF5ID0gZ2xvYmFsLkFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwidmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsInZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhFcnJvcihhcmcpLnN0YWNrKTsgfSkoJ3p4Y2FzZCcpO1xudmFyIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi87XG52YXIgSVNfVjhfT1JfQ0hBS1JBX1NUQUNLID0gVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLnRlc3QoVEVTVCk7XG52YXIgSVNfRklSRUZPWF9PUl9TQUZBUklfU1RBQ0sgPSAvQFteXFxuXSpcXG4vLnRlc3QoVEVTVCkgJiYgIS96eGNhc2QvLnRlc3QoVEVTVCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAodHlwZW9mIHN0YWNrICE9ICdzdHJpbmcnKSByZXR1cm4gc3RhY2s7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0spIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSBlbHNlIGlmIChJU19GSVJFRk9YX09SX1NBRkFSSV9TVEFDSykge1xuICAgIHJldHVybiBqb2luKGFycmF5U2xpY2Uoc3BsaXQoc3RhY2ssICdcXG4nKSwgZHJvcEVudHJpZXMpLCAnXFxuJyk7XG4gIH0gcmV0dXJuIHN0YWNrO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVkZWZpbmVBbGwoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVkZWZpbmVBbGwoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHsgdmFsdWU6IGVudHJ5LmtleSwgZG9uZTogZmFsc2UgfTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogZW50cnkudmFsdWUsIGRvbmU6IGZhbHNlIH07XG4gICAgICByZXR1cm4geyB2YWx1ZTogW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBkb25lOiBmYWxzZSB9O1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgQ29uc3RydWN0b3IgPSBOYXRpdmVDb25zdHJ1Y3RvcjtcbiAgdmFyIGV4cG9ydGVkID0ge307XG5cbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgdW5jdXJyaWVkTmF0aXZlTWV0aG9kID0gdW5jdXJyeVRoaXMoTmF0aXZlUHJvdG90eXBlW0tFWV0pO1xuICAgIHJlZGVmaW5lKE5hdGl2ZVByb3RvdHlwZSwgS0VZLFxuICAgICAgS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSA6IEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gdW5kZWZpbmVkIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHZhciBSRVBMQUNFID0gaXNGb3JjZWQoXG4gICAgQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcikgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgIH0pKVxuICApO1xuXG4gIGlmIChSRVBMQUNFKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2UgaWYgKGlzRm9yY2VkKENPTlNUUlVDVE9SX05BTUUsIHRydWUpKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9IGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGl0ZXJhYmxlKTsgfSk7XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcblxuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChkdW1teSwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgTmF0aXZlUHJvdG90eXBlKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgTmF0aXZlQ29uc3RydWN0b3IoKSwgZHVtbXksIENvbnN0cnVjdG9yKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gTmF0aXZlUHJvdG90eXBlO1xuICAgICAgTmF0aXZlUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG5cbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIE5hdGl2ZVByb3RvdHlwZS5jbGVhcikgZGVsZXRlIE5hdGl2ZVByb3RvdHlwZS5jbGVhcjtcbiAgfVxuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogQ29uc3RydWN0b3IgIT0gTmF0aXZlQ29uc3RydWN0b3IgfSwgZXhwb3J0ZWQpO1xuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsInZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICByZWRlZmluZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCc7XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIGdsb2JhbC5QZWJibGUgIT09IHVuZGVmaW5lZDtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICByZXR1cm4gdW5jdXJyeVRoaXMoZ2xvYmFsW0NPTlNUUlVDVE9SXS5wcm90b3R5cGVbTUVUSE9EXSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLm5vVGFyZ2V0R2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsInZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGJpbmQgPSBGdW5jdGlvblByb3RvdHlwZS5iaW5kO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKGJpbmQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogYmluZCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbGwuYmluZCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsInZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBiaW5kID0gRnVuY3Rpb25Qcm90b3R5cGUuYmluZDtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciBjYWxsQmluZCA9IGJpbmQgJiYgYmluZC5iaW5kKGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQgPyBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuICYmIGNhbGxCaW5kKGNhbGwsIGZuKTtcbn0gOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuICYmIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gbWFrZXMgc3ViY2xhc3Npbmcgd29yayBjb3JyZWN0IGZvciB3cmFwcGVkIGJ1aWx0LWluc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJHRoaXMsIGR1bW15LCBXcmFwcGVyKSB7XG4gIHZhciBOZXdUYXJnZXQsIE5ld1RhcmdldFByb3RvdHlwZTtcbiAgaWYgKFxuICAgIC8vIGl0IGNhbiB3b3JrIG9ubHkgd2l0aCBuYXRpdmUgYHNldFByb3RvdHlwZU9mYFxuICAgIHNldFByb3RvdHlwZU9mICYmXG4gICAgLy8gd2UgaGF2ZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QgcHJlLUVTNiB3YXkgZm9yIGdldHRpbmcgYG5ldy50YXJnZXRgLCBzbyB1c2UgdGhpc1xuICAgIGlzQ2FsbGFibGUoTmV3VGFyZ2V0ID0gZHVtbXkuY29uc3RydWN0b3IpICYmXG4gICAgTmV3VGFyZ2V0ICE9PSBXcmFwcGVyICYmXG4gICAgaXNPYmplY3QoTmV3VGFyZ2V0UHJvdG90eXBlID0gTmV3VGFyZ2V0LnByb3RvdHlwZSkgJiZcbiAgICBOZXdUYXJnZXRQcm90b3R5cGUgIT09IFdyYXBwZXIucHJvdG90eXBlXG4gICkgc2V0UHJvdG90eXBlT2YoJHRoaXMsIE5ld1RhcmdldFByb3RvdHlwZSk7XG4gIHJldHVybiAkdGhpcztcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICB2YXIgd21nZXQgPSB1bmN1cnJ5VGhpcyhzdG9yZS5nZXQpO1xuICB2YXIgd21oYXMgPSB1bmN1cnJ5VGhpcyhzdG9yZS5oYXMpO1xuICB2YXIgd21zZXQgPSB1bmN1cnJ5VGhpcyhzdG9yZS5zZXQpO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHdtaGFzKHN0b3JlLCBpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHdtc2V0KHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0KHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcyhzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAuZXhlYyhub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICB9IHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xufTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgSXNJbnRlZ3JhbE51bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNpbnRlZ2VyIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzSW50ZWdlciB8fCBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgT2JqZWN0KGl0KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwidmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9IEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIHJlZGVmaW5lKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19JT1NfUEVCQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlJyk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5iaW5kKGdsb2JhbClcbiAgICBtYWNyb3Rhc2sgPSBiaW5kKG1hY3JvdGFzaywgZ2xvYmFsKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYWNyb3Rhc2soZmx1c2gpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBxdWV1ZU1pY3JvdGFzayB8fCBmdW5jdGlvbiAoZm4pIHtcbiAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICBpZiAoIWhlYWQpIHtcbiAgICBoZWFkID0gdGFzaztcbiAgICBub3RpZnkoKTtcbiAgfSBsYXN0ID0gdGFzaztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwiLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgcmV0dXJuICFTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgbiRQYXJzZUZsb2F0ID0gZ2xvYmFsLnBhcnNlRmxvYXQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRk9SQ0VEID0gMSAvIG4kUGFyc2VGbG9hdCh3aGl0ZXNwYWNlcyArICctMCcpICE9PSAtSW5maW5pdHlcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgbiRQYXJzZUZsb2F0KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHJpbmcpIHtcbiAgdmFyIHRyaW1tZWRTdHJpbmcgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICB2YXIgcmVzdWx0ID0gbiRQYXJzZUZsb2F0KHRyaW1tZWRTdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIGNoYXJBdCh0cmltbWVkU3RyaW5nLCAwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiBuJFBhcnNlRmxvYXQ7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyICRwYXJzZUludCA9IGdsb2JhbC5wYXJzZUludDtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIElURVJBVE9SID0gU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBoZXggPSAvXlsrLV0/MHgvaTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoaGV4LmV4ZWMpO1xudmFyIEZPUkNFRCA9ICRwYXJzZUludCh3aGl0ZXNwYWNlcyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3aGl0ZXNwYWNlcyArICcweDE2JykgIT09IDIyXG4gIC8vIE1TIEVkZ2UgMTgtIGJyb2tlbiB3aXRoIGJveGVkIHN5bWJvbHNcbiAgfHwgKElURVJBVE9SICYmICFmYWlscyhmdW5jdGlvbiAoKSB7ICRwYXJzZUludChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VJbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wYXJzZWludC1zdHJpbmctcmFkaXhcbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyaW5nLCByYWRpeCkge1xuICB2YXIgUyA9IHRyaW0odG9TdHJpbmcoc3RyaW5nKSk7XG4gIHJldHVybiAkcGFyc2VJbnQoUywgKHJhZGl4ID4+PiAwKSB8fCAoZXhlYyhoZXgsIFMpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpcyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKS5mO1xuXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSB1bmN1cnJ5VGhpcygkcHJvcGVydHlJc0VudW1lcmFibGUpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYE9iamVjdC57IGVudHJpZXMsIHZhbHVlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRPX0VOVFJJRVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBwcm9wZXJ0eUlzRW51bWVyYWJsZShPLCBrZXkpKSB7XG4gICAgICAgIHB1c2gocmVzdWx0LCBUT19FTlRSSUVTID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuICBlbnRyaWVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBPYmplY3QudmFsdWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4gIHZhbHVlczogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIHZhciBzdGF0ZTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSB7XG4gICAgaWYgKFN0cmluZyhuYW1lKS5zbGljZSgwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgICBuYW1lID0gJ1snICsgU3RyaW5nKG5hbWUpLnJlcGxhY2UoL15TeW1ib2xcXCgoW14pXSopXFwpLywgJyQxJykgKyAnXSc7XG4gICAgfVxuICAgIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIG5hbWUpO1xuICAgIH1cbiAgICBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgICBpZiAoIXN0YXRlLnNvdXJjZSkge1xuICAgICAgc3RhdGUuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gICAgfVxuICB9XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIHNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIXVuc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gIH0gZWxzZSBpZiAoIW5vVGFyZ2V0R2V0ICYmIE9ba2V5XSkge1xuICAgIHNpbXBsZSA9IHRydWU7XG4gIH1cbiAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sIGtleSwgdmFsdWUpO1xuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzT3duKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCJ2YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4xOS4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIxIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbnRyeSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShpc0NhbGxhYmxlKGZuKSA/IGZuIDogRnVuY3Rpb24oZm4pLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgIGxvY2F0aW9uICYmIGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKHBvc3QpXG4gICkge1xuICAgIGRlZmVyID0gcG9zdDtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwidmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIHNhZmVcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiAobnVtYmVyID4gMCA/IGZsb29yIDogY2VpbCkobnVtYmVyKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsInZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsInZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgc3ltYm9sRm9yID0gU3ltYm9sICYmIFN5bWJvbFsnZm9yJ107XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkgfHwgIShOQVRJVkVfU1lNQk9MIHx8IHR5cGVvZiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPT0gJ3N0cmluZycpKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gJ1N5bWJvbC4nICsgbmFtZTtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKSkge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIH0gZWxzZSBpZiAoVVNFX1NZTUJPTF9BU19VSUQgJiYgc3ltYm9sRm9yKSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBzeW1ib2xGb3IoZGVzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGVhci1lcnJvci1zdGFjaycpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxudmFyIEVycm9yID0gZ2xvYmFsLkVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgdGhhdCA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgRXJyb3IodW5kZWZpbmVkKSwgZ2V0UHJvdG90eXBlT2YodGhhdCkpO1xuICB9XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UsICcnKSk7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayh0aGF0LnN0YWNrLCAxKSk7XG4gIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIG9wdGlvbnMpO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCBFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCBFcnJvcik7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcyhGSU5EKTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3InKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHsgdmFsdWU6IGluZGV4LCBkb25lOiBmYWxzZSB9O1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHsgdmFsdWU6IHRhcmdldFtpbmRleF0sIGRvbmU6IGZhbHNlIH07XG4gIHJldHVybiB7IHZhbHVlOiBbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBkb25lOiBmYWxzZSB9O1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNJbnRlZ3JhbE51bWJlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1pbnRlZ3JhbC1udW1iZXInKTtcblxuLy8gYE51bWJlci5pc0ludGVnZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNpbnRlZ2VyXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ3JhbE51bWJlclxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE51bWJlci5pc05hTmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc25hblxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdCcpO1xuXG4vLyBgTnVtYmVyLnBhcnNlRmxvYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIucGFyc2VGbG9hdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW51bWJlci1wYXJzZWZsb2F0IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBOdW1iZXIucGFyc2VGbG9hdCAhPSBwYXJzZUZsb2F0IH0sIHtcbiAgcGFyc2VGbG9hdDogcGFyc2VGbG9hdFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBwYXJzZUludCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50Jyk7XG5cbi8vIGBOdW1iZXIucGFyc2VJbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIucGFyc2VpbnRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItcGFyc2VpbnQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE51bWJlci5wYXJzZUludCAhPSBwYXJzZUludCB9LCB7XG4gIHBhcnNlSW50OiBwYXJzZUludFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXknKS5lbnRyaWVzO1xuXG4vLyBgT2JqZWN0LmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKE8pIHtcbiAgICByZXR1cm4gJGVudHJpZXMoTyk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFByb21pc2UuYWxsU2V0dGxlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsc2V0dGxlZFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgYWxsU2V0dGxlZDogZnVuY3Rpb24gYWxsU2V0dGxlZChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ3JlamVjdGVkJywgcmVhc29uOiBlcnJvciB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbnZhciBQUk9NSVNFX0FOWV9FUlJPUiA9ICdObyBvbmUgcHJvbWlzZSByZXNvbHZlZCc7XG5cbi8vIGBQcm9taXNlLmFueWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYW55XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICBhbnk6IGZ1bmN0aW9uIGFueShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgQWdncmVnYXRlRXJyb3IgPSBnZXRCdWlsdEluKCdBZ2dyZWdhdGVFcnJvcicpO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIHZhciBhbHJlYWR5UmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBlcnJvcnNbaW5kZXhdID0gZXJyb3I7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3InKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxuLy8gU2FmYXJpIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODI5XG52YXIgTk9OX0dFTkVSSUMgPSAhIU5hdGl2ZVByb21pc2UgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICBOYXRpdmVQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnZmluYWxseSddO1xuICBpZiAoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICdmaW5hbGx5JywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2UgJiYgTmF0aXZlUHJvbWlzZS5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBOQVRJVkVfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKFBST01JU0UsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI2ZpbmFsbHkgaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICFQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoVjhfVkVSU0lPTiA+PSA1MSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSByZXR1cm4gZmFsc2U7XG4gIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBJU19CUk9XU0VSICYmICFOQVRJVkVfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gRk9SQ0VEIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIFByb21pc2VDb25zdHJ1Y3Rvci5hbGwoaXRlcmFibGUpWydjYXRjaCddKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRUQpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgYUNhbGxhYmxlKGV4ZWN1dG9yKTtcbiAgICBjYWxsKEludGVybmFsLCB0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgUHJvbWlzZVByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VQcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgcmVhY3Rpb25zW3JlYWN0aW9ucy5sZW5ndGhdID0gcmVhY3Rpb247XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZSkgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIVNVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICByZWRlZmluZShOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNjYXRjaGAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG4gICAgICByZWRlZmluZShOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnY2F0Y2gnLCBQcm9taXNlUHJvdG90eXBlWydjYXRjaCddLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG5cblByb21pc2VXcmFwcGVyID0gZ2V0QnVpbHRJbihQUk9NSVNFKTtcblxuLy8gc3RhdGljc1xuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyBgUHJvbWlzZS5yYWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIoZnVuY3Rpb24gKCkge1xuICB2YXIgdmFsaWRhdG9yID0gbmV3IFJlZ0V4cChcIl5bYS16MC05XXs4fS1bYS16MC05XXs0fS1bYS16MC05XXs0fS1bYS16MC05XXs0fS1bYS16MC05XXsxMn0kXCIsIFwiaVwiKTtcblxuICBmdW5jdGlvbiBnZW4oY291bnQpIHtcbiAgICB2YXIgb3V0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgb3V0ICs9ICgoKDErTWF0aC5yYW5kb20oKSkqMHgxMDAwMCl8MCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIEd1aWQoZ3VpZCkge1xuICAgIGlmICghZ3VpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXJndW1lbnQ7IGB2YWx1ZWAgaGFzIG5vIHZhbHVlLlwiKTtcbiAgICAgIFxuICAgIHRoaXMudmFsdWUgPSBHdWlkLkVNUFRZO1xuICAgIFxuICAgIGlmIChndWlkICYmIGd1aWQgaW5zdGFuY2VvZiBHdWlkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZ3VpZC50b1N0cmluZygpO1xuXG4gICAgfSBlbHNlIGlmIChndWlkICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChndWlkKSA9PT0gXCJbb2JqZWN0IFN0cmluZ11cIiAmJiBHdWlkLmlzR3VpZChndWlkKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IGd1aWQ7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIC8vIENvbXBhcmluZyBzdHJpbmcgYHZhbHVlYCBhZ2FpbnN0IHByb3ZpZGVkIGBndWlkYCB3aWxsIGF1dG8tY2FsbFxuICAgICAgLy8gdG9TdHJpbmcgb24gYGd1aWRgIGZvciBjb21wYXJpc29uXG4gICAgICByZXR1cm4gR3VpZC5pc0d1aWQob3RoZXIpICYmIHRoaXMudmFsdWUgPT0gb3RoZXI7XG4gICAgfTtcblxuICAgIHRoaXMuaXNFbXB0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IEd1aWQuRU1QVFk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIEd1aWQuRU1QVFkgPSBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiO1xuXG4gIEd1aWQuaXNHdWlkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgKHZhbHVlIGluc3RhbmNlb2YgR3VpZCB8fCB2YWxpZGF0b3IudGVzdCh2YWx1ZS50b1N0cmluZygpKSk7XG4gIH07XG5cbiAgR3VpZC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEd1aWQoW2dlbigyKSwgZ2VuKDEpLCBnZW4oMSksIGdlbigxKSwgZ2VuKDMpXS5qb2luKFwiLVwiKSk7XG4gIH07XG5cbiAgR3VpZC5yYXcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW2dlbigyKSwgZ2VuKDEpLCBnZW4oMSksIGdlbigxKSwgZ2VuKDMpXS5qb2luKFwiLVwiKTtcbiAgfTtcblxuICBpZih0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBHdWlkO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB3aW5kb3cuR3VpZCA9IEd1aWQ7XG4gIH1cbn0pKCk7XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50IGV4dGVuZHMgVGFibGVhdUV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlsczogQ29udHJhY3QuRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscykge1xuICAgIHN1cGVyKENvbnRyYWN0LlRhYmxlYXVFdmVudFR5cGUuRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhc2hib2FyZExheW91dENoYW5nZURldGFpbHMoKTogQ29udHJhY3QuRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZExheW91dENoYW5nZURldGFpbHM7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzLCBUYWJsZWF1RXZlbnRUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgVGFibGVhdVdvcmtzaGVldEV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1V29ya3NoZWV0RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGFibGVhdVdvcmtzaGVldEV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuRmlsdGVyQ2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHdvcmtzaGVldDogQ29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0LCBwcml2YXRlIF9maWVsZE5hbWU6IHN0cmluZywgcHJpdmF0ZSBfZmllbGRJZD86IHN0cmluZykge1xuICAgIHN1cGVyKFRhYmxlYXVFdmVudFR5cGUuRmlsdGVyQ2hhbmdlZCwgd29ya3NoZWV0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmllbGROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmllbGRJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWVsZElkO1xuICB9XG5cbiAgcHVibGljIGdldEZpbHRlckFzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuRmlsdGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldC5nZXRGaWx0ZXJzQXN5bmMoKS50aGVuPENvbnRyYWN0LkZpbHRlcj4oKGZpbHRlcnMpID0+IHtcbiAgICAgIC8vIFRPRE86IEZpbHRlcmluZyBvZiB0aGUgZmlsdGVycyBzaG91bGQgZXZlbnR1YWxseSBiZSBkb25lIHBsYXRmb3JtIHNpZGUuXG4gICAgICBjb25zdCBldmVudGVkRmlsdGVyID0gdGhpcy5maWVsZElkXG4gICAgICAgID8gZmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5maWVsZElkID09PSB0aGlzLmZpZWxkSWQsIHRoaXMpXG4gICAgICAgIDogZmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5maWVsZE5hbWUgPT09IHRoaXMuZmllbGROYW1lLCB0aGlzKTtcblxuICAgICAgaWYgKCFldmVudGVkRmlsdGVyKSB7XG4gICAgICAgIC8vIFdlIHNob3VsZG4ndCBoaXQgdGhpcyB1bmxlc3MgdGhlIGZpbHRlciB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB3b3Jrc2hlZXRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIGV2ZW50IHdhcyByYWlzZWQuXG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5NaXNzaW5nRmlsdGVyLCBgY2Fubm90IGZpbmQgZmlsdGVyOiAke3RoaXMuX2ZpZWxkTmFtZX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV2ZW50ZWRGaWx0ZXI7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXZlbnRUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVXb3Jrc2hlZXRFdmVudCB9IGZyb20gJy4vVGFibGVhdVdvcmtzaGVldEV2ZW50JztcblxuZXhwb3J0IGNsYXNzIE1hcmtzU2VsZWN0ZWRFdmVudCBleHRlbmRzIFRhYmxlYXVXb3Jrc2hlZXRFdmVudCBpbXBsZW1lbnRzIENvbnRyYWN0Lk1hcmtzU2VsZWN0ZWRFdmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih3b3Jrc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtzaGVldCkge1xuICAgIHN1cGVyKFRhYmxlYXVFdmVudFR5cGUuTWFya1NlbGVjdGlvbkNoYW5nZWQsIHdvcmtzaGVldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWFya3NBc3luYygpOiBQcm9taXNlPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLndvcmtzaGVldC5nZXRTZWxlY3RlZE1hcmtzQXN5bmMoKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEVycm9yQ29kZXMsIFRhYmxlYXVFdmVudFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBQYXJhbWV0ZXJzU2VydmljZSwgU2VydmljZU5hbWVzLCBUYWJsZWF1RXJyb3IgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IFBhcmFtZXRlciB9IGZyb20gJy4uL01vZGVscy9QYXJhbWV0ZXInO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnlVdGlsJztcbmltcG9ydCB7IFRhYmxlYXVTaGVldEV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1U2hlZXRFdmVudCc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBUYWJsZWF1U2hlZXRFdmVudCBpbXBsZW1lbnRzIENvbnRyYWN0LlBhcmFtZXRlckNoYW5nZWRFdmVudCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9nbG9iYWxGaWVsZE5hbWU6IHN0cmluZywgc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvblNoZWV0KSB7XG4gICAgc3VwZXIoVGFibGVhdUV2ZW50VHlwZS5QYXJhbWV0ZXJDaGFuZ2VkLCBzaGVldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyYW1ldGVyQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5QYXJhbWV0ZXI+IHtcbiAgICAvLyBDYWxsIGRvd24gdG8gb3VyIHNlcnZpY2UgdG8gZ2V0IHRoZSBwYXJhbWV0ZXIgYmFjayB2aWEgaXRzIGZpZWxkIG5hbWVcbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxQYXJhbWV0ZXJzU2VydmljZT4oU2VydmljZU5hbWVzLlBhcmFtZXRlcnMpO1xuICAgIHJldHVybiBzZXJ2aWNlLmZpbmRQYXJhbWV0ZXJCeUdsb2JhbEZpZWxkTmFtZUFzeW5jKHRoaXMuX2dsb2JhbEZpZWxkTmFtZSkudGhlbigocGFyYW1ldGVySW1wbCkgPT4ge1xuICAgICAgaWYgKHBhcmFtZXRlckltcGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuTWlzc2luZ1BhcmFtZXRlciwgYENhbm5vdCBmaW5kIHBhcmFtZXRlcjogJHt0aGlzLl9nbG9iYWxGaWVsZE5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyKHBhcmFtZXRlckltcGwsIHRoaXMuc2hlZXQpO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1V29ya3NoZWV0RXZlbnQgfSBmcm9tICcuL1RhYmxlYXVXb3Jrc2hlZXRFdmVudCc7XG5cbmV4cG9ydCBjbGFzcyBTdW1tYXJ5RGF0YUNoYW5nZWRFdmVudCBleHRlbmRzIFRhYmxlYXVXb3Jrc2hlZXRFdmVudCBpbXBsZW1lbnRzIENvbnRyYWN0LlN1bW1hcnlEYXRhQ2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHdvcmtzaGVldDogQ29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0KSB7XG4gICAgc3VwZXIoVGFibGVhdUV2ZW50VHlwZS5TdW1tYXJ5RGF0YUNoYW5nZWQsIHdvcmtzaGVldCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXZlbnRUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlYXVFdmVudCBpbXBsZW1lbnRzIENvbnRyYWN0LlRhYmxlYXVFdmVudCB7XG4gIHByaXZhdGUgX3R5cGU6IFRhYmxlYXVFdmVudFR5cGU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHR5cGU6IFRhYmxlYXVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBUYWJsZWF1RXZlbnRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFdmVudFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVhdVNoZWV0RXZlbnQgZXh0ZW5kcyBUYWJsZWF1RXZlbnQgaW1wbGVtZW50cyBDb250cmFjdC5UYWJsZWF1U2hlZXRFdmVudCB7XG4gIHByaXZhdGUgX3NoZWV0OiBDb250cmFjdC5FeHRlbnNpb25TaGVldDtcblxuICBwdWJsaWMgZ2V0IHNoZWV0KCk6IENvbnRyYWN0LkV4dGVuc2lvblNoZWV0IHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogVGFibGVhdUV2ZW50VHlwZSwgc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvblNoZWV0KSB7XG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLl9zaGVldCA9IHNoZWV0O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1U2hlZXRFdmVudCB9IGZyb20gJy4vVGFibGVhdVNoZWV0RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVhdVdvcmtzaGVldEV2ZW50IGV4dGVuZHMgVGFibGVhdVNoZWV0RXZlbnQgaW1wbGVtZW50cyBDb250cmFjdC5UYWJsZWF1V29ya3NoZWV0RXZlbnQge1xuICBwdWJsaWMgZ2V0IHdvcmtzaGVldCgpOiBDb250cmFjdC5FeHRlbnNpb25Xb3Jrc2hlZXQge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogVGFibGVhdUV2ZW50VHlwZSwgcHJvdGVjdGVkIF93b3Jrc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtzaGVldCkge1xuICAgIHN1cGVyKHR5cGUsIF93b3Jrc2hlZXQpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGFibGVhdUV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Zvcm1hdHRpbmc6IENvbnRyYWN0Lldvcmtib29rRm9ybWF0dGluZykge1xuICAgIHN1cGVyKENvbnRyYWN0LlRhYmxlYXVFdmVudFR5cGUuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1hdHRpbmcoKTogQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGluZztcbiAgfVxufVxuIiwiaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY29uc3QgQmVudG9uU2Fuc0ZvbnRGYW1pbHlOYW1lID0gJ0JlbnRvbiBTYW5zJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zTG93RFBJRm9udEZhbWlseU5hbWUgPSAnQmVudG9uIFNhbnMgTG93LURQSSc7XG5cbmV4cG9ydCBjb25zdCBCZW50b25TYW5zQm9va0ZvbnRGYWNlTmFtZSA9ICdCZW50b24gU2FucyBCb29rJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zQm9va0l0YWxpY0ZvbnRGYWNlTmFtZSA9ICdCZW50b24gU2FucyBCb29rIEl0YWxpYyc7XG5leHBvcnQgY29uc3QgQmVudG9uU2Fuc1NlbWlEZW1pRm9udEZhY2VOYW1lID0gJ0JlbnRvbiBTYW5zIFNlbWlEZW1pJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zU2VtaURlbWlJdGFsaWNGb250RmFjZU5hbWUgPSAnQmVudG9uIFNhbnMgU2VtaURlbWkgSXRhbGljJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zTGlnaHRGb250RmFjZU5hbWUgPSAnQmVudG9uIFNhbnMgTGlnaHQnO1xuZXhwb3J0IGNvbnN0IEJlbnRvblNhbnNNZWRpdW1Gb250RmFjZU5hbWUgPSAnQmVudG9uIFNhbnMgTWVkaXVtJztcblxuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZEJlbnRvblNhbnNGb250RmFjZXM6IE1vZGVsW10gPSBbXG4gIEJlbnRvblNhbnNCb29rRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zQm9va0l0YWxpY0ZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc1NlbWlEZW1pRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zU2VtaURlbWlJdGFsaWNGb250RmFjZU5hbWUsXG4gIEJlbnRvblNhbnNMaWdodEZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc01lZGl1bUZvbnRGYWNlTmFtZSxcbl07XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGVkU2VydmVyIGltcGxlbWVudHMgQ29udHJhY3QuQ29ubmVjdGVkU2VydmVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBfdXNlcklkPzogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfc2l0ZUlkPzogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfc2l0ZU5hbWVzcGFjZT86IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgX3dvcmtib29rSWQ/OiBzdHJpbmcsXG4gICkge31cblxuICBwdWJsaWMgZ2V0IHVzZXJJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91c2VySWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpdGVJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zaXRlSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpdGVOYW1lc3BhY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2l0ZU5hbWVzcGFjZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya2Jvb2tJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl93b3JrYm9va0lkO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVNjaGVtYSwgRGF0YVNvdXJjZSBhcyBEYXRhU291cmNlSW5mbyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIERhdGFTb3VyY2UsIERhdGFTb3VyY2VJbXBsLCBEYXRhU291cmNlU2VydmljZSwgU2VydmljZU5hbWVzLCBXb3JrYm9va0ltcGwgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25Xb3JrYm9va0ltcGwgZXh0ZW5kcyBXb3JrYm9va0ltcGwge1xuICBwdWJsaWMgZ2V0QWxsRGF0YVNvdXJjZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkRhdGFTb3VyY2U+PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG5cbiAgICByZXR1cm4gc2VydmljZS5nZXRBbGxEYXRhU291cmNlc0FzeW5jKCkudGhlbjxBcnJheTxDb250cmFjdC5EYXRhU291cmNlPj4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNjaGVtYTogRGF0YVNjaGVtYSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VzOiBBcnJheTxDb250cmFjdC5EYXRhU291cmNlPiA9IFtdO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggYWxsIGRhdGEgc291cmNlcyBhbmQgYWRkIHRoZW0uXG4gICAgICBPYmplY3QudmFsdWVzKGRhdGFTY2hlbWEuZGF0YVNvdXJjZXMpLmZvckVhY2goKGRzKSA9PiB7XG4gICAgICAgIGRhdGFTb3VyY2VzLnB1c2godGhpcy5jcmVhdGVEYXRhU291cmNlRnJvbUluZm8oZHMpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YVNvdXJjZXM7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU291cmNlSW5mbzogRGF0YVNvdXJjZUluZm8pOiBEYXRhU291cmNlIHtcbiAgICBjb25zdCBkYXRhU291cmNlSW1wbCA9IG5ldyBEYXRhU291cmNlSW1wbChkYXRhU291cmNlSW5mbywgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpO1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgRGF0YVNvdXJjZShkYXRhU291cmNlSW1wbCk7XG4gICAgZGF0YVNvdXJjZUltcGwuaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzKGRhdGFTb3VyY2UpO1xuICAgIHJldHVybiBkYXRhU291cmNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvckNvZGVzLCBTaGVldFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnVFdmVudCxcbiAgRGFzaGJvYXJkRXh0ZW5zaW9uTG9jYXRvcixcbiAgRXhlY3V0ZVBhcmFtZXRlcnMsXG4gIEV4dGVuc2lvbkRhc2hib2FyZEluZm8sXG4gIEV4dGVuc2lvbkxvY2F0b3IsXG4gIEV4dGVuc2lvblNldHRpbmdzSW5mbyxcbiAgRXh0ZW5zaW9uV29ya3NoZWV0SW5mbyxcbiAgRm9udE5hbWVBbmRJbmZvLFxuICBGb3JtYXR0aW5nU2hlZXQsXG4gIElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04sXG4gIEluaXRpYWxpemF0aW9uT3B0aW9ucyxcbiAgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBJbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5LFxuICBNb2RlbCxcbiAgTm90aWZpY2F0aW9uSWQsXG4gIFBhcmFtZXRlcklkLFxuICBTaGVldFBhdGgsXG4gIFZlcmJJZCxcbiAgV29ya2Jvb2tGb3JtYXR0aW5nLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LFxuICBBcGlWZXJzaW9uLFxuICBEYXNoYm9hcmRJbXBsLFxuICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICBTZXJ2aWNlTmFtZXMsXG4gIFNoZWV0SW5mb0ltcGwsXG4gIFRhYmxlYXVFcnJvcixcbiAgVmVyc2lvbmVkRXh0ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBWaXpTZXJ2aWNlLFxuICBXb3Jrc2hlZXRJbXBsLFxuICBkb0Nyb3NzRnJhbWVCb290c3RyYXAsXG4gIHJlZ2lzdGVyQWxsU2hhcmVkU2VydmljZXMsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkIH0gZnJvbSAnLi4vTW9kZWxzL0Rhc2hib2FyZCc7XG5pbXBvcnQgeyBXb3JrYm9vayB9IGZyb20gJy4uL01vZGVscy9Xb3JrYm9vayc7XG5pbXBvcnQgeyBXb3Jrc2hlZXQgfSBmcm9tICcuLi9Nb2RlbHMvV29ya3NoZWV0JztcbmltcG9ydCB7IERhc2hib2FyZENvbnRlbnQgfSBmcm9tICcuLi9OYW1lc3BhY2VzL0Rhc2hib2FyZENvbnRlbnQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9OYW1lc3BhY2VzL0Vudmlyb25tZW50JztcbmltcG9ydCB7IFNldHRpbmdzIH0gZnJvbSAnLi4vTmFtZXNwYWNlcy9TZXR0aW5ncyc7XG5pbXBvcnQgeyBVSSB9IGZyb20gJy4uL05hbWVzcGFjZXMvVUknO1xuaW1wb3J0IHsgV29ya3NoZWV0Q29udGVudCB9IGZyb20gJy4uL05hbWVzcGFjZXMvV29ya3NoZWV0Q29udGVudCc7XG5pbXBvcnQgeyBFeHRlbnNpb25zU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyc7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9Jbml0aWFsaXphdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBbGxFeHRlbnNpb25zU2VydmljZXMsIHJlZ2lzdGVySW5pdGlhbGl6YXRpb25FeHRlbnNpb25zU2VydmljZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9SZWdpc3RlckFsbEV4dGVuc2lvbnNTZXJ2aWNlcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvVUlTZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJlbnRvblNhbnNCb29rRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zQm9va0l0YWxpY0ZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc0ZvbnRGYW1pbHlOYW1lLFxuICBCZW50b25TYW5zTGlnaHRGb250RmFjZU5hbWUsXG4gIEJlbnRvblNhbnNMb3dEUElGb250RmFtaWx5TmFtZSxcbiAgQmVudG9uU2Fuc01lZGl1bUZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc1NlbWlEZW1pRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zU2VtaURlbWlJdGFsaWNGb250RmFjZU5hbWUsXG4gIFN1cHBvcnRlZEJlbnRvblNhbnNGb250RmFjZXMsXG59IGZyb20gJy4vQmVudG9uU2Fuc0ZvbnROYW1lQ29uc3RhbnRzJztcbmltcG9ydCB7IEV4dGVuc2lvbldvcmtib29rSW1wbCB9IGZyb20gJy4vRXh0ZW5zaW9uV29ya2Jvb2tJbXBsJztcbmltcG9ydCB7IExlZ2FjeUludGVybmFsQXBpRGlzcGF0Y2hlckhvbGRlciB9IGZyb20gJy4vTGVnYWN5SW50ZXJuYWxBcGlEaXNwYXRjaGVySG9sZGVyJztcbmltcG9ydCB7IFNldHRpbmdzSW1wbCB9IGZyb20gJy4vU2V0dGluZ3NJbXBsJztcbmltcG9ydCB7XG4gIFN1cHBvcnRlZFRhYmxlYXVGb250RmFjZXMsXG4gIFRhYmxlYXVCb2xkRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1Qm9sZEZvbnRGYW1pbHlOYW1lLFxuICBUYWJsZWF1Qm9va0ZvbnRGYWNlTmFtZSxcbiAgVGFibGVhdUJvb2tGb250RmFtaWx5TmFtZSxcbiAgVGFibGVhdUxpZ2h0Rm9udEZhY2VOYW1lLFxuICBUYWJsZWF1TGlnaHRGb250RmFtaWx5TmFtZSxcbiAgVGFibGVhdU1lZGl1bUZvbnRGYWNlTmFtZSxcbiAgVGFibGVhdU1lZGl1bUZvbnRGYW1pbHlOYW1lLFxuICBUYWJsZWF1UmVndWxhckZvbnRGYWNlTmFtZSxcbiAgVGFibGVhdVJlZ3VsYXJGb250RmFtaWx5TmFtZSxcbiAgVGFibGVhdVNlbWlCb2xkRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1U2VtaWJvbGRGb250RmFtaWx5TmFtZSxcbn0gZnJvbSAnLi9UYWJsZWF1Qm9va0ZvbnROYW1lQ29uc3RhbnRzJztcbmltcG9ydCB7IFVJSW1wbCB9IGZyb20gJy4vVUlJbXBsJztcblxuZXhwb3J0IHR5cGUgQ2FsbGJhY2tNYXAgPSB7IFtrZXk6IHN0cmluZ106ICgpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG5cbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25zSW1wbCB7XG4gIHByaXZhdGUgX2luaXRpYWxpemF0aW9uUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xuICBwcml2YXRlIF9zdHlsZUVsZW1lbnQ6IEhUTUxTdHlsZUVsZW1lbnQ7XG4gIHB1YmxpYyBkYXNoYm9hcmRDb250ZW50PzogRGFzaGJvYXJkQ29udGVudDtcbiAgcHVibGljIHdvcmtzaGVldENvbnRlbnQ/OiBXb3Jrc2hlZXRDb250ZW50O1xuICBwdWJsaWMgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xuICBwdWJsaWMgc2V0dGluZ3M6IFNldHRpbmdzO1xuICBwdWJsaWMgdWk6IFVJO1xuICBwdWJsaWMgd29ya2Jvb2s6IFdvcmtib29rO1xuICBwdWJsaWMgZXh0ZW5zaW9uWm9uZUlkOiBudW1iZXI7XG5cbiAgcHVibGljIGluaXRpYWxpemVBc3luYyhpc0V4dGVuc2lvbkRpYWxvZzogYm9vbGVhbiwgY29udGV4dE1lbnVDYWxsYmFja3M/OiBDYWxsYmFja01hcCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXphdGlvblByb21pc2UpIHtcbiAgICAgIHRoaXMuX2luaXRpYWxpemF0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0T3B0aW9uczogSW5pdGlhbGl6YXRpb25PcHRpb25zID0geyBpc0FscGhhOiBBcGlWZXJzaW9uLkluc3RhbmNlLmlzQWxwaGEgfTtcbiAgICAgICAgLy8gRmlyc3QgdGhpbmcgd2Ugd2FudCB0byBkbyBpcyBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBkZXNrdG9wIGRpc3BhdGNoZXIgYWxyZWFkeSByZWdpc3RlcmVkIGZvciB1c1xuICAgICAgICBpZiAoTGVnYWN5SW50ZXJuYWxBcGlEaXNwYXRjaGVySG9sZGVyLmhhc0Rlc2t0b3BBcGlEaXNwYXRjaGVyUHJvbWlzZShpbml0T3B0aW9ucykpIHtcbiAgICAgICAgICAvLyBSdW5uaW5nIGluIGEgcHJlLTIwMTkuMyBkZXNrdG9wLCB1c2Ugb3VyIGxlZ2FjeSBkaXNwYXRjaGVyIHByb21pc2VcbiAgICAgICAgICBjb25zdCBkZXNrdG9wRGlzcGF0Y2hlclByb21pc2UgPSBMZWdhY3lJbnRlcm5hbEFwaURpc3BhdGNoZXJIb2xkZXIuZ2V0RGVza3RvcERpc3BhdGNoZXJQcm9taXNlKGluaXRPcHRpb25zKTtcbiAgICAgICAgICBkZXNrdG9wRGlzcGF0Y2hlclByb21pc2VcbiAgICAgICAgICAgID8udGhlbigoZGlzcGF0Y2hlckZhY3RvcnkpID0+IHRoaXMub25EaXNwYXRjaGVyUmVjZWl2ZWQoZGlzcGF0Y2hlckZhY3RvcnksIGlzRXh0ZW5zaW9uRGlhbG9nLCBjb250ZXh0TWVudUNhbGxiYWNrcykpXG4gICAgICAgICAgICAudGhlbigob3BlblBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShvcGVuUGF5bG9hZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2UgbXVzdCBiZSBydW5uaW5nIGluIHNlcnZlciwgc28gd2Ugc2hvdWxkIHRyeSB0byBraWNrIG9mIHRoZSBzZXJ2ZXIgZGlzcGF0Y2hlciBib290c3RyYXBwaW5nXG4gICAgICAgICAgY29uc3Qgb25EaXNwYXRjaGVyUmVjZWl2ZWRDYWxsYmFjayA9IHRoaXMub25EaXNwYXRjaGVyUmVjZWl2ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICBkb0Nyb3NzRnJhbWVCb290c3RyYXAod2luZG93LCBJTlRFUk5BTF9DT05UUkFDVF9WRVJTSU9OLCBpbml0T3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKChmYWN0b3J5OiBJbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBvbkRpc3BhdGNoZXJSZWNlaXZlZENhbGxiYWNrKGZhY3RvcnksIGlzRXh0ZW5zaW9uRGlhbG9nLCBjb250ZXh0TWVudUNhbGxiYWNrcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKG9wZW5QYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUob3BlblBheWxvYWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVZpekltYWdlQXN5bmMoaW5wdXRTcGVjOiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHZpelNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFZpelNlcnZpY2U+KFNlcnZpY2VOYW1lcy5WaXopO1xuXG4gICAgcmV0dXJuIHZpelNlcnZpY2UuY3JlYXRlVml6SW1hZ2VBc3luYyhpbnB1dFNwZWMpO1xuICB9XG5cbiAgcHVibGljIHNldENsaWNrVGhyb3VnaEFzeW5jKGNsaWNrVGhyb3VnaEVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFVJU2VydmljZT4oRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5VSVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIHVpU2VydmljZS5zZXRDbGlja1Rocm91Z2hBc3luYyhjbGlja1Rocm91Z2hFbmFibGVkLCB0aGlzLmV4dGVuc2lvblpvbmVJZCk7XG4gIH1cblxuICBwcml2YXRlIGlzRGFzaGJvYXJkRXh0ZW5zaW9uTG9jYXRvcihsb2NhdG9yOiBFeHRlbnNpb25Mb2NhdG9yKTogbG9jYXRvciBpcyBEYXNoYm9hcmRFeHRlbnNpb25Mb2NhdG9yIHtcbiAgICBjb25zdCBkYXNoYm9hcmRFeHRlbnNpb25Mb2NhdG9yID0gbG9jYXRvciBhcyBEYXNoYm9hcmRFeHRlbnNpb25Mb2NhdG9yO1xuICAgIGlmICghZGFzaGJvYXJkRXh0ZW5zaW9uTG9jYXRvci5kYXNoYm9hcmRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ1VuZXhwZWN0ZWQgZXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb25EaXNwYXRjaGVyUmVjZWl2ZWQoXG4gICAgZGlzcGF0Y2hlckZhY3Rvcnk6IEludGVybmFsQXBpRGlzcGF0Y2hlckZhY3RvcnksXG4gICAgaXNFeHRlbnNpb25EaWFsb2c6IGJvb2xlYW4sXG4gICAgY29udGV4dE1lbnVGdW5jdGlvbnM/OiBDYWxsYmFja01hcCxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyID0gZGlzcGF0Y2hlckZhY3RvcnkoSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTik7XG5cbiAgICAvLyBDYWxsIHRvIHJlZ2lzdGVyIGFsbCB0aGUgc2VydmljZXMgd2hpY2ggd2lsbCB1c2UgdGhlIG5ld2x5IGluaXRpYWxpemVkIGRpc3BhdGNoZXJcbiAgICByZWdpc3RlckluaXRpYWxpemF0aW9uRXh0ZW5zaW9uc1NlcnZpY2VzKGRpc3BhdGNoZXIpO1xuXG4gICAgLy8gR2V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXJ2aWNlIGFuZCBpbml0aWFsaXplIHRoaXMgZXh0ZW5zaW9uXG4gICAgY29uc3QgaW5pdGlhbGl6YXRpb25TZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxJbml0aWFsaXphdGlvblNlcnZpY2U+KFxuICAgICAgRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5Jbml0aWFsaXphdGlvblNlcnZpY2UsXG4gICAgKTtcblxuICAgIGNvbnN0IGNhbGxiYWNrTWFwS2V5cyA9IGNvbnRleHRNZW51RnVuY3Rpb25zID8gT2JqZWN0LmtleXMoY29udGV4dE1lbnVGdW5jdGlvbnMpIDogW107XG4gICAgcmV0dXJuIGluaXRpYWxpemF0aW9uU2VydmljZS5pbml0aWFsaXplRGFzaGJvYXJkRXh0ZW5zaW9uc0FzeW5jKGlzRXh0ZW5zaW9uRGlhbG9nLCBjYWxsYmFja01hcEtleXMpLnRoZW48c3RyaW5nPigocmVzdWx0KSA9PiB7XG4gICAgICAvLyBJZiB3ZSByZWNlaXZlIGFuIGludmFsaWQgcGxhZm9ybSB2ZXJzaW9uLCB0aGlzIG1lYW5zIHRoYXQgcGxhdGZvcm0gaXMgcnVubm5pbmcgMS40IG9yIDIuMSBhbmRcbiAgICAgIC8vIGRvZXNuJ3QgcGFzcyB0aGUgcGxhdGZvcm0gdmVyc2lvbiB0byBleHRlcm5hbC4gSW4gdGhpcyBjYXNlIHdlIGFzc3VtZSB0aGUgcGxhdGZvcm0gdmVyc2lvbiB0byBiZSAxLjlcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHJlc3VsdC5leHRlbnNpb25FbnZpcm9ubWVudC5wbGF0Zm9ybVZlcnNpb25cbiAgICAgICAgPyByZXN1bHQuZXh0ZW5zaW9uRW52aXJvbm1lbnQucGxhdGZvcm1WZXJzaW9uXG4gICAgICAgIDogeyBtYWpvcjogMSwgbWlub3I6IDksIGZpeDogMCB9O1xuXG4gICAgICAvLyBXcmFwIG91ciBleGlzdGluZyBkaXNwYXRjaGVyIGluIGEgZGlzcGF0Y2hlciB0aGF0IGNhbiBkb3duZ3JhZGUvdXBncmFkZSBmb3IgYW4gb2xkZXIgcGxhdGZvcm0uXG4gICAgICBpZiAoVmVyc2lvbmVkRXh0ZXJuYWxBcGlEaXNwYXRjaGVyLm5lZWRzVmVyc2lvbkNvbnZlcnRlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgIGRpc3BhdGNoZXIgPSBuZXcgVmVyc2lvbmVkRXh0ZXJuYWxBcGlEaXNwYXRjaGVyKGRpc3BhdGNoZXIsIHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICB9XG4gICAgICAvLyBSZWdpc3RyYXRpb24gb2Ygc2VydmljZXMgbXVzdCBoYXBwZW4gYmVmb3JlIGluaXRpYWxpemluZyBjb250ZW50IGFuZCBlbnZpcm9ubWVudFxuICAgICAgLy8gRXh0ZW5zaW9ucyBkb2Vzbid0IG5lZWQgdG8gcGFzcyBpbiBhIHJlZ2lzdHJ5SWQuIEJ5IGRlZmF1bHQsIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aCByZWdpc3RyeUlkPTAuXG4gICAgICByZWdpc3RlckFsbFNoYXJlZFNlcnZpY2VzKGRpc3BhdGNoZXIsIEV4dGVuc2lvbnNSZWdpc3RyeUlkLCBwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgcmVnaXN0ZXJBbGxFeHRlbnNpb25zU2VydmljZXMoZGlzcGF0Y2hlcik7XG5cbiAgICAgIGlmIChyZXN1bHQuZXh0ZW5zaW9uRGFzaGJvYXJkSW5mbyAmJiB0aGlzLmlzRGFzaGJvYXJkRXh0ZW5zaW9uTG9jYXRvcihyZXN1bHQuZXh0ZW5zaW9uSW5zdGFuY2UubG9jYXRvcikpIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRDb250ZW50ID0gdGhpcy5pbml0aWFsaXplRGFzaGJvYXJkQ29udGVudChcbiAgICAgICAgICByZXN1bHQuZXh0ZW5zaW9uRGFzaGJvYXJkSW5mbyxcbiAgICAgICAgICByZXN1bHQuZXh0ZW5zaW9uSW5zdGFuY2UubG9jYXRvci5kYXNoYm9hcmRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmV4dGVuc2lvblpvbmVJZCA9IHJlc3VsdC5leHRlbnNpb25EYXNoYm9hcmRJbmZvLmV4dGVuc2lvblpvbmVJZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5leHRlbnNpb25Xb3Jrc2hlZXRJbmZvKSB7XG4gICAgICAgIHRoaXMud29ya3NoZWV0Q29udGVudCA9IHRoaXMuaW5pdGlhbGl6ZVdvcmtzaGVldENvbnRlbnQocmVzdWx0LmV4dGVuc2lvbldvcmtzaGVldEluZm8pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVudmlyb25tZW50ID0gbmV3IEVudmlyb25tZW50KHJlc3VsdC5leHRlbnNpb25FbnZpcm9ubWVudCk7XG4gICAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5pbml0aWFsaXplU2V0dGluZ3MocmVzdWx0LmV4dGVuc2lvblNldHRpbmdzSW5mbyk7XG4gICAgICB0aGlzLnVpID0gbmV3IFVJKG5ldyBVSUltcGwoKSk7XG4gICAgICB0aGlzLndvcmtib29rID0gbmV3IFdvcmtib29rKG5ldyBFeHRlbnNpb25Xb3JrYm9va0ltcGwoKSk7XG5cbiAgICAgIGlmIChyZXN1bHQuZXh0ZW5zaW9uRW52aXJvbm1lbnQud29ya2Jvb2tGb3JtYXR0aW5nKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRhYmxlYXVGb250cyhkaXNwYXRjaGVyLCByZXN1bHQuZXh0ZW5zaW9uRW52aXJvbm1lbnQud29ya2Jvb2tGb3JtYXR0aW5nKTtcbiAgICAgICAgdGhpcy5hcHBseUFsbEZvcm1hdHRpbmcocmVzdWx0LmV4dGVuc2lvbkVudmlyb25tZW50Lndvcmtib29rRm9ybWF0dGluZyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyBjb21wbGV0ZWQsIHNldHVwIGxpc3RlbmVycyBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0XG4gICAgICAvLyBhcmUgbWVhbnQgdG8gYmUgdHJpZ2dlcmVkIHdoZW5ldmVyIGEgY29udGV4dCBtZW51IGl0ZW0gaXMgY2xpY2tlZC5cbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHRNZW51Q2FsbGJhY2tzKGNvbnRleHRNZW51RnVuY3Rpb25zKTtcblxuICAgICAgLy8gQWxzbyBzZXQgdXAgbGlzdGVuZXJzIGZvciBFeHRlbnNpb25TdHlsZXNDaGFuZ2VkRXZlbnRcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudENhbGxiYWNrKGRpc3BhdGNoZXIpO1xuXG4gICAgICAvLyBJbiB0aGUgbm9ybWFsIGluaXRpYWxpemF0aW9uIGNhc2UsIHRoaXMgd2lsbCBiZSBhbiBlbXB0eSBzdHJpbmcuICBXaGVuIHJldHVybmluZyBmcm9tIGluaXRpYWxpemVBc3luYyB0byB0aGVcbiAgICAgIC8vIGRldmVsb3Blciwgd2UganVzdCBpbmdvcmUgdGhhdCBzdHJpbmcuICBJbiB0aGUgY2FzZSBvZiBpbml0aWFsaXppbmcgZnJvbSBhbiBleHRlbnNpb24gZGlhbG9nLCB0aGlzIHN0cmluZ1xuICAgICAgLy8gaXMgYW4gb3B0aW9uYWwgcGF5bG9hZCBzZW50IGZyb20gdGhlIHBhcmVudCBleHRlbnNpb24uXG4gICAgICByZXR1cm4gcmVzdWx0LmV4dGVuc2lvbkRpYWxvZ1BheWxvYWQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlBbGxGb3JtYXR0aW5nKGZvcm1hdHRpbmdNb2RlbDogV29ya2Jvb2tGb3JtYXR0aW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zdHlsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3N0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICB0aGlzLl9zdHlsZUVsZW1lbnQuaWQgPSAnVGFibGVhdS1FeHRlbnNpb24tRm9ybWF0dGluZyc7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuX3N0eWxlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zdHlsZUVsZW1lbnQuc2hlZXQgfHwgIWZvcm1hdHRpbmdNb2RlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlc2hlZXQ6IENTU1N0eWxlU2hlZXQgPSB0aGlzLl9zdHlsZUVsZW1lbnQuc2hlZXQgYXMgQ1NTU3R5bGVTaGVldDtcbiAgICB3aGlsZSAoc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzdHlsZXNoZWV0LmRlbGV0ZVJ1bGUoc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgZm9ybWF0dGluZ01vZGVsLmZvcm1hdHRpbmdTaGVldHMubWFwKChjdXJyZW50Rm9ybWF0dGluZ1NoZWV0KSA9PiB7XG4gICAgICB0aGlzLmFwcGx5Rm9ybWF0dGluZ1NoZWV0VG9TdHlsZVNoZWV0KGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQsIHN0eWxlc2hlZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZvcm1hdHRpbmdTaGVldFRvU3R5bGVTaGVldChjdXJyZW50Rm9ybWF0dGluZ1NoZWV0OiBGb3JtYXR0aW5nU2hlZXQsIHN0eWxlc2hlZXQ6IENTU1N0eWxlU2hlZXQpOiB2b2lkIHtcbiAgICBsZXQgc3R5bGVJbmZvID0gJyc7XG5cbiAgICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gY3VycmVudEZvcm1hdHRpbmdTaGVldC5jc3NQcm9wZXJ0aWVzO1xuICAgIGlmIChjc3NQcm9wZXJ0aWVzLmZvbnRGYW1pbHkpIHtcbiAgICAgIHN0eWxlSW5mbyArPSAnZm9udC1mYW1pbHk6ICcgKyBjc3NQcm9wZXJ0aWVzLmZvbnRGYW1pbHkudG9TdHJpbmcoKSArICc7ICc7XG4gICAgfVxuXG4gICAgaWYgKGNzc1Byb3BlcnRpZXMuZm9udFNpemUpIHtcbiAgICAgIHN0eWxlSW5mbyArPSAnZm9udC1zaXplOiAnICsgY3NzUHJvcGVydGllcy5mb250U2l6ZS50b1N0cmluZygpICsgJzsgJztcbiAgICB9XG5cbiAgICBpZiAoY3NzUHJvcGVydGllcy5mb250V2VpZ2h0KSB7XG4gICAgICBzdHlsZUluZm8gKz0gJ2ZvbnQtd2VpZ2h0OiAnICsgY3NzUHJvcGVydGllcy5mb250V2VpZ2h0LnRvU3RyaW5nKCkgKyAnOyAnO1xuICAgIH1cblxuICAgIGlmIChjc3NQcm9wZXJ0aWVzLmZvbnRTdHlsZSkge1xuICAgICAgc3R5bGVJbmZvICs9ICdmb250LXN0eWxlOiAnICsgY3NzUHJvcGVydGllcy5mb250U3R5bGUudG9TdHJpbmcoKSArICc7ICc7XG4gICAgfVxuXG4gICAgaWYgKGNzc1Byb3BlcnRpZXMudGV4dERlY29yYXRpb24pIHtcbiAgICAgIHN0eWxlSW5mbyArPSAndGV4dC1kZWNvcmF0aW9uOiAnICsgY3NzUHJvcGVydGllcy50ZXh0RGVjb3JhdGlvbi50b1N0cmluZygpICsgJzsgJztcbiAgICB9XG5cbiAgICBpZiAoY3NzUHJvcGVydGllcy5jb2xvcikge1xuICAgICAgc3R5bGVJbmZvICs9ICdjb2xvcjogJyArIGNzc1Byb3BlcnRpZXMuY29sb3IgKyAnOyAnO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdG9yOiBzdHJpbmcgPSAnLicgKyBjdXJyZW50Rm9ybWF0dGluZ1NoZWV0LmNsYXNzTmFtZUtleTtcbiAgICBjb25zdCBydWxlOiBzdHJpbmcgPSBzZWxlY3RvciArICcgeyAnICsgc3R5bGVJbmZvICsgJyB9JztcbiAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50Q2FsbGJhY2soZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Tm90aWZpY2F0aW9uU2VydmljZT4oXG4gICAgICBTZXJ2aWNlTmFtZXMuTm90aWZpY2F0aW9uLFxuICAgICk7XG4gICAgLy8gVW5yZWdpc3RlciBmdW5jdGlvbiBub3QgdXNlZCBzaW5jZSB0aGVzZSBub3RpZmljYXRpb25zIHNob3VsZCBiZVxuICAgIC8vIG9ic2VydmVkIGZvciB0aGUgZnVsbCBsaWZldGltZSBvZiB0aGUgZXh0ZW5zaW9uLlxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgTm90aWZpY2F0aW9uSWQuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZCxcbiAgICAgICgpID0+IHRydWUsXG4gICAgICAoZXZlbnRGb3JtYXR0aW5nOiBXb3JrYm9va0Zvcm1hdHRpbmcpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Rm9ybWF0dGluZykge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRhYmxlYXVGb250cyhkaXNwYXRjaGVyLCBldmVudEZvcm1hdHRpbmcpO1xuICAgICAgICAgIHRoaXMuYXBwbHlBbGxGb3JtYXR0aW5nKGV2ZW50Rm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRhYmxlYXVGb250cyhkaXNwYXRjaGVyOiBJbnRlcm5hbEFwaURpc3BhdGNoZXIsIHdvcmtib29rRm9ybWF0dGluZzogV29ya2Jvb2tGb3JtYXR0aW5nKTogdm9pZCB7XG4gICAgY29uc3QgZm9udE5hbWVzOiBNb2RlbFtdID0gWy4uLlN1cHBvcnRlZEJlbnRvblNhbnNGb250RmFjZXMsIC4uLlN1cHBvcnRlZFRhYmxlYXVGb250RmFjZXNdO1xuICAgIHdvcmtib29rRm9ybWF0dGluZy5mb3JtYXR0aW5nU2hlZXRzLmZvckVhY2goKGZvcm1hdHRpbmdTaGVldCkgPT4ge1xuICAgICAgaWYgKGZvcm1hdHRpbmdTaGVldC5jc3NQcm9wZXJ0aWVzLmZvbnRGYW1pbHkpIHtcbiAgICAgICAgZm9udE5hbWVzLnB1c2goZm9ybWF0dGluZ1NoZWV0LmNzc1Byb3BlcnRpZXMuZm9udEZhbWlseSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZm9udE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0geyBbUGFyYW1ldGVySWQuRm9udE5hbWVMaXN0SXRlbXNdOiBmb250TmFtZXMgfTtcbiAgICAgIGRpc3BhdGNoZXJcbiAgICAgICAgLmV4ZWN1dGUoVmVyYklkLkdldEZvbnRzLCBwYXJhbWV0ZXJzKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRGb250cyhyZXNwb25zZS5yZXN1bHQgYXMgQXJyYXk8Rm9udE5hbWVBbmRJbmZvPik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEZvbnRzKGZvbnRzOiBBcnJheTxGb250TmFtZUFuZEluZm8+KTogdm9pZCB7XG4gICAgZm9udHMuZm9yRWFjaCgoZm9udE5hbWVBbmRJbmZvKSA9PiB7XG4gICAgICBpZiAoU3VwcG9ydGVkVGFibGVhdUZvbnRGYWNlcy5pbmNsdWRlcyhmb250TmFtZUFuZEluZm8uZm9udE5hbWUpKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlYXVGb250cyhmb250TmFtZUFuZEluZm8pO1xuICAgICAgfSBlbHNlIGlmIChTdXBwb3J0ZWRCZW50b25TYW5zRm9udEZhY2VzLmluY2x1ZGVzKGZvbnROYW1lQW5kSW5mby5mb250TmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2FkQmVudG9uU2Fuc0ZvbnRzKGZvbnROYW1lQW5kSW5mbyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKGZvbnROYW1lQW5kSW5mby5mb250TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVEYXNoYm9hcmRDb250ZW50KGluZm86IEV4dGVuc2lvbkRhc2hib2FyZEluZm8sIHNoZWV0UGF0aDogU2hlZXRQYXRoKTogRGFzaGJvYXJkQ29udGVudCB7XG4gICAgLy8gc2hlZXRzIGFyZSBhbHdheXMgYWN0aXZlIGZvciBFeHRlbnNpb25zXG4gICAgY29uc3Qgc2hlZXRJbmZvSW1wbCA9IG5ldyBTaGVldEluZm9JbXBsKGluZm8ubmFtZSwgU2hlZXRUeXBlLkRhc2hib2FyZCwgeyB3aWR0aDogaW5mby5zaXplLncsIGhlaWdodDogaW5mby5zaXplLmggfSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICBjb25zdCBkYXNoYm9hcmRJbXBsID0gbmV3IERhc2hib2FyZEltcGwoc2hlZXRJbmZvSW1wbCwgaW5mby56b25lcywgc2hlZXRQYXRoLCBFeHRlbnNpb25zUmVnaXN0cnlJZCwgbnVsbCwgaW5mby5hY3RpdmVEYXNoYm9hcmRPYmplY3RJZCk7XG4gICAgY29uc3QgZGFzaGJvYXJkID0gbmV3IERhc2hib2FyZChkYXNoYm9hcmRJbXBsKTtcbiAgICByZXR1cm4gbmV3IERhc2hib2FyZENvbnRlbnQoZGFzaGJvYXJkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVdvcmtzaGVldENvbnRlbnQoaW5mbzogRXh0ZW5zaW9uV29ya3NoZWV0SW5mbyk6IFdvcmtzaGVldENvbnRlbnQge1xuICAgIGNvbnN0IHNoZWV0SW5mb0ltcGwgPSBuZXcgU2hlZXRJbmZvSW1wbChcbiAgICAgIGluZm8udmlzdWFsSWQud29ya3NoZWV0LFxuICAgICAgU2hlZXRUeXBlLldvcmtzaGVldCxcbiAgICAgIHsgd2lkdGg6IGluZm8uc2l6ZS53LCBoZWlnaHQ6IGluZm8uc2l6ZS5oIH0sXG4gICAgICB1bmRlZmluZWQsIC8vIGluZGV4IHByb3BlcnR5IGlzIGVtYmVkZGluZyBzcGVjaWZpY1xuICAgICAgdHJ1ZSwgLy8gc2hlZXRzIGFyZSBhbHdheXMgYWN0aXZlIGZvciBFeHRlbnNpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHdvcmtzaGVldEltcGwgPSBuZXcgV29ya3NoZWV0SW1wbChcbiAgICAgIHNoZWV0SW5mb0ltcGwsXG4gICAgICBFeHRlbnNpb25zUmVnaXN0cnlJZCxcbiAgICAgIGluZm8udmlzdWFsSWQsXG4gICAgICBudWxsLCAvLyBwYXJlbnREYXNoYm9hcmQgaXMgYWx3YXlzIG51bGwgZm9yIHdvcmtzaGVldCBpbiBXb3Jrc2hlZXRDb250ZW50XG4gICAgICBudWxsLCAvLyBwYXJlbnRTdG9yeVBvaW50IGlzIG9ubHkgdXNlZCBmb3IgZW1iZWRkaW5nXG4gICAgKTtcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSBuZXcgV29ya3NoZWV0KHdvcmtzaGVldEltcGwpO1xuICAgIHJldHVybiBuZXcgV29ya3NoZWV0Q29udGVudCh3b3Jrc2hlZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU2V0dGluZ3Moc2V0dGluZ3NJbmZvOiBFeHRlbnNpb25TZXR0aW5nc0luZm8pOiBTZXR0aW5ncyB7XG4gICAgY29uc3Qgc2V0dGluZ3NJbXBsID0gbmV3IFNldHRpbmdzSW1wbChzZXR0aW5nc0luZm8pO1xuICAgIHJldHVybiBuZXcgU2V0dGluZ3Moc2V0dGluZ3NJbXBsKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbnRleHRNZW51Q2FsbGJhY2tzKGNvbnRleHRNZW51RnVuY3Rpb25zPzogQ2FsbGJhY2tNYXApOiB2b2lkIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxOb3RpZmljYXRpb25TZXJ2aWNlPihcbiAgICAgIFNlcnZpY2VOYW1lcy5Ob3RpZmljYXRpb24sXG4gICAgKTtcblxuICAgIC8vIFVucmVnaXN0ZXIgZnVuY3Rpb24gbm90IHVzZWQgc2luY2UgdGhlc2Ugbm90aWZpY2F0aW9ucyBzaG91bGQgYmVcbiAgICAvLyBvYnNlcnZlZCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGV4dGVuc2lvbi5cbiAgICBub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVySGFuZGxlcihcbiAgICAgIE5vdGlmaWNhdGlvbklkLkNvbnRleHRNZW51Q2xpY2ssXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIExldCB0aHJvdWdoIGFueSBjb250ZXh0IG1lbnUgZXZlbnQsIHRoZXNlIGFyZSBhbHJlYWR5IGZpbHRlcmVkIG9uIGFwaS1jb3JlXG4gICAgICAgIC8vIGJhc2VkIG9uIHRoZSBleHRlbnNpb24gbG9jYXRvci5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgKGV2ZW50OiBDb250ZXh0TWVudUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQgbWVudSBJRFxuICAgICAgICBpZiAoY29udGV4dE1lbnVGdW5jdGlvbnMpIHtcbiAgICAgICAgICBpZiAoIWNvbnRleHRNZW51RnVuY3Rpb25zW2V2ZW50LmlkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGBSZWNlaXZlZCB1bmV4cGVjdGVkIGNvbnRleHQgbWVudSBJZCBmcm9tIGV2ZW50OiAke2V2ZW50LmlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHRNZW51RnVuY3Rpb25zW2V2ZW50LmlkXSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRUYWJsZWF1Rm9udHMoZm9udE5hbWVBbmRJbmZvOiBGb250TmFtZUFuZEluZm8pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGZvbnROYW1lQW5kSW5mby5mb250TmFtZSkge1xuICAgICAgY2FzZSBUYWJsZWF1Qm9va0ZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShUYWJsZWF1Qm9va0ZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVGFibGVhdUxpZ2h0Rm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKFRhYmxlYXVMaWdodEZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVGFibGVhdVJlZ3VsYXJGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChcbiAgICAgICAgICBuZXcgRm9udEZhY2UoVGFibGVhdVJlZ3VsYXJGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ25vcm1hbCcsIHN0eWxlOiAnbm9ybWFsJyB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVGFibGVhdVNlbWlCb2xkRm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQoXG4gICAgICAgICAgbmV3IEZvbnRGYWNlKFRhYmxlYXVTZW1pYm9sZEZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pLFxuICAgICAgICApO1xuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKFRhYmxlYXVSZWd1bGFyRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdib2xkJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVGFibGVhdUJvbGRGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoVGFibGVhdUJvbGRGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ25vcm1hbCcsIHN0eWxlOiAnbm9ybWFsJyB9KSk7XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoVGFibGVhdUJvbGRGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ2JvbGQnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKFRhYmxlYXVNZWRpdW1Gb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ2JvbGQnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQoXG4gICAgICAgICAgbmV3IEZvbnRGYWNlKFRhYmxlYXVTZW1pYm9sZEZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnYm9sZCcsIHN0eWxlOiAnbm9ybWFsJyB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVGFibGVhdU1lZGl1bUZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKFxuICAgICAgICAgIG5ldyBGb250RmFjZShUYWJsZWF1TWVkaXVtRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdub3JtYWwnLCBzdHlsZTogJ25vcm1hbCcgfSksXG4gICAgICAgICk7XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoVGFibGVhdUxpZ2h0Rm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdib2xkJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShUYWJsZWF1Qm9va0ZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnYm9sZCcsIHN0eWxlOiAnbm9ybWFsJyB9KSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYCdhdHRlbXB0ZWQgdG8gbG9hZCB1bnN1cHBvcnRlZCBmb250OiAke2ZvbnROYW1lQW5kSW5mby5mb250TmFtZX0uJ2ApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEJlbnRvblNhbnNGb250cyhmb250TmFtZUFuZEluZm86IEZvbnROYW1lQW5kSW5mbyk6IHZvaWQge1xuICAgIHN3aXRjaCAoZm9udE5hbWVBbmRJbmZvLmZvbnROYW1lKSB7XG4gICAgICBjYXNlIEJlbnRvblNhbnNCb29rRm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKEJlbnRvblNhbnNGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ25vcm1hbCcsIHN0eWxlOiAnbm9ybWFsJyB9KSk7XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChcbiAgICAgICAgICBuZXcgRm9udEZhY2UoQmVudG9uU2Fuc0xvd0RQSUZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnMTAwJywgc3R5bGU6ICdub3JtYWwnIH0pLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBCZW50b25TYW5zTGlnaHRGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoQmVudG9uU2Fuc0ZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnMTAwJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQmVudG9uU2Fuc01lZGl1bUZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShCZW50b25TYW5zRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdib2xkJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKFxuICAgICAgICAgIG5ldyBGb250RmFjZShCZW50b25TYW5zTG93RFBJRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdib2xkJywgc3R5bGU6ICdub3JtYWwnIH0pLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBCZW50b25TYW5zU2VtaURlbWlGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChcbiAgICAgICAgICBuZXcgRm9udEZhY2UoQmVudG9uU2Fuc0xvd0RQSUZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBCZW50b25TYW5zQm9va0l0YWxpY0ZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShCZW50b25TYW5zRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyBzdHlsZTogJ2l0YWxpYycgfSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBCZW50b25TYW5zU2VtaURlbWlJdGFsaWNGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoQmVudG9uU2Fuc0xvd0RQSUZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgc3R5bGU6ICdpdGFsaWMnIH0pKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgJ2F0dGVtcHRlZCB0byBsb2FkIHVuc3VwcG9ydGVkIGZvbnQ6ICR7Zm9udE5hbWVBbmRJbmZvLmZvbnROYW1lfS4nYCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJbml0aWFsaXphdGlvbk9wdGlvbnMsIEludGVybmFsQXBpRGlzcGF0Y2hlckZhY3RvcnksIElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04sIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogTGVnYWN5SW50ZXJuYWxBcGlEaXNwYXRjaGVySG9sZGVyIGhhcyBiZWVuIG1vdmVkIChhbmQgcmVuYW1lZCkgZnJvbSBhcGktaW50ZXJuYWwtY29udHJhY3QuXG4gKiBJdCBzdXBwb3J0cyBydW5uaW5nIGEgbmV3ZXIgZXh0ZXJuYWwgbGlicmFyeSBhZ2FpbnN0IGEgcHJlIDIwMTkuMyBkZXNrdG9wLlxuICogU3RhcnRpbmcgaW4gMjAxOS4zLCB3ZSBoYXZlIGEgbWVyZ2VkIGJvb3RzdHJhcCBzdHlsZSBmb3IgYm90aCBkZXNrdG9wIGFuZCBzZXJ2ZXIuXG4gKiBJbiBhZGRpdGlvbiwgdGhlIGFscGhhIGNoZWNraW5nIHRoYXQgaXMgaGFwcGVuaW5nIGhlcmUgaXMgbm90IG5lY2Vzc2FyeSBpbiBleHRlcm5hbC1hcGktanNcbiAqICBhZnRlciAyMDE5LjMgYmVjYXVzZSB0aGF0IGNoZWNraW5nIGhhcHBlbnMgaW4gYXBpLXBsYXRmb3JtLWpzIChBcGlEaXNwYXRjaGVyVGVzdC50cylcbiAqIFRGU0lEOiAxMDkxNTYxIHRyYWNrcyBhbiBpbXByb3ZlbWVudCB0byB0aGlzIHN5c3RlbSB0byBtYWtlIGl0IGxlc3MgY29tcGxleCBhbmQgdGllIGl0IGRpcmVjdGx5IHRvXG4gKiAgdGFibGVhdSBiZXRhIHJlbGVhc2UgdmVyc2lvbnMuXG4gKiBAZGVwcmVjYXRlZFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuZXhwb3J0IG5hbWVzcGFjZSBMZWdhY3lJbnRlcm5hbEFwaURpc3BhdGNoZXJIb2xkZXIge1xuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXREZXNrdG9wRGlzcGF0Y2hlclByb21pc2Uob3B0aW9ucz86IEluaXRpYWxpemF0aW9uT3B0aW9ucyk6IFByb21pc2U8SW50ZXJuYWxBcGlEaXNwYXRjaGVyRmFjdG9yeT4gfCB1bmRlZmluZWQge1xuICAgIGlmICgoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMuaXNBbHBoYSA9PT0gJ3VuZGVmaW5lZCcpICYmICF3aW5kb3cuX193YXJuaW5nSXNzdWVkKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKCdUaGlzIGlzIGEgYmV0YSB2ZXJzaW9uIG9mIHRoZSBFeHRlbnNpb25zIEFQSS4gUGxlYXNlIHVwZ3JhZGUgdG8gYW4gb2ZmaWNpYWwgcmVsZWFzZS4nKTtcbiAgICAgIHdpbmRvdy5fX3dhcm5pbmdJc3N1ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uaXNBbHBoYSAmJiB3aW5kb3cuX19wbGF0Zm9ybUlzT2ZmaWNpYWxSZWxlYXNlKSB7XG4gICAgICB3aW5kb3cuX190YWJsZWF1RGVza3RvcERpc3BhdGNoZXJcbiAgICAgICAgLnRoZW4oKGRpc3BhdGNoZXJGYWN0b3J5KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJGYWN0b3J5KElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04pO1xuICAgICAgICAgIGRpc3BhdGNoZXIuZXhlY3V0ZShWZXJiSWQuQmxvY2tFeHRlbnNpb24sIHt9KS5jYXRjaCgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHdpbGwgYmUgdW5kZWZpbmVkIGlmIHByb21pc2UgaXMgcmVqZWN0ZWQgb3IgdGhyb3dzXG4gICAgcmV0dXJuIHdpbmRvdy5fX3RhYmxlYXVEZXNrdG9wRGlzcGF0Y2hlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGhhc0Rlc2t0b3BBcGlEaXNwYXRjaGVyUHJvbWlzZShvcHRpb25zPzogSW5pdGlhbGl6YXRpb25PcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhZ2V0RGVza3RvcERpc3BhdGNoZXJQcm9taXNlKG9wdGlvbnMpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX190YWJsZWF1RGVza3RvcERpc3BhdGNoZXI6IFByb21pc2U8SW50ZXJuYWxBcGlEaXNwYXRjaGVyRmFjdG9yeT47XG4gICAgX19wbGF0Zm9ybUlzT2ZmaWNpYWxSZWxlYXNlOiBib29sZWFuO1xuICAgIF9fd2FybmluZ0lzc3VlZDogYm9vbGVhbjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4dGVuc2lvblNldHRpbmdzSW5mbywgTm90aWZpY2F0aW9uSWQsIFNldHRpbmdzRXZlbnQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LFxuICBFcnJvckhlbHBlcnMsXG4gIE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gIFNlcnZpY2VOYW1lcyxcbiAgU2luZ2xlRXZlbnRNYW5hZ2VyLFxuICBTaW5nbGVFdmVudE1hbmFnZXJJbXBsLFxuICBUYWJsZWF1RXJyb3IsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50IH0gZnJvbSAnLi4vRXZlbnRzL1RhYmxlYXVFdmVudCc7XG5pbXBvcnQgeyBFeHRlbnNpb25zU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuaW1wb3J0IHsgU2V0dGluZ3NDb2xsZWN0aW9uLCBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXR0aW5nc1NlcnZpY2UnO1xuXG5jbGFzcyBTZXR0aW5nc0NoYW5nZWRFdmVudCBleHRlbmRzIFRhYmxlYXVFdmVudCBpbXBsZW1lbnRzIENvbnRyYWN0LlNldHRpbmdzQ2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX25ld1NldHRpbmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgc3VwZXIoQ29udHJhY3QuVGFibGVhdUV2ZW50VHlwZS5TZXR0aW5nc0NoYW5nZWQpO1xuICB9XG5cbiAgcHVibGljIGdldCBuZXdTZXR0aW5ncygpOiBTZXR0aW5nc0NvbGxlY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9uZXdTZXR0aW5ncztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NJbXBsIHtcbiAgcHJpdmF0ZSBzdGF0aWMgQVNZTkNfU0FWRV9JTl9QUk9HUkVTUyA9ICdBc3luYyBTYXZlIGlzIGluIHByb2dyZXNzLCB1cGRhdGluZyBzZXR0aW5ncyBpcyBub3QgYWxsb3dlZC4nO1xuICBwcml2YXRlIF9pc01vZGlmaWVkOiBib29sZWFuO1xuICBwcml2YXRlIF9jdXJyZW50U2V0dGluZ3M6IFNldHRpbmdzQ29sbGVjdGlvbjtcblxuICAvLyBTaW5jZSBwcm9taXNlcyBjYW4ndCBiZSBpbnRyb3NwZWN0ZWQgZm9yIHN0YXRlLCBrZWVwIGEgdmFyaWFibGUgdGhhdFxuICAvLyBpbmRpY2F0ZXMgYSBzYXZlIGlzIGluIHByb2dyZXNzLCBzbyB0aGF0IHNldC9lcmFzZSBjYW4ndCBiZSBjYWxsZWQgZHVyaW5nIGEgc2F2ZS5cbiAgcHJpdmF0ZSBfc2F2ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2V0dGluZ3NJbmZvOiBFeHRlbnNpb25TZXR0aW5nc0luZm8pIHtcbiAgICB0aGlzLmluaXRpYWxpemVTZXR0aW5ncyhzZXR0aW5nc0luZm8pO1xuICB9XG5cbiAgcHVibGljIGVyYXNlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihrZXksICdrZXknKTtcblxuICAgIC8vIE9ubHkgbWFrZSBhIG1vZGlmaWNhdGlvbiBpZiB3ZSBoYXZlIHRoZSBrZXkgYWxyZWFkeVxuICAgIGlmICh0aGlzLl9jdXJyZW50U2V0dGluZ3Nba2V5XSkge1xuICAgICAgdGhpcy52ZXJpZnlTZXR0aW5nc0FyZVVubG9ja2VkKCk7XG5cbiAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50U2V0dGluZ3Nba2V5XTtcbiAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoa2V5LCAna2V5Jyk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFNldHRpbmdzW2tleV07XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxsKCk6IFNldHRpbmdzQ29sbGVjdGlvbiB7XG4gICAgLy8gUmV0dXJucyBhIG11dGFibGUgY29weSBvZiB0aGUgc2V0dGluZ3NcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY3VycmVudFNldHRpbmdzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNNb2RpZmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNNb2RpZmllZDtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQXN5bmMoKTogUHJvbWlzZTxTZXR0aW5nc0NvbGxlY3Rpb24+IHtcbiAgICB0aGlzLnZlcmlmeVNldHRpbmdzQXJlVW5sb2NrZWQoKTtcblxuICAgIC8vIEp1c3QgcmVzb2x2ZSBpbW1lZGlhdGVseSBpZiBzZXR0aW5ncyBhcmUgdW5jaGFuZ2VkXG4gICAgaWYgKCF0aGlzLl9pc01vZGlmaWVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlPFNldHRpbmdzQ29sbGVjdGlvbj4odGhpcy5fY3VycmVudFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zYXZlSW5Qcm9ncmVzcyA9IHRydWU7XG5cbiAgICAvLyBVc2UgdGhlIHNldHRpbmdzIHNlcnZpY2UgdG8gc2F2ZSBzZXR0aW5ncyB0byB0d2JcbiAgICBjb25zdCBzZXR0aW5nc1NlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNldHRpbmdzU2VydmljZT4oXG4gICAgICBFeHRlbnNpb25zU2VydmljZU5hbWVzLlNldHRpbmdzU2VydmljZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldHRpbmdzU2VydmljZS5zYXZlU2V0dGluZ3NBc3luYyh0aGlzLl9jdXJyZW50U2V0dGluZ3MpLnRoZW48U2V0dGluZ3NDb2xsZWN0aW9uPihcbiAgICAgIChuZXdTZXR0aW5ncykgPT4ge1xuICAgICAgICB0aGlzLl9zYXZlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc01vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2V0dGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTZXR0aW5ncyA9IG5ld1NldHRpbmdzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fY3VycmVudFNldHRpbmdzLCBuZXdTZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1NldHRpbmdzO1xuICAgICAgfSxcbiAgICAgIChyZWFzb24pID0+IHtcbiAgICAgICAgdGhpcy5fc2F2ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVN0cmluZ1BhcmFtZXRlcihrZXksICdrZXknKTsgLy8gS2V5IHNob3VsZG4ndCBiZSBhbiBlbXB0eSBzdHJpbmcuXG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcih2YWx1ZSwgJ3ZhbHVlJyk7IC8vIEVtcHR5IHN0cmluZyB2YWx1ZSBpcyBhbGxvd2VkLlxuICAgIHRoaXMudmVyaWZ5U2V0dGluZ3NBcmVVbmxvY2tlZCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFNldHRpbmdzW2tleV0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc01vZGlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBhbGwgZXZlbnRzIHJlbGV2YW50IHRvIHNldHRpbmdzIG9iamVjdC4gIFRoaXMgaXMgb25seSBhIHNldHRpbmdzVXBkYXRlIGV2ZW50IGN1cnJlbnRseS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj59IENvbGxlY3Rpb24gb2YgZXZlbnQgbWFuYWdlcnMgdG8gcGFzcyB0byBhbiBFdmVudExpc3RlbmVyTWFuYWdlci5cbiAgICovXG4gIHB1YmxpYyBpbml0aWFsaXplRXZlbnRzKCk6IEFycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPigpO1xuICAgIGxldCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPE5vdGlmaWNhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5Ob3RpZmljYXRpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBzZXJ2aWNlIHJlZ2lzdGVyZWQsIGp1c3QgcmV0dXJuXG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBjb25zdCBzZXR0aW5nc0NoYW5nZWRFdmVudCA9IG5ldyBTaW5nbGVFdmVudE1hbmFnZXJJbXBsPFNldHRpbmdzQ2hhbmdlZEV2ZW50PihDb250cmFjdC5UYWJsZWF1RXZlbnRUeXBlLlNldHRpbmdzQ2hhbmdlZCk7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5yZWdpc3RlckhhbmRsZXIoXG4gICAgICBOb3RpZmljYXRpb25JZC5TZXR0aW5nc0NoYW5nZWQsXG4gICAgICAoKSA9PiB0cnVlLFxuICAgICAgKGV2ZW50OiBTZXR0aW5nc0V2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTZXR0aW5ncyA9IGV2ZW50Lm5ld1NldHRpbmdzO1xuICAgICAgICBzZXR0aW5nc0NoYW5nZWRFdmVudC50cmlnZ2VyRXZlbnQoKCkgPT4gbmV3IFNldHRpbmdzQ2hhbmdlZEV2ZW50KGV2ZW50Lm5ld1NldHRpbmdzKSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXN1bHRzLnB1c2goc2V0dGluZ3NDaGFuZ2VkRXZlbnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTZXR0aW5ncyhzZXR0aW5nc0luZm86IEV4dGVuc2lvblNldHRpbmdzSW5mbyk6IHZvaWQge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoc2V0dGluZ3NJbmZvLCAnc2V0dGluZ3NJbmZvJyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihzZXR0aW5nc0luZm8uc2V0dGluZ3NWYWx1ZXMsICdzZXR0aW5nc0luZm8uU2V0dGluZ3NWYWx1ZXMnKTtcblxuICAgIHRoaXMuX2N1cnJlbnRTZXR0aW5ncyA9IHNldHRpbmdzSW5mby5zZXR0aW5nc1ZhbHVlcztcblxuICAgIC8vIFJlc2V0IHRoZSBpc01vZGlmaWVkIGZsYWdcbiAgICB0aGlzLl9pc01vZGlmaWVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBoZWxwZXIgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IGxvY2FsIHVwZGF0ZSB0byB0aGlzLmN1cnJlbnRTZXR0aW5ncy5cbiAgICogQ2hlY2tzIGlmIGEgY3VycmVudCBzYXZlIGNhbGwgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgYW5kIHRocm93cyBhbiBlcnJvciBpZiBzby5cbiAgICovXG4gIHByaXZhdGUgdmVyaWZ5U2V0dGluZ3NBcmVVbmxvY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc2F2ZUluUHJvZ3Jlc3MpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRXJyb3JDb2Rlcy5TZXR0aW5nU2F2ZUluUHJvZ3Jlc3MsIFNldHRpbmdzSW1wbC5BU1lOQ19TQVZFX0lOX1BST0dSRVNTKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcblxuZXhwb3J0IGNvbnN0IFRhYmxlYXVCb29rRm9udEZhbWlseU5hbWUgPSAnVGFibGVhdSBCb29rJztcbmV4cG9ydCBjb25zdCBUYWJsZWF1TGlnaHRGb250RmFtaWx5TmFtZSA9ICdUYWJsZWF1IExpZ2h0JztcbmV4cG9ydCBjb25zdCBUYWJsZWF1UmVndWxhckZvbnRGYW1pbHlOYW1lID0gJ1RhYmxlYXUgUmVndWxhcic7XG5leHBvcnQgY29uc3QgVGFibGVhdU1lZGl1bUZvbnRGYW1pbHlOYW1lID0gJ1RhYmxlYXUgTWVkaXVtJztcbmV4cG9ydCBjb25zdCBUYWJsZWF1U2VtaWJvbGRGb250RmFtaWx5TmFtZSA9ICdUYWJsZWF1IFNlbWlib2xkJztcbmV4cG9ydCBjb25zdCBUYWJsZWF1Qm9sZEZvbnRGYW1pbHlOYW1lID0gJ1RhYmxlYXUgQm9sZCc7XG5cbmV4cG9ydCBjb25zdCBUYWJsZWF1Qm9va0ZvbnRGYWNlTmFtZSA9ICdUYWJsZWF1IEJvb2snO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVCb2xkRm9udEZhY2VOYW1lID0gJ1RhYmxlYXUgQm9sZCc7XG5leHBvcnQgY29uc3QgVGFibGVhdUxpZ2h0Rm9udEZhY2VOYW1lID0gJ1RhYmxlYXUgTGlnaHQnO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVNZWRpdW1Gb250RmFjZU5hbWUgPSAnVGFibGVhdSBNZWRpdW0nO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVSZWd1bGFyRm9udEZhY2VOYW1lID0gJ1RhYmxlYXUgUmVndWxhcic7XG5leHBvcnQgY29uc3QgVGFibGVhdVNlbWlCb2xkRm9udEZhY2VOYW1lID0gJ1RhYmxlYXUgU2VtaSBCb2xkJztcblxuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZFRhYmxlYXVGb250RmFjZXM6IE1vZGVsW10gPSBbXG4gIFRhYmxlYXVCb29rRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1Qm9sZEZvbnRGYWNlTmFtZSxcbiAgVGFibGVhdUxpZ2h0Rm9udEZhY2VOYW1lLFxuICBUYWJsZWF1TWVkaXVtRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1UmVndWxhckZvbnRGYWNlTmFtZSxcbiAgVGFibGVhdVNlbWlCb2xkRm9udEZhY2VOYW1lLFxuXTtcbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERpYWxvZ1VwZGF0ZUV2ZW50LCBOb3RpZmljYXRpb25JZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIE5vdGlmaWNhdGlvblNlcnZpY2UsIFNlcnZpY2VOYW1lcywgVGFibGVhdUVycm9yIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvVUlTZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIFVJSW1wbCB7XG4gIHB1YmxpYyBkaXNwbGF5RGlhbG9nQXN5bmModXJsOiBzdHJpbmcsIHBheWxvYWQ/OiBzdHJpbmcsIG9wdGlvbnM/OiBDb250cmFjdC5EaWFsb2dPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB1aVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFVJU2VydmljZT4oRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5VSVNlcnZpY2UpO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPE5vdGlmaWNhdGlvblNlcnZpY2U+KFxuICAgICAgU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbixcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVpU2VydmljZVxuICAgICAgICAuZGlzcGxheURpYWxvZ0FzeW5jKHVybCwgcGF5bG9hZCB8fCAnJywgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVucmVnaXN0ZXJGbiA9IG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgICAgICAgTm90aWZpY2F0aW9uSWQuRXh0ZW5zaW9uRGlhbG9nVXBkYXRlLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBMZXQgdGhyb3VnaCBhbnkgZGlhbG9nIHVwZGF0ZSBldmVudFxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXZlbnQ6IERpYWxvZ1VwZGF0ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChldmVudC5pc0Nsb3NlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xvc2VQYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnY2xvc2VQYXlsb2FkIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKGV2ZW50LmNsb3NlUGF5bG9hZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5EaWFsb2dDbG9zZWRCeVVzZXIsICdFeHRlbnNpb24gZGlhbG9nIGNsb3NlZCBieSB1c2VyLicpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHVucmVnaXN0ZXJGbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEaWFsb2cocGF5bG9hZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHVpU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8VUlTZXJ2aWNlPihFeHRlbnNpb25zU2VydmljZU5hbWVzLlVJU2VydmljZSk7XG5cbiAgICB1aVNlcnZpY2UuY2xvc2VEaWFsb2cocGF5bG9hZCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VEZXRhaWxzLCBUYWJsZWF1RXZlbnRUeXBlLCBXb3JrYm9va0Zvcm1hdHRpbmcgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkTGF5b3V0RXZlbnQsIE5vdGlmaWNhdGlvbklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeSxcbiAgRGFzaGJvYXJkSW1wbCxcbiAgRGFzaGJvYXJkT2JqZWN0SW1wbCxcbiAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgU2VydmljZU5hbWVzLFxuICBTaW5nbGVFdmVudE1hbmFnZXIsXG4gIFNpbmdsZUV2ZW50TWFuYWdlckltcGwsXG4gIFdvcmtzaGVldEltcGwsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vRXZlbnRzL0Rhc2hib2FyZExheW91dENoYW5nZWRFdmVudCc7XG5pbXBvcnQgeyBXb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi9FdmVudHMvV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50JztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRPYmplY3QgfSBmcm9tICcuL0Rhc2hib2FyZE9iamVjdCc7XG5pbXBvcnQgeyBTaGVldCB9IGZyb20gJy4vU2hlZXQnO1xuaW1wb3J0IHsgV29ya3NoZWV0IH0gZnJvbSAnLi9Xb3Jrc2hlZXQnO1xuXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkIGV4dGVuZHMgU2hlZXQgaW1wbGVtZW50cyBDb250cmFjdC5FeHRlbnNpb25EYXNoYm9hcmQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfZGFzaGJvYXJkSW1wbDogRGFzaGJvYXJkSW1wbCkge1xuICAgIHN1cGVyKF9kYXNoYm9hcmRJbXBsKTtcbiAgICBfZGFzaGJvYXJkSW1wbC5pbml0aWFsaXplV2l0aFB1YmxpY0ludGVyZmFjZXMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKS5mb3JFYWNoKChlKSA9PiB0aGlzLmFkZE5ld0V2ZW50VHlwZShlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdvcmtzaGVldHMoKTogQXJyYXk8Q29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwud29ya3NoZWV0c0ltcGwubWFwKCh3b3Jrc2hlZXRJbXBsOiBXb3Jrc2hlZXRJbXBsKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFdvcmtzaGVldCh3b3Jrc2hlZXRJbXBsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2JqZWN0cygpOiBBcnJheTxDb250cmFjdC5FeHRlbnNpb25EYXNoYm9hcmRPYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbC5vYmplY3RzLm1hcCgoZGFzaGJvYXJkT2JqZWN0SW1wbDogRGFzaGJvYXJkT2JqZWN0SW1wbCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBEYXNoYm9hcmRPYmplY3QoZGFzaGJvYXJkT2JqZWN0SW1wbCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZURhc2hib2FyZE9iamVjdElkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwuYWN0aXZlRGFzaGJvYXJkT2JqZWN0SWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZURhc2hib2FyZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbC5hY3RpdmVEYXNoYm9hcmROYW1lO1xuICB9XG5cbiAgcHVibGljIHNldFpvbmVWaXNpYmlsaXR5QXN5bmMoem9uZVZpc2liaWxpdHlNYXA6IENvbnRyYWN0LlpvbmVWaXNpYmlsaXR5TWFwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwuc2V0RGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eUFzeW5jKHpvbmVWaXNpYmlsaXR5TWFwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5QXN5bmMoZGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcDogQ29udHJhY3QuRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRJbXBsLnNldERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlBc3luYyhkYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5TWFwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXNoYm9hcmRPYmplY3RCeUlkKGRhc2hib2FyZE9iamVjdElkOiBudW1iZXIpOiBEYXNoYm9hcmRPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHpvbmUgPSB0aGlzLl9kYXNoYm9hcmRJbXBsLmdldERhc2hib2FyZE9iamVjdEJ5SWQoZGFzaGJvYXJkT2JqZWN0SWQpO1xuICAgIHJldHVybiB6b25lICYmIG5ldyBEYXNoYm9hcmRPYmplY3Qoem9uZSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZUV2ZW50cygpOiBBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IEFycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj4oKTtcblxuICAgIC8vIEluaXRpYWxpemluZyBldmVudHMgYW5kIHJlZ2lzdGVyaW5nIG5vdGlmaWNhdGlvbiBzZXJ2aWNlXG4gICAgbGV0IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2U7XG5cbiAgICB0cnkge1xuICAgICAgbm90aWZpY2F0aW9uU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Tm90aWZpY2F0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGlzIHNlcnZpY2UgcmVnaXN0ZXJlZCwganVzdCByZXR1cm4gKGFsbG93cyB1bml0IHRlc3Rpbmcgd2l0aG91dCBOb3RpZmljYXRpb25TZXJ2aWNlIG1vY2spXG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBjb25zdCBkYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQgPSBuZXcgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbDxEYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQ+KFRhYmxlYXVFdmVudFR5cGUuRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZCk7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5yZWdpc3RlckhhbmRsZXIoXG4gICAgICBOb3RpZmljYXRpb25JZC5EYXNoYm9hcmRMYXlvdXRDaGFuZ2VkLFxuICAgICAgKCkgPT4gdHJ1ZSxcbiAgICAgIChldmVudDogRGFzaGJvYXJkTGF5b3V0RXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZGFzaGJvYXJkT2JqZWN0Q2hhbmdlczogRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscyA9IHRoaXMuX2Rhc2hib2FyZEltcGwudXBkYXRlWm9uZXMoXG4gICAgICAgICAgZXZlbnQuem9uZXMsXG4gICAgICAgICAgZXZlbnQuYWN0aXZlWm9uZUlkLFxuICAgICAgICAgIGV2ZW50LmFjdGl2ZURhc2hib2FyZE5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIGRhc2hib2FyZExheW91dENoYW5nZWRFdmVudC50cmlnZ2VyRXZlbnQoKCkgPT4gbmV3IERhc2hib2FyZExheW91dENoYW5nZWRFdmVudChkYXNoYm9hcmRPYmplY3RDaGFuZ2VzKSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXN1bHRzLnB1c2goZGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50KTtcblxuICAgIGNvbnN0IHdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudCA9IG5ldyBTaW5nbGVFdmVudE1hbmFnZXJJbXBsPFdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudD4oXG4gICAgICBUYWJsZWF1RXZlbnRUeXBlLldvcmtib29rRm9ybWF0dGluZ0NoYW5nZWQsXG4gICAgKTtcblxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgTm90aWZpY2F0aW9uSWQuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZCxcbiAgICAgICgpID0+IHRydWUsXG4gICAgICAoZXZlbnRGb3JtYXR0aW5nOiBXb3JrYm9va0Zvcm1hdHRpbmcpID0+IHtcbiAgICAgICAgd29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50LnRyaWdnZXJFdmVudCgoKSA9PiBuZXcgV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50KGV2ZW50Rm9ybWF0dGluZykpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmVzdWx0cy5wdXNoKHdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlQW5kUmVzaXplRGFzaGJvYXJkT2JqZWN0c0FzeW5jKFxuICAgIGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5OiBDb250cmFjdC5EYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwubW92ZUFuZFJlc2l6ZURhc2hib2FyZE9iamVjdHNBc3luYyhkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheSk7XG4gIH1cblxuICBwdWJsaWMgcmVwbGF5QW5pbWF0aW9uQXN5bmMocmVwbGF5U3BlZWQ6IENvbnRyYWN0LlJlcGxheVNwZWVkVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRJbXBsLnJlcGxheUFuaW1hdGlvbkFzeW5jKHJlcGxheVNwZWVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5GaWx0ZXI+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwuZ2V0RmlsdGVyc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlGaWx0ZXJBc3luYyhcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IEFycmF5PHN0cmluZz4sXG4gICAgdXBkYXRlVHlwZTogQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSxcbiAgICBvcHRpb25zOiBDb250cmFjdC5GaWx0ZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRJbXBsLmFwcGx5RmlsdGVyQXN5bmMoZmllbGROYW1lLCB2YWx1ZXMsIHVwZGF0ZVR5cGUsIG9wdGlvbnMpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT2JqZWN0SW1wbCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkIH0gZnJvbSAnLi9EYXNoYm9hcmQnO1xuaW1wb3J0IHsgV29ya3NoZWV0IH0gZnJvbSAnLi9Xb3Jrc2hlZXQnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkYXNoYm9hcmQgb2JqZWN0cyAtIHRoZSB6b25lcyBpbiBhIGRhc2hib2FyZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhc2hib2FyZE9iamVjdCBpbXBsZW1lbnRzIENvbnRyYWN0LkV4dGVuc2lvbkRhc2hib2FyZE9iamVjdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kYXNoYm9hcmRPYmplY3RJbXBsOiBEYXNoYm9hcmRPYmplY3RJbXBsKSB7fVxuXG4gIHB1YmxpYyBnZXQgZGFzaGJvYXJkKCk6IENvbnRyYWN0LkV4dGVuc2lvbkRhc2hib2FyZCB7XG4gICAgcmV0dXJuIG5ldyBEYXNoYm9hcmQodGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC5kYXNoYm9hcmRJbXBsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBDb250cmFjdC5EYXNoYm9hcmRPYmplY3RUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC50eXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBwb3NpdGlvbigpOiBDb250cmFjdC5Qb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZE9iamVjdEltcGwucG9zaXRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemUoKTogQ29udHJhY3QuU2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZE9iamVjdEltcGwuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0KCk6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtzaGVldCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuX2Rhc2hib2FyZE9iamVjdEltcGwud29ya3NoZWV0SW1wbCkge1xuICAgICAgcmV0dXJuIG5ldyBXb3Jrc2hlZXQodGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC53b3Jrc2hlZXRJbXBsKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRPYmplY3RJbXBsLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRmxvYXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZE9iamVjdEltcGwuaXNGbG9hdGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRPYmplY3RJbXBsLmlzVmlzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC5pZDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeSxcbiAgRXJyb3JIZWxwZXJzLFxuICBFdmVudExpc3RlbmVyTWFuYWdlcixcbiAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUGFyYW1ldGVySW1wbCxcbiAgU2VydmljZU5hbWVzLFxuICBTaW5nbGVFdmVudE1hbmFnZXIsXG4gIFNpbmdsZUV2ZW50TWFuYWdlckltcGwsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgUGFyYW1ldGVyQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vRXZlbnRzL1BhcmFtZXRlckNoYW5nZWRFdmVudCc7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQYXJhbWV0ZXIgY29udHJhY3QuIENhbGxzIGRvd24gdG8gdGhlIGltcGxcbiAqIGNsYXNzIGZvciBhbG1vc3QgYWxsIG9mIHRoZSB3b3JrIGl0IGRvZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXIgZXh0ZW5kcyBFdmVudExpc3RlbmVyTWFuYWdlciBpbXBsZW1lbnRzIENvbnRyYWN0LlBhcmFtZXRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmFtZXRlckltcGw6IFBhcmFtZXRlckltcGwsIHNoZWV0OiBDb250cmFjdC5FeHRlbnNpb25TaGVldCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIG91ciBldmVudCBoYW5kbGluZyBmb3IgdGhpcyBjbGFzc1xuICAgIHRoaXMuaW5pdGlhbGl6ZUV2ZW50cyhzaGVldCkuZm9yRWFjaCgoZSkgPT4gdGhpcy5hZGROZXdFdmVudFR5cGUoZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVySW1wbC5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJbXBsLmN1cnJlbnRWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YVR5cGUoKTogQ29udHJhY3QuRGF0YVR5cGUge1xuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlckltcGwuZGF0YVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsbG93YWJsZVZhbHVlcygpOiBDb250cmFjdC5QYXJhbWV0ZXJEb21haW5SZXN0cmljdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVySW1wbC5hbGxvd2FibGVWYWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVySW1wbC5pZDtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VWYWx1ZUFzeW5jKG5ld1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSk6IFByb21pc2U8Q29udHJhY3QuRGF0YVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVySW1wbC5jaGFuZ2VWYWx1ZUFzeW5jKG5ld1ZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHdoaWNoIGdvZXMgdGhyb3VnaCBhbmQgcmVnaXN0ZXJzIGVhY2ggZXZlbnQgdHlwZSB0aGlzIGltcGwga25vd3MgYWJvdXRcbiAgICogd2l0aCB0aGUgTm90aWZpY2F0aW9uU2VydmljZS4gSXQgcmV0dXJucyBhbiBhcnJheSBvZiBTaW5nbGVFdmVudE1hbmFnZXIgb2JqZWN0cyB3aGljaFxuICAgKiBjYW4gdGhlbiBiZSBwYXNzZWQgdG8gYW4gRXZlbnRMaXN0ZW5lck1hbmFnZXIgdG8gaGFuZGxlIHVzZXIgcmVnaXN0cmF0aW9uIC8gdW5yZWdpc3RyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzaGVldCBUaGUgc2hlZXQgb2JqZWN0IHdoaWNoIHdpbGwgYmUgaW5jbHVkZWQgd2l0aCB0aGUgZXZlbnQgbm90aWZpY2F0aW9uc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPn0gQ29sbGVjdGlvbiBvZiBldmVudCBtYW5hZ2VycyB0byBwYXNzIHRvIGFuIEV2ZW50TGlzdGVuZXJNYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZUV2ZW50cyhzaGVldDogQ29udHJhY3QuRXh0ZW5zaW9uU2hlZXQpOiBBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5SW50ZXJuYWxWYWx1ZShzaGVldCwgJ3NoZWV0Jyk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gbmV3IEFycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj4oKTtcbiAgICBsZXQgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZTtcblxuICAgIHRyeSB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxOb3RpZmljYXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuTm90aWZpY2F0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoaXMgc2VydmljZSByZWdpc3RlcmVkLCBqdXN0IHJldHVyblxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGV2ZW50IG1hbmFnZXJzIHdlJ2xsIG5lZWQgKG9uZSBmb3IgZWFjaCBldmVudCB0eXBlKVxuICAgIGNvbnN0IHBhcmFtZXRlckV2ZW50ID0gbmV3IFNpbmdsZUV2ZW50TWFuYWdlckltcGw8UGFyYW1ldGVyQ2hhbmdlZEV2ZW50PihDb250cmFjdC5UYWJsZWF1RXZlbnRUeXBlLlBhcmFtZXRlckNoYW5nZWQpO1xuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgTm90aWZpY2F0aW9uSWQuUGFyYW1ldGVyQ2hhbmdlZCxcbiAgICAgIChtb2RlbCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBtb2RlbCBhcyBzdHJpbmc7XG4gICAgICAgIHJldHVybiBmaWVsZE5hbWUgPT09IHRoaXMucGFyYW1ldGVySW1wbC5pZDtcbiAgICAgIH0sXG4gICAgICAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcGFyYW1ldGVyRXZlbnQudHJpZ2dlckV2ZW50KCgpID0+IG5ldyBQYXJhbWV0ZXJDaGFuZ2VkRXZlbnQoZmllbGROYW1lLCBzaGVldCkpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmVzdWx0cy5wdXNoKHBhcmFtZXRlckV2ZW50KTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXZlbnRMaXN0ZW5lck1hbmFnZXIsIFNoZWV0SW1wbCwgVGFibGVhdUVycm9yIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuL1BhcmFtZXRlcic7XG5cbmV4cG9ydCBjbGFzcyBTaGVldCBleHRlbmRzIEV2ZW50TGlzdGVuZXJNYW5hZ2VyIGltcGxlbWVudHMgQ29udHJhY3QuRXh0ZW5zaW9uU2hlZXQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfc2hlZXRJbXBsOiBTaGVldEltcGwpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW1wbC5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBzaGVldFR5cGUoKTogQ29udHJhY3QuU2hlZXRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXRJbXBsLnNoZWV0VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBDb250cmFjdC5TaXplIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkU2l6ZSh0aGlzLl9zaGVldEltcGwuc2l6ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaGVldEltcGwuc2l6ZTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuSW1wbGVtZW50YXRpb25FcnJvciwgJ1NpemUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRTaXplKHNpemU6IGFueSk6IHNpemUgaXMgQ29udHJhY3QuU2l6ZSB7XG4gICAgY29uc3QgdGVzdFNpemUgPSBzaXplIGFzIENvbnRyYWN0LlNpemU7XG4gICAgaWYgKHRlc3RTaXplLndpZHRoICE9PSB1bmRlZmluZWQgJiYgdGVzdFNpemUuaGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kUGFyYW1ldGVyQXN5bmMocGFyYW1ldGVyTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDb250cmFjdC5QYXJhbWV0ZXIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXRJbXBsLmZpbmRQYXJhbWV0ZXJBc3luYyhwYXJhbWV0ZXJOYW1lKS50aGVuKChwYXJhbWV0ZXJJbXBsKSA9PiB7XG4gICAgICBpZiAocGFyYW1ldGVySW1wbCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Q29udHJhY3QuUGFyYW1ldGVyPigocmVzb2x2ZSkgPT4gcmVzb2x2ZShuZXcgUGFyYW1ldGVyKHBhcmFtZXRlckltcGwsIHRoaXMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dW5kZWZpbmVkPigocmVzb2x2ZSkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5QYXJhbWV0ZXI+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW1wbC5nZXRQYXJhbWV0ZXJzQXN5bmMoKS50aGVuKChwYXJhbWV0ZXJzSW1wbCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlcnNJbXBsLm1hcCgocGFyYW1ldGVySW1wbCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlcihwYXJhbWV0ZXJJbXBsLCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uV29ya2Jvb2tJbXBsIH0gZnJvbSAnLi4vSW1wbC9FeHRlbnNpb25Xb3JrYm9va0ltcGwnO1xuXG5leHBvcnQgY2xhc3MgV29ya2Jvb2sgaW1wbGVtZW50cyBDb250cmFjdC5FeHRlbnNpb25Xb3JrYm9vayB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF93b3JrYm9va0ltcGw6IEV4dGVuc2lvbldvcmtib29rSW1wbCkge31cblxuICBwdWJsaWMgZ2V0QWxsRGF0YVNvdXJjZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkRhdGFTb3VyY2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtib29rSW1wbC5nZXRBbGxEYXRhU291cmNlc0FzeW5jKCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDb2x1bW4sIEZpbHRlclVwZGF0ZVR5cGUsIFNlbGVjdGlvblVwZGF0ZVR5cGUsIFRhYmxlYXVFdmVudFR5cGUsIFRvb2x0aXBDb250ZXh0IH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEZpbHRlckV2ZW50LCBOb3RpZmljYXRpb25JZCwgU3VtbWFyeURhdGFFdmVudCwgVmlzdWFsSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LFxuICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICBTZXJ2aWNlTmFtZXMsXG4gIFNpbmdsZUV2ZW50TWFuYWdlcixcbiAgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbCxcbiAgVGFibGVhdUVycm9yLFxuICBXb3Jrc2hlZXRJbXBsLFxufSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IEZpbHRlckNoYW5nZWRFdmVudCB9IGZyb20gJy4uL0V2ZW50cy9GaWx0ZXJDaGFuZ2VkRXZlbnQnO1xuaW1wb3J0IHsgTWFya3NTZWxlY3RlZEV2ZW50IH0gZnJvbSAnLi4vRXZlbnRzL01hcmtzU2VsZWN0ZWRFdmVudCc7XG5pbXBvcnQgeyBTdW1tYXJ5RGF0YUNoYW5nZWRFdmVudCB9IGZyb20gJy4uL0V2ZW50cy9TdW1tYXJ5RGF0YUNoYW5nZWRFdmVudCc7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuaW1wb3J0IHsgRGFzaGJvYXJkIH0gZnJvbSAnLi9EYXNoYm9hcmQnO1xuaW1wb3J0IHsgU2hlZXQgfSBmcm9tICcuL1NoZWV0JztcblxuZXhwb3J0IGNsYXNzIFdvcmtzaGVldCBleHRlbmRzIFNoZWV0IGltcGxlbWVudHMgQ29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfd29ya3NoZWV0SW1wbDogV29ya3NoZWV0SW1wbCkge1xuICAgIHN1cGVyKF93b3Jrc2hlZXRJbXBsKTtcblxuICAgIC8vIENhbGwgdG8gaW5pdGlhbGl6ZSBldmVudHMgYW5kIHRoZW4gY2FsbCBkb3duIHRvIHRoZSBldmVudCBsaXN0ZW5lciBtYW5hZ2VyIHRvIGhhbmRsZSB0aGluZ3NcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKS5mb3JFYWNoKChlKSA9PiB0aGlzLmFkZE5ld0V2ZW50VHlwZShlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhcmVudERhc2hib2FyZCgpOiBDb250cmFjdC5FeHRlbnNpb25EYXNoYm9hcmQge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBmb3IgRXh0ZW5zaW9ucyBpZiB0aGUgRGFzaGJvYXJkSW1wbHMgYXJlIGNyZWF0ZWQgY29ycmVjdGx5XG4gICAgaWYgKHRoaXMuX3dvcmtzaGVldEltcGwucGFyZW50RGFzaGJvYXJkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuU2hhcmVkRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgUGFyZW50IGRhc2hib2FyZCBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhc2hib2FyZCh0aGlzLl93b3Jrc2hlZXRJbXBsLnBhcmVudERhc2hib2FyZCk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB3aGljaCBnb2VzIHRocm91Z2ggYW5kIHJlZ2lzdGVycyBlYWNoIGV2ZW50IHR5cGUgdGhpcyBpbXBsIGtub3dzIGFib3V0XG4gICAqIHdpdGggdGhlIE5vdGlmaWNhdGlvblNlcnZpY2UuIEl0IHJldHVybnMgYW4gYXJyYXkgb2YgU2luZ2xlRXZlbnRNYW5hZ2VyIG9iamVjdHMgd2hpY2hcbiAgICogY2FuIHRoZW4gYmUgcGFzc2VkIHRvIGFuIEV2ZW50TGlzdGVuZXJNYW5hZ2VyIHRvIGhhbmRsZSB1c2VyIHJlZ2lzdHJhdGlvbiAvIHVucmVnaXN0cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1dvcmtzaGVldH0gd29ya3NoZWV0IFRoZSB3b3Jrc2hlZXQgb2JqZWN0IHdoaWNoIHdpbGwgYmUgaW5jbHVkZWQgd2l0aCB0aGUgZXZlbnQgbm90aWZpY2F0aW9uc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPn0gQ29sbGVjdGlvbiBvZiBldmVudCBtYW5hZ2VycyB0byBwYXNzIHRvIGFuIEV2ZW50TGlzdGVuZXJNYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZUV2ZW50cygpOiBBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IEFycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj4oKTtcbiAgICBsZXQgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZTtcblxuICAgIHRyeSB7XG4gICAgICBub3RpZmljYXRpb25TZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxOb3RpZmljYXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuTm90aWZpY2F0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoaXMgc2VydmljZSByZWdpc3RlcmVkLCBqdXN0IHJldHVyblxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGV2ZW50IG1hbmFnZXJzIHdlJ2xsIG5lZWQgKG9uZSBmb3IgZWFjaCBldmVudCB0eXBlKVxuICAgIGNvbnN0IG1hcmtzRXZlbnQgPSBuZXcgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbDxNYXJrc1NlbGVjdGVkRXZlbnQ+KFRhYmxlYXVFdmVudFR5cGUuTWFya1NlbGVjdGlvbkNoYW5nZWQpO1xuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgTm90aWZpY2F0aW9uSWQuU2VsZWN0ZWRNYXJrc0NoYW5nZWQsXG4gICAgICAobW9kZWwpID0+IHtcbiAgICAgICAgY29uc3QgdmlzdWFsSWQgPSBtb2RlbCBhcyBWaXN1YWxJZDtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzdWFsSWRzQXJlRXF1YWwodmlzdWFsSWQsIHRoaXMuX3dvcmtzaGVldEltcGwudmlzdWFsSWQpO1xuICAgICAgfSxcbiAgICAgICgpID0+IG1hcmtzRXZlbnQudHJpZ2dlckV2ZW50KCgpID0+IG5ldyBNYXJrc1NlbGVjdGVkRXZlbnQodGhpcykpLFxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJFdmVudCA9IG5ldyBTaW5nbGVFdmVudE1hbmFnZXJJbXBsPEZpbHRlckNoYW5nZWRFdmVudD4oVGFibGVhdUV2ZW50VHlwZS5GaWx0ZXJDaGFuZ2VkKTtcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVySGFuZGxlcihcbiAgICAgIE5vdGlmaWNhdGlvbklkLkZpbHRlckNoYW5nZWQsXG4gICAgICAobW9kZWwpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRXZlbnRSZXNwb25zZSA9IG1vZGVsIGFzIEZpbHRlckV2ZW50O1xuICAgICAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC52aXN1YWxJZC53b3Jrc2hlZXQgPT09IGZpbHRlckV2ZW50UmVzcG9uc2UudmlzdWFsSWQud29ya3NoZWV0O1xuICAgICAgfSxcbiAgICAgIChldmVudDogRmlsdGVyRXZlbnQpID0+IHtcbiAgICAgICAgZmlsdGVyRXZlbnQudHJpZ2dlckV2ZW50KCgpID0+IG5ldyBGaWx0ZXJDaGFuZ2VkRXZlbnQodGhpcywgZXZlbnQuZmllbGROYW1lLCBldmVudC5maWVsZElkKSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBzdW1tYXJ5RGF0YUV2ZW50ID0gbmV3IFNpbmdsZUV2ZW50TWFuYWdlckltcGw8U3VtbWFyeURhdGFDaGFuZ2VkRXZlbnQ+KFRhYmxlYXVFdmVudFR5cGUuU3VtbWFyeURhdGFDaGFuZ2VkKTtcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVySGFuZGxlcihcbiAgICAgIE5vdGlmaWNhdGlvbklkLlN1bW1hcnlEYXRhQ2hhbmdlZCxcbiAgICAgIChtb2RlbCkgPT4ge1xuICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YUV2ZW50UmVzcG9uc2UgPSBtb2RlbCBhcyBTdW1tYXJ5RGF0YUV2ZW50O1xuICAgICAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC52aXN1YWxJZC53b3Jrc2hlZXQgPT09IHN1bW1hcnlEYXRhRXZlbnRSZXNwb25zZS52aXN1YWxJZC53b3Jrc2hlZXQ7XG4gICAgICB9LFxuICAgICAgKGV2ZW50OiBTdW1tYXJ5RGF0YUV2ZW50KSA9PiB7XG4gICAgICAgIHN1bW1hcnlEYXRhRXZlbnQudHJpZ2dlckV2ZW50KCgpID0+IG5ldyBTdW1tYXJ5RGF0YUNoYW5nZWRFdmVudCh0aGlzKSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXN1bHRzLnB1c2gobWFya3NFdmVudCk7XG4gICAgcmVzdWx0cy5wdXNoKGZpbHRlckV2ZW50KTtcbiAgICByZXN1bHRzLnB1c2goc3VtbWFyeURhdGFFdmVudCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlckFzeW5jKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPixcbiAgICB1cGRhdGVUeXBlOiBGaWx0ZXJVcGRhdGVUeXBlLFxuICAgIG9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuYXBwbHlGaWx0ZXJBc3luYyhmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlSYW5nZUZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBmaWx0ZXJPcHRpb25zOiBDb250cmFjdC5SYW5nZUZpbHRlck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmFwcGx5UmFuZ2VGaWx0ZXJBc3luYyhmaWVsZE5hbWUsIGZpbHRlck9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5SGllcmFyY2hpY2FsRmlsdGVyQXN5bmMoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIHVwZGF0ZVR5cGU6IENvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUsXG4gICAgb3B0aW9uczogQ29udHJhY3QuRmlsdGVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5hcHBseUhpZXJhcmNoaWNhbEZpbHRlckFzeW5jKGZpZWxkTmFtZSwgdmFsdWVzLCB1cGRhdGVUeXBlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVJlbGF0aXZlRGF0ZUZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zOiBDb250cmFjdC5SZWxhdGl2ZURhdGVGaWx0ZXJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5hcHBseVJlbGF0aXZlRGF0ZUZpbHRlckFzeW5jKGZpZWxkTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXJBc3luYyhmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuY2xlYXJGaWx0ZXJBc3luYyhmaWVsZE5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFTb3VyY2VzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5EYXRhU291cmNlPj4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldERhdGFTb3VyY2VzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5GaWx0ZXI+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0RmlsdGVyc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRNYXJrc0FzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0U2VsZWN0ZWRNYXJrc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGlnaGxpZ2h0ZWRNYXJrc0FzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0SGlnaGxpZ2h0ZWRNYXJrc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VtbWFyeURhdGFBc3luYyhvcHRpb25zOiBDb250cmFjdC5HZXRTdW1tYXJ5RGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldFN1bW1hcnlEYXRhQXN5bmMob3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VtbWFyeURhdGFSZWFkZXJBc3luYyhwYWdlUm93Q291bnQ6IG51bWJlciwgb3B0aW9uczogQ29udHJhY3QuR2V0U3VtbWFyeURhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGVSZWFkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5nZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jKHBhZ2VSb3dDb3VudCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb2x1bW4+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nRGF0YUFzeW5jKG9wdGlvbnM6IENvbnRyYWN0LkdldFVuZGVybHlpbmdEYXRhT3B0aW9ucyk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1dvcmtzaGVldC5nZXRVbmRlcmx5aW5nRGF0YUFzeW5jIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJyArXG4gICAgICAgICdXb3Jrc2hlZXQuZ2V0VW5kZXJseWluZ1RhYmxlc0FzeW5jIGFuZCBXb3Jrc2hlZXQuZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jJyxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldFVuZGVybHlpbmdEYXRhQXN5bmMob3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ1RhYmxlc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuTG9naWNhbFRhYmxlPj4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldFVuZGVybHlpbmdUYWJsZXNBc3luYygpO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdUYWJsZURhdGFBc3luYyhsb2dpY2FsVGFibGVJZDogc3RyaW5nLCBvcHRpb25zOiBDb250cmFjdC5HZXRVbmRlcmx5aW5nRGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldFVuZGVybHlpbmdUYWJsZURhdGFBc3luYyhsb2dpY2FsVGFibGVJZCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgIGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsXG4gICAgcGFnZVJvd0NvdW50OiBudW1iZXIsXG4gICAgb3B0aW9uczogQ29udHJhY3QuR2V0VW5kZXJseWluZ0RhdGFPcHRpb25zLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luYyhsb2dpY2FsVGFibGVJZCwgcGFnZVJvd0NvdW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWaXN1YWxTcGVjaWZpY2F0aW9uQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5WaXN1YWxTcGVjaWZpY2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0VmlzdWFsU3BlY2lmaWNhdGlvbkFzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWxlY3RlZE1hcmtzQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuY2xlYXJTZWxlY3RlZE1hcmtzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RNYXJrc0J5SURBc3luYyhtYXJrc0luZm86IEFycmF5PENvbnRyYWN0Lk1hcmtJbmZvPiwgdXBkYXRlVHlwZTogU2VsZWN0aW9uVXBkYXRlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLnNlbGVjdE1hcmtzQnlJZEFzeW5jKG1hcmtzSW5mbywgdXBkYXRlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMoc2VsZWN0aW9uczogQXJyYXk8Q29udHJhY3QuU2VsZWN0aW9uQ3JpdGVyaWE+LCBzZWxlY3Rpb25VcGRhdGVUeXBlOiBTZWxlY3Rpb25VcGRhdGVUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMoc2VsZWN0aW9ucywgc2VsZWN0aW9uVXBkYXRlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TWFya3NCeUlkQXN5bmMoc2VsZWN0aW9uczogQXJyYXk8Q29udHJhY3QuTWFya0luZm8+LCBzZWxlY3Rpb25VcGRhdGVUeXBlOiBTZWxlY3Rpb25VcGRhdGVUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuc2VsZWN0TWFya3NCeUlkQXN5bmMoc2VsZWN0aW9ucywgc2VsZWN0aW9uVXBkYXRlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgYW5ub3RhdGVNYXJrQXN5bmMobWFyazogQ29udHJhY3QuTWFya0luZm8sIGFubm90YXRpb25UZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5hbm5vdGF0ZU1hcmtBc3luYyhtYXJrLCBhbm5vdGF0aW9uVGV4dCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QW5ub3RhdGlvbnNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkFubm90YXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0QW5ub3RhdGlvbnNBc3luYygpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUFubm90YXRpb25Bc3luYyhhbm5vdGF0aW9uOiBDb250cmFjdC5Bbm5vdGF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwucmVtb3ZlQW5ub3RhdGlvbkFzeW5jKGFubm90YXRpb24pO1xuICB9XG5cbiAgcHVibGljIGhvdmVyVHVwbGVBc3luYyhob3ZlcmVkVHVwbGU6IG51bWJlciwgdG9vbHRpcD86IFRvb2x0aXBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuaG92ZXJUdXBsZUFzeW5jKGhvdmVyZWRUdXBsZSwgdG9vbHRpcCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0VHVwbGVzQXN5bmMoc2VsZWN0ZWRUdXBsZXM6IEFycmF5PG51bWJlcj4sIHNlbGVjdE9wdGlvbjogQ29udHJhY3QuU2VsZWN0T3B0aW9ucywgdG9vbHRpcD86IFRvb2x0aXBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuc2VsZWN0VHVwbGVzQXN5bmMoc2VsZWN0ZWRUdXBsZXMsIHNlbGVjdE9wdGlvbiwgdG9vbHRpcCk7XG4gIH1cblxuICBwcml2YXRlIHZpc3VhbElkc0FyZUVxdWFsKGE6IFZpc3VhbElkLCBiOiBWaXN1YWxJZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBhICYmXG4gICAgICBiICYmXG4gICAgICBhLndvcmtzaGVldCA9PT0gYi53b3Jrc2hlZXQgJiZcbiAgICAgIGEuZGFzaGJvYXJkID09PSBiLmRhc2hib2FyZCAmJlxuICAgICAgYS5zdG9yeWJvYXJkID09PSBiLnN0b3J5Ym9hcmQgJiZcbiAgICAgIGEuc3RvcnlQb2ludElEID09PSBiLnN0b3J5UG9pbnRJRFxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dGVybmFsIERhc2hib2FyZENvbnRlbnQgbmFtZXNwYWNlLlxuICogVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIEltcGwgcGF0dGVybiBhcyBEYXNoYm9hcmRDb250ZW50IGlzXG4gKiBjdXJyZW50bHkganVzdCBhIChzaW5nbGUpIHByb3BlcnR5IGJhZy5cbiAqL1xuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbnRlbnQgaW1wbGVtZW50cyBDb250cmFjdC5EYXNoYm9hcmRDb250ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Rhc2hib2FyZDogQ29udHJhY3QuRXh0ZW5zaW9uRGFzaGJvYXJkKSB7fVxuXG4gIHB1YmxpYyBnZXQgZGFzaGJvYXJkKCk6IENvbnRyYWN0LkV4dGVuc2lvbkRhc2hib2FyZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4dGVuc2lvbkVudmlyb25tZW50IH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEFwaVZlcnNpb24sIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyBhcyBFbnVtTWFwcGluZ3MgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IENvbm5lY3RlZFNlcnZlciB9IGZyb20gJy4uL0ltcGwvQ29ubmVjdGVkU2VydmVyJztcbmltcG9ydCB7IFdvcmtib29rRm9ybWF0dGluZ0VudlV0aWwgfSBmcm9tICcuL1dvcmtib29rRm9ybWF0dGluZ0VudlV0aWwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBuYW1lc3BhY2UuXG4gKiBFbnZpcm9ubWVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIEltcGwgcGF0dGVybiBhcyBpdCBpc1xuICoganVzdCBhIHByb3BlcnR5IGJhZy5cbiAqIEZpcnN0IGNsYXNzIGV4dGVuc2lvbnMgY2FuIGdldCB0byBDb25uZWN0ZWRTZXJ2ZXIgd2l0aDogZW52aXJvbm1lbnRbJ2Nvbm5lY3RlZFNlcnZlciddXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCBpbXBsZW1lbnRzIENvbnRyYWN0LkVudmlyb25tZW50IHtcbiAgLyoqVGhlIGZvbGxvd2luZyBpcyBhbiBpbmRleCBzaWduYXR1cmUuIEl0IGFsbG93cyBwcm9wZXJ0aWVzIHRvIGJlIGFjY2Vzc2VkIGJ5IG5hbWUuXG4gICAqIFRoaXMgYWxsb3dzIHVzIHRvIGFkZCBwcm9wZXJ0aWVzIGR5bmFtaWNhbGx5IChzZWUgdXNhZ2Ugb2YgdGhpcy5jb25uZWN0ZWRTZXJ2ZXIgYmVsb3cpIHdpdGhvdXQgVHlwZXNjcmlwdCBlcnJvcnMuXG4gICAqIFRoZSByZWFzb24gd2UgZG8gdGhpcyBpcyBzbyB0aGF0IDNyZC1wYXJ0eSBleHRlbnNpb24gZGV2ZWxvcGVycyBkbyBub3Qgc2VlIHRoZSBjb25uZWN0ZWRTZXJ2ZXIgcHJvcGVydHlcbiAgICogdGhhdCBpcyBvbmx5IGF2YWlsYWJsZSB0byBmaXJzdCBjbGFzcyBleHRlbnNpb24gZGV2ZWxvcGVycy5cbiAgICogVGhlIHR5cGUgb2YgdGhlIGluZGV4IHNpZ2F0dXJlIG5lZWRzIHRvIGJlIGEgdW5pb24gb2YgYWxsIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCwgc2luY2Ugd2UgY291bGRcbiAgICogYWNjZXNzIGFueSBwcm9wZXJ0eSB1c2luZyB0aGUgcHJvcGVydHkgaW5kZXggbWV0aG9kLlxuICAgKi9cbiAgW3g6IHN0cmluZ106IENvbm5lY3RlZFNlcnZlciB8IHN0cmluZyB8IENvbnRyYWN0Lldvcmtib29rRm9ybWF0dGluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9hcGlWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvbnRleHQ6IENvbnRyYWN0LkV4dGVuc2lvbkNvbnRleHQ7XG4gIHByaXZhdGUgX2Zvcm1hdHRpbmc/OiBDb250cmFjdC5Xb3JrYm9va0Zvcm1hdHRpbmc7XG4gIHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvdW50cnk/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2xvY2FsZTogc3RyaW5nO1xuICBwcml2YXRlIF9tb2RlOiBDb250cmFjdC5FeHRlbnNpb25Nb2RlO1xuICBwcml2YXRlIF9vcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbiAgcHJpdmF0ZSBfdGFibGVhdVZlcnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfdW5pcXVlVXNlcklkPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihleHRlbnNpb25FbnZpcm9ubWVudDogRXh0ZW5zaW9uRW52aXJvbm1lbnQpIHtcbiAgICB0aGlzLl9hcGlWZXJzaW9uID0gQXBpVmVyc2lvbi5JbnN0YW5jZSAmJiBBcGlWZXJzaW9uLkluc3RhbmNlLmZvcm1hdHRlZFZhbHVlOyAvLyBtYWoubWluLmZpeCAobm8gYnVpbGQpXG4gICAgdGhpcy5fY29udGV4dCA9IEVudW1NYXBwaW5ncy5leHRlbnNpb25Db250ZXh0LmNvbnZlcnQoZXh0ZW5zaW9uRW52aXJvbm1lbnQuZXh0ZW5zaW9uQ29udGV4dCk7XG4gICAgdGhpcy5fZm9ybWF0dGluZyA9IFdvcmtib29rRm9ybWF0dGluZ0VudlV0aWwuY29udmVydFRvV29ya2Jvb2tGb3JtYXR0aW5nKGV4dGVuc2lvbkVudmlyb25tZW50Lndvcmtib29rRm9ybWF0dGluZyk7XG4gICAgdGhpcy5fbGFuZ3VhZ2UgPSBleHRlbnNpb25FbnZpcm9ubWVudC5leHRlbnNpb25MYW5ndWFnZTtcbiAgICB0aGlzLl9jb3VudHJ5ID0gZXh0ZW5zaW9uRW52aXJvbm1lbnQuZXh0ZW5zaW9uQ291bnRyeTtcbiAgICB0aGlzLl9sb2NhbGUgPSBleHRlbnNpb25FbnZpcm9ubWVudC5leHRlbnNpb25Mb2NhbGU7XG4gICAgdGhpcy5fbW9kZSA9IEVudW1NYXBwaW5ncy5leHRlbnNpb25Nb2RlLmNvbnZlcnQoZXh0ZW5zaW9uRW52aXJvbm1lbnQuZXh0ZW5zaW9uTW9kZSk7XG4gICAgdGhpcy5fb3BlcmF0aW5nU3lzdGVtID0gZXh0ZW5zaW9uRW52aXJvbm1lbnQub3BlcmF0aW5nU3lzdGVtO1xuICAgIHRoaXMuX3RhYmxlYXVWZXJzaW9uID0gZXh0ZW5zaW9uRW52aXJvbm1lbnQudGFibGVhdVZlcnNpb247XG4gICAgdGhpcy5fdW5pcXVlVXNlcklkID0gZXh0ZW5zaW9uRW52aXJvbm1lbnQudW5pcXVlVXNlcklkO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIHVzZXJJZCwgdGhlbiB3ZSBhcmUgYSBmaXJzdCBjbGFzcyBleHRlbnNpb25cbiAgICBpZiAoZXh0ZW5zaW9uRW52aXJvbm1lbnQudXNlcklkKSB7XG4gICAgICB0aGlzLmNvbm5lY3RlZFNlcnZlciA9IG5ldyBDb25uZWN0ZWRTZXJ2ZXIoXG4gICAgICAgIGV4dGVuc2lvbkVudmlyb25tZW50LnVzZXJJZCxcbiAgICAgICAgZXh0ZW5zaW9uRW52aXJvbm1lbnQuc2l0ZUlkLFxuICAgICAgICBleHRlbnNpb25FbnZpcm9ubWVudC5zaXRlTmFtZXNwYWNlLFxuICAgICAgICBleHRlbnNpb25FbnZpcm9ubWVudC53b3JrYm9va0lkLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5mZWF0dXJlRmxhZ3MgPSBleHRlbnNpb25FbnZpcm9ubWVudC5mZWF0dXJlRmxhZ3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBhcGlWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaVZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbnRleHQoKTogQ29udHJhY3QuRXh0ZW5zaW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdvcmtib29rRm9ybWF0dGluZygpOiBDb250cmFjdC5Xb3JrYm9va0Zvcm1hdHRpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtYXR0aW5nO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY291bnRyeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb3VudHJ5O1xuICB9XG5cbiAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlKCk6IENvbnRyYWN0LkV4dGVuc2lvbk1vZGUge1xuICAgIHJldHVybiB0aGlzLl9tb2RlO1xuICB9XG5cbiAgcHVibGljIGdldCBvcGVyYXRpbmdTeXN0ZW0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlcmF0aW5nU3lzdGVtO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJsZWF1VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YWJsZWF1VmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdW5pcXVlVXNlcklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VuaXF1ZVVzZXJJZDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENhbGxiYWNrTWFwLCBFeHRlbnNpb25zSW1wbCB9IGZyb20gJy4uL0ltcGwvRXh0ZW5zaW9uc0ltcGwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBleHRlcm5hbCBFeHRlbnNpb25zIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4dGVuc2lvbnMgaW1wbGVtZW50cyBDb250cmFjdC5FeHRlbnNpb25zIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgZXh0ZW5zaW9uSW1wbDogRXh0ZW5zaW9uc0ltcGwpIHtcbiAgICB0aGlzLmV4dGVuc2lvbkltcGwgPSBleHRlbnNpb25JbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXNoYm9hcmRDb250ZW50KCk6IENvbnRyYWN0LkRhc2hib2FyZENvbnRlbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwuZGFzaGJvYXJkQ29udGVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0Q29udGVudCgpOiBDb250cmFjdC5Xb3Jrc2hlZXRDb250ZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25JbXBsLndvcmtzaGVldENvbnRlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50KCk6IENvbnRyYWN0LkVudmlyb25tZW50IHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25JbXBsLmVudmlyb25tZW50O1xuICB9XG5cbiAgcHVibGljIGdldCBzZXR0aW5ncygpOiBDb250cmFjdC5TZXR0aW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5zZXR0aW5ncztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdWkoKTogQ29udHJhY3QuVUkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwudWk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdvcmtib29rKCk6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtib29rIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25JbXBsLndvcmtib29rO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXNoYm9hcmRPYmplY3RJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwuZXh0ZW5zaW9uWm9uZUlkO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVBc3luYyhjb250ZXh0TWVudUNhbGxiYWNrcz86IENhbGxiYWNrTWFwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5pbml0aWFsaXplQXN5bmMoZmFsc2UsIGNvbnRleHRNZW51Q2FsbGJhY2tzKS50aGVuPHZvaWQ+KCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZURpYWxvZ0FzeW5jKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5pbml0aWFsaXplQXN5bmModHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVml6SW1hZ2VBc3luYyhpbnB1dFNwZWM6IG9iamVjdCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5jcmVhdGVWaXpJbWFnZUFzeW5jKGlucHV0U3BlYyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpY2tUaHJvdWdoQXN5bmMoY2xpY2tUaHJvdWdoRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwuc2V0Q2xpY2tUaHJvdWdoQXN5bmMoY2xpY2tUaHJvdWdoRW5hYmxlZCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFNldHRpbmdzIGFzIFNldHRpbmdzQ29udHJhY3QgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXZlbnRMaXN0ZW5lck1hbmFnZXIgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IFNldHRpbmdzSW1wbCB9IGZyb20gJy4uL0ltcGwvU2V0dGluZ3NJbXBsJztcbmltcG9ydCB7IFNldHRpbmdzQ29sbGVjdGlvbiB9IGZyb20gJy4uL1NlcnZpY2VzL1NldHRpbmdzU2VydmljZSc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dGVybmFsIHNldHRpbmdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdzIGV4dGVuZHMgRXZlbnRMaXN0ZW5lck1hbmFnZXIgaW1wbGVtZW50cyBTZXR0aW5nc0NvbnRyYWN0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NldHRpbmdzSW1wbDogU2V0dGluZ3NJbXBsKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIEluaXRpYWxpemUgb3VyIGV2ZW50IGhhbmRsaW5nIGZvciB0aGlzIGNsYXNzXG4gICAgdGhpcy5fc2V0dGluZ3NJbXBsLmluaXRpYWxpemVFdmVudHMoKS5mb3JFYWNoKChlKSA9PiB0aGlzLmFkZE5ld0V2ZW50VHlwZShlKSk7XG4gIH1cblxuICBwdWJsaWMgZXJhc2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR0aW5nc0ltcGwuZXJhc2Uoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5nc0ltcGwuZ2V0KGtleSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxsKCk6IFNldHRpbmdzQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzSW1wbC5nZXRBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNNb2RpZmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3NJbXBsLmlzTW9kaWZpZWQ7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFzeW5jKCk6IFByb21pc2U8U2V0dGluZ3NDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzSW1wbC5zYXZlQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR0aW5nc0ltcGwuc2V0KGtleSwgdmFsdWUpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVUlJbXBsIH0gZnJvbSAnLi4vSW1wbC9VSUltcGwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBleHRlcm5hbCBVSSBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBVSSBpbXBsZW1lbnRzIENvbnRyYWN0LlVJIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ltcGw6IFVJSW1wbCkge31cblxuICBwdWJsaWMgZGlzcGxheURpYWxvZ0FzeW5jKHVybDogc3RyaW5nLCBwYXlsb2FkPzogc3RyaW5nLCBvcHRpb25zPzogQ29udHJhY3QuRGlhbG9nT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGwuZGlzcGxheURpYWxvZ0FzeW5jKHVybCwgcGF5bG9hZCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEaWFsb2cocGF5bG9hZD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2ltcGwuY2xvc2VEaWFsb2cocGF5bG9hZCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MgYXMgRW51bU1hcHBpbmdzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBXb3JrYm9va0Zvcm1hdHRpbmcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvbGliL3NyYy9Kc0FwaUludGVybmFsQ29udHJhY3QnO1xuXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGb3JtYXR0aW5nRW52VXRpbCB7XG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvV29ya2Jvb2tGb3JtYXR0aW5nKHdvcmtib29rRm9ybWF0dGluZ01vZGVsPzogV29ya2Jvb2tGb3JtYXR0aW5nKTogQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXdvcmtib29rRm9ybWF0dGluZ01vZGVsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3JtYXR0aW5nTWFwOiBBcnJheTxDb250cmFjdC5Gb3JtYXR0aW5nU2hlZXQ+ID0gd29ya2Jvb2tGb3JtYXR0aW5nTW9kZWwuZm9ybWF0dGluZ1NoZWV0cy5tYXAoKGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGluZ1NoZWV0OiBDb250cmFjdC5Gb3JtYXR0aW5nU2hlZXQgPSB7XG4gICAgICAgICAgY2xhc3NOYW1lS2V5OiBFbnVtTWFwcGluZ3MuY2xhc3NOYW1lS2V5LmNvbnZlcnQoY3VycmVudEZvcm1hdHRpbmdTaGVldC5jbGFzc05hbWVLZXkpLFxuICAgICAgICAgIGNzc1Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250RmFtaWx5LFxuICAgICAgICAgICAgZm9udFNpemU6IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250U2l6ZSxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250V2VpZ2h0LFxuICAgICAgICAgICAgZm9udFN0eWxlOiBjdXJyZW50Rm9ybWF0dGluZ1NoZWV0LmNzc1Byb3BlcnRpZXMuZm9udFN0eWxlLFxuICAgICAgICAgICAgdGV4dERlY29yYXRpb246IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy50ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgIGNvbG9yOiBjdXJyZW50Rm9ybWF0dGluZ1NoZWV0LmNzc1Byb3BlcnRpZXMuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdTaGVldDtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0OiBDb250cmFjdC5Xb3JrYm9va0Zvcm1hdHRpbmcgPSB7XG4gICAgICAgIGZvcm1hdHRpbmdTaGVldHM6IGZvcm1hdHRpbmdNYXAsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dGVybmFsIFdvcmtzaGVldENvbnRlbnQgbmFtZXNwYWNlLlxuICogVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIEltcGwgcGF0dGVybiBhcyBXb3Jrc2hlZXRDb250ZW50IGlzXG4gKiBjdXJyZW50bHkganVzdCBhIChzaW5nbGUpIHByb3BlcnR5IGJhZy5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldENvbnRlbnQgaW1wbGVtZW50cyBDb250cmFjdC5Xb3Jrc2hlZXRDb250ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtzaGVldDogQ29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0KSB7fVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0KCk6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtzaGVldCB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEV4dGVuc2lvbkJvb3RzdHJhcEluZm8sIFBhcmFtZXRlcklkLCBWZXJiSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyc7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9Jbml0aWFsaXphdGlvblNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgSW5pdGlhbGl6YXRpb25TZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIEluaXRpYWxpemF0aW9uU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5Jbml0aWFsaXphdGlvblNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZURhc2hib2FyZEV4dGVuc2lvbnNBc3luYyhpc0V4dGVuc2lvbkRpYWxvZzogYm9vbGVhbiwgY29udGV4dE1lbnVJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxFeHRlbnNpb25Cb290c3RyYXBJbmZvPiB7XG4gICAgY29uc3QgcGFyYW1zOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnaW5pdGlhbGl6ZURhc2hib2FyZEV4dGVuc2lvbnNBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuRXh0ZW5zaW9uQ29udGV4dE1lbnVJZHNdOiBjb250ZXh0TWVudUlkcyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Jc0V4dGVuc2lvbkRpYWxvZ106IGlzRXh0ZW5zaW9uRGlhbG9nLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5Jbml0aWFsaXplRXh0ZW5zaW9uLCBwYXJhbXMpLnRoZW48RXh0ZW5zaW9uQm9vdHN0cmFwSW5mbz4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBUT0RPIC0gVmFsaWRhdGUgcmV0dXJuIHZhbHVlXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBFeHRlbnNpb25Cb290c3RyYXBJbmZvO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXh0ZW5zaW9uU2V0dGluZ3NJbmZvLCBQYXJhbWV0ZXJJZCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSwgVGFibGVhdUVycm9yIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyc7XG5pbXBvcnQgeyBTZXR0aW5nc0NvbGxlY3Rpb24sIFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL1NldHRpbmdzU2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc1NlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgU2V0dGluZ3NTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBFeHRlbnNpb25zU2VydmljZU5hbWVzLlNldHRpbmdzU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2V0dGluZ3NBc3luYyhzZXR0aW5nczogU2V0dGluZ3NDb2xsZWN0aW9uKTogUHJvbWlzZTxTZXR0aW5nc0NvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2F2ZVNldHRpbmdzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlNldHRpbmdzVmFsdWVzXTogc2V0dGluZ3MsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlNhdmVFeHRlbnNpb25TZXR0aW5ncywgcGFyYW1ldGVycykudGhlbjxTZXR0aW5nc0NvbGxlY3Rpb24+KCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUucmVzdWx0IGFzIEV4dGVuc2lvblNldHRpbmdzSW5mbztcblxuICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5zZXR0aW5nc1ZhbHVlcykge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ1VuZXhwZWN0ZWQgZXJyb3Igc2F2aW5ncyBzZXR0aW5ncy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5zZXR0aW5nc1ZhbHVlcztcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRGlhbG9nT3B0aW9ucywgRGlhbG9nU3R5bGUsIEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEV4dGVuc2lvbkRpYWxvZ1Jlc3VsdCwgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFcnJvckhlbHBlcnMsIEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncywgU2VydmljZUltcGxCYXNlLCBUYWJsZWF1RXJyb3IgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9FeHRlbnNpb25zU2VydmljZU5hbWVzJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4uL1VJU2VydmljZSc7XG5cbmNvbnN0IERFRkFVTFRfRElBTE9HX0hFSUdIVCA9IDQwMDsgLy8gaW4gcGl4ZWxzXG5jb25zdCBERUZBVUxUX0RJQUxPR19XSURUSCA9IDYwMDsgLy8gaW4gcGl4ZWxzXG5jb25zdCBERUZBVUxUX0RJQUxPR19TVFlMRTogRGlhbG9nU3R5bGUgPSBEaWFsb2dTdHlsZS5XaW5kb3c7XG5cbmV4cG9ydCBjbGFzcyBVSVNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgVUlTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBFeHRlbnNpb25zU2VydmljZU5hbWVzLlVJU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwbGF5RGlhbG9nQXN5bmModXJsOiBzdHJpbmcsIHBheWxvYWQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZGlzcGxheURpYWxvZ0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5FeHRlbnNpb25EaWFsb2dVcmxdOiB1cmwsXG4gICAgICBbUGFyYW1ldGVySWQuRXh0ZW5zaW9uRGlhbG9nUGF5bG9hZF06IHBheWxvYWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGg6IG51bWJlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5oZWlnaHQgPyBvcHRpb25zLmhlaWdodCA6IERFRkFVTFRfRElBTE9HX0hFSUdIVDtcbiAgICBjb25zdCB3OiBudW1iZXIgPSBvcHRpb25zICYmIG9wdGlvbnMud2lkdGggPyBvcHRpb25zLndpZHRoIDogREVGQVVMVF9ESUFMT0dfV0lEVEg7XG4gICAgY29uc3QgZGlhbG9nU3R5bGU6IERpYWxvZ1N0eWxlID0gb3B0aW9ucyAmJiBvcHRpb25zLmRpYWxvZ1N0eWxlID8gb3B0aW9ucy5kaWFsb2dTdHlsZSA6IERFRkFVTFRfRElBTE9HX1NUWUxFO1xuXG4gICAgLy8gT24gdGhlIHBsYXRmb3JtIHNpZGUsIHdlIGRvIHNvbWV0aGluZyByZWFzb25hYmxlIHJlZ2FyZGVzcyBvZiB3aGV0aGVyIHRoZSBwYXNzZWRcbiAgICAvLyBoZWlnaHQgYW5kIHdpZHRoIGFyZSB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLiAgQnV0IHRoaXMgbGlrZWx5IGluZGljYXRlcyBhIGRldmVsb3BlciBlcnJvcixcbiAgICAvLyBzbyB3ZSB0aHJvdyBhbiBlcnJvciBoZXJlIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuXG4gICAgaWYgKGggPD0gMCB8fCB3IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCAnU2l6ZSBwYXJhbWV0ZXJzIGZvciBkaXNwbGF5RGlhbG9nQXN5bmMgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgIH1cblxuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRXh0ZW5zaW9uRGlhbG9nSF0gPSBoO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRXh0ZW5zaW9uRGlhbG9nV10gPSB3O1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8RGlhbG9nU3R5bGU+KGRpYWxvZ1N0eWxlLCBEaWFsb2dTdHlsZSwgJ0RpYWxvZ1N0eWxlJyk7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5FeHRlbnNpb25EaWFsb2dTdHlsZV0gPSBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MuZGlhbG9nU3R5bGVzLmNvbnZlcnQoZGlhbG9nU3R5bGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuRGlzcGxheURpYWxvZywgcGFyYW1ldGVycykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBFeHRlbnNpb25EaWFsb2dSZXN1bHQ7XG4gICAgICBzd2l0Y2ggKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICBjYXNlIEV4dGVuc2lvbkRpYWxvZ1Jlc3VsdC5EaWFsb2dBbHJlYWR5T3BlbjpcbiAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuRGlhbG9nQWxyZWFkeU9wZW4sICdUaGVyZSBhbHJlYWR5IGV4aXN0cyBhbiBvcGVuIGRpYWxvZyBmb3IgdGhpcyBleHRlbnNpb24uJyk7XG4gICAgICAgIGNhc2UgRXh0ZW5zaW9uRGlhbG9nUmVzdWx0LkludmFsaWREb21haW46XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgICAgIEVycm9yQ29kZXMuSW52YWxpZERvbWFpbkRpYWxvZyxcbiAgICAgICAgICAgICdUaGUgdXJsIG9mIGFuIGV4dGVuc2lvbiBkaWFsb2cgbXVzdCBtYXRjaCB0aGUgZG9tYWluIG9mIHRoZSBwYXJlbnQgZXh0ZW5zaW9uLicsXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBTdWNjZXNzIGNhc2VcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEaWFsb2cocGF5bG9hZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdjbG9zZURpYWxvZycsXG4gICAgfTtcblxuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkV4dGVuc2lvbkRpYWxvZ1BheWxvYWRdID0gcGF5bG9hZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5DbG9zZURpYWxvZywgcGFyYW1ldGVycykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpY2tUaHJvdWdoQXN5bmMoY2xpY2tUaHJvdWdoRW5hYmxlZDogYm9vbGVhbiwgZXh0ZW5zaW9uWm9uZUlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyVHlwZShjbGlja1Rocm91Z2hFbmFibGVkLCAnYm9vbGVhbicsICdjbGlja1Rocm91Z2hFbmFibGVkJyk7XG5cbiAgICBpZiAoZXh0ZW5zaW9uWm9uZUlkID09PSB1bmRlZmluZWQgfHwgZXh0ZW5zaW9uWm9uZUlkIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnRXh0ZW5zaW9uIElkIGlzIGludmFsaWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRXh0ZW5zaW9uWm9uZUlkXTogZXh0ZW5zaW9uWm9uZUlkLFxuICAgICAgW1BhcmFtZXRlcklkLkNsaWNrVGhyb3VnaEVuYWJsZWRdOiBjbGlja1Rocm91Z2hFbmFibGVkLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TZXRDbGlja1Rocm91Z2gsIHBhcmFtZXRlcnMpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbnRlcm5hbEFwaURpc3BhdGNoZXIgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2VJbXBsIH0gZnJvbSAnLi9JbXBsL0luaXRpYWxpemF0aW9uU2VydmljZUltcGwnO1xuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlSW1wbCB9IGZyb20gJy4vSW1wbC9TZXR0aW5nc1NlcnZpY2VJbXBsJztcbmltcG9ydCB7IFVJU2VydmljZUltcGwgfSBmcm9tICcuL0ltcGwvVUlTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4vU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFsbEV4dGVuc2lvbnNTZXJ2aWNlcyhkaXNwYXRjaGVyOiBJbnRlcm5hbEFwaURpc3BhdGNoZXIpOiB2b2lkIHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBTZXR0aW5nc1NlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIEV4dGVuc2lvbnNSZWdpc3RyeUlkKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgVUlTZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCBFeHRlbnNpb25zUmVnaXN0cnlJZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJJbml0aWFsaXphdGlvbkV4dGVuc2lvbnNTZXJ2aWNlcyhkaXNwYXRjaGVyOiBJbnRlcm5hbEFwaURpc3BhdGNoZXIpOiB2b2lkIHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBJbml0aWFsaXphdGlvblNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIEV4dGVuc2lvbnNSZWdpc3RyeUlkKSk7XG59XG4iLCJleHBvcnQgY29uc3QgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQgPSAwO1xuIiwiLy8gVGhpcyBmaWxlIHJlLWV4cG9ydHMgZXZlcnl0aGluZyB3aGljaCBpcyBwYXJ0IG9mIHRoZSBleHRlbnNpb25zIGFwaSBwdWJsaWMgaW50ZXJmYWNlXG5cbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvQXNrRGF0YUludGVyZmFjZXMnO1xuZXhwb3J0IHtcbiAgQXBpTWVudVR5cGUsXG4gIENyb3NzdGFiRmlsZUZvcm1hdCxcbiAgRGV2aWNlVHlwZSxcbiAgRW1iZWRkaW5nRXJyb3JDb2RlcyxcbiAgVGFibGVhdUV2ZW50VHlwZSBhcyBFbWJlZGRpbmdUYWJsZWF1RXZlbnRUeXBlLFxuICBGaWxlRm9ybWF0cyxcbiAgUHJpbnRPcmllbnRhdGlvbixcbiAgUHJpbnRQYWdlU2l6ZSxcbiAgUHJpbnRTY2FsaW5nLFxuICBTaGVldFNpemVCZWhhdmlvcixcbiAgVGFibGVhdURpYWxvZ1R5cGUsXG4gIFRvb2xiYXIsXG59IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvRW51bXMnO1xuZXhwb3J0IHtcbiAgQ3VzdG9tVmlld0V2ZW50LFxuICBDdXN0b21NYXJrQ29udGV4dE1lbnVFdmVudCBhcyBFbWJlZGRpbmdDdXN0b21NYXJrQ29udGV4dE1lbnVFdmVudCxcbiAgRmlsdGVyQ2hhbmdlZEV2ZW50IGFzIEVtYmVkZGluZ0ZpbHRlckNoYW5nZWRFdmVudCxcbiAgTWFya3NTZWxlY3RlZEV2ZW50IGFzIEVtYmVkZGluZ01hcmtTZWxlY3RlZEV2ZW50LFxuICBQYXJhbWV0ZXJDaGFuZ2VkRXZlbnQgYXMgRW1iZWRkaW5nUGFyYW1ldGVyQ2hhbmdlZEV2ZW50LFxuICBTdW1tYXJ5RGF0YUNoYW5nZWRFdmVudCBhcyBFbWJlZGRpbmdTdW1tYXJ5RGF0YUNoYW5nZWRFdmVudCxcbiAgVGFibGVhdVNoZWV0RXZlbnQgYXMgRW1iZWRkaW5nVGFibGVhdVNoZWV0RXZlbnQsXG4gIFRhYmxlYXVXb3Jrc2hlZXRFdmVudCBhcyBFbWJlZGRpbmdUYWJsZWF1V29ya3NoZWV0RXZlbnQsXG4gIFRvb2xiYXJTdGF0ZUNoYW5nZWRFdmVudCBhcyBFbWJlZGRpbmdUb29sYmFyU3RhdGVDaGFuZ2VkRXZlbnQsXG4gIEZpcnN0Vml6U2l6ZUtub3duRXZlbnQsXG4gIFN0b3J5UG9pbnRTd2l0Y2hlZEV2ZW50LFxuICBUYWJTd2l0Y2hlZEV2ZW50LFxuICBVcmxBY3Rpb25FdmVudCxcbiAgVml6TG9hZEVycm9yRXZlbnQsXG4gIFdvcmtib29rUHVibGlzaGVkQXNFdmVudCxcbn0gZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9FdmVudEludGVyZmFjZXMnO1xuZXhwb3J0IHsgUGFyYW1ldGVyIGFzIEVtYmVkZGluZ1BhcmFtZXRlciB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvUGFyYW1ldGVySW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1B1bHNlSW50ZXJmYWNlcyc7XG5leHBvcnQge1xuICBDb250ZXh0TWVudU9wdGlvbnMsXG4gIEVtYmVkZGluZ0Fic3RyYWN0UXVlcnksXG4gIEF1dGhvcmluZ1dvcmtzaGVldCBhcyBFbWJlZGRpbmdBdXRob3JpbmdXb3Jrc2hlZXQsXG4gIERhc2hib2FyZCBhcyBFbWJlZGRpbmdEYXNoYm9hcmQsXG4gIERhc2hib2FyZE9iamVjdCBhcyBFbWJlZGRpbmdEYXNoYm9hcmRPYmplY3QsXG4gIFNoZWV0IGFzIEVtYmVkZGluZ1NoZWV0LFxuICBFbWJlZGRpbmdWaXpTdGF0ZVdpdGhEYXRhTW9kZWwsXG4gIFdvcmtzaGVldCBhcyBFbWJlZGRpbmdXb3Jrc2hlZXQsXG4gIEhpZXJhcmNoaWNhbExldmVscyxcbiAgU2hlZXRJbmZvLFxuICBTaGVldFNpemUsXG59IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvU2hlZXRJbnRlcmZhY2VzJztcbmV4cG9ydCB7IFN0b3J5LCBTdG9yeVBvaW50LCBTdG9yeVBvaW50SW5mbyB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvU3RvcnlJbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvVGFibGVhdUVycm9yJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvVml6SW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1dlYkNvbXBvbmVudEludGVyZmFjZXMnO1xuZXhwb3J0IHtcbiAgQ3VzdG9tVmlldyxcbiAgQXV0aG9yaW5nV29ya2Jvb2sgYXMgRW1iZWRkaW5nQXV0aG9yaW5nV29ya2Jvb2ssXG4gIFdvcmtib29rIGFzIEVtYmVkZGluZ1dvcmtib29rLFxufSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1dvcmtib29rSW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vU2hhcmVkQXBpRXh0ZXJuYWxDb250cmFjdCc7XG4iLCIvLyBUaGlzIGZpbGUgcmUtZXhwb3J0cyBldmVyeXRoaW5nIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGV4dGVuc2lvbnMgYXBpIHB1YmxpYyBpbnRlcmZhY2VcblxuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0V4dGVuc2lvbnMvRXZlbnRJbnRlcmZhY2UnO1xuZXhwb3J0IHsgRGFzaGJvYXJkQ29udGVudCB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvRGFzaGJvYXJkQ29udGVudCc7XG5leHBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvRW52aXJvbm1lbnQnO1xuZXhwb3J0IHsgRXh0ZW5zaW9ucyB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvRXh0ZW5zaW9ucyc7XG5leHBvcnQgeyBTZXR0aW5ncyB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvU2V0dGluZ3MnO1xuZXhwb3J0IHtcbiAgRXJyb3JDb2RlcyxcbiAgRXh0ZW5zaW9uQ29udGV4dCxcbiAgRXh0ZW5zaW9uTW9kZSxcbiAgVGFibGVhdUV2ZW50VHlwZSxcbiAgVml6SW1hZ2VFbmNvZGluZ1R5cGUsXG4gIFZpekltYWdlUGFsZXR0ZVR5cGUsXG4gIFZpekltYWdlU2l6ZVNldHRpbmdBbGlnbm1lbnRUeXBlLFxuICBWaXpJbWFnZVNpemVTZXR0aW5nVHlwZSxcbiAgVml6SW1hZ2VTb3J0RGlyZWN0aW9uVHlwZSxcbn0gZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0V4dGVuc2lvbnMvTmFtZXNwYWNlcy9UYWJsZWF1JztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvVUknO1xuZXhwb3J0IHsgV29ya3NoZWV0Q29udGVudCB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvV29ya3NoZWV0Q29udGVudCc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9QYXJhbWV0ZXJJbnRlcmZhY2VzJztcbmV4cG9ydCB7XG4gIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSxcbiAgRGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXksXG4gIERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlNYXAsXG4gIERhc2hib2FyZCBhcyBFeHRlbnNpb25EYXNoYm9hcmQsXG4gIERhc2hib2FyZE9iamVjdCBhcyBFeHRlbnNpb25EYXNoYm9hcmRPYmplY3QsXG4gIFNoZWV0IGFzIEV4dGVuc2lvblNoZWV0LFxuICBXb3Jrc2hlZXQgYXMgRXh0ZW5zaW9uV29ya3NoZWV0LFxuICBQb2ludCxcbiAgWm9uZVZpc2liaWxpdHlNYXAsXG59IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL1NoZWV0SW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9UYWJsZWF1RXJyb3InO1xuZXhwb3J0IHsgV29ya2Jvb2sgYXMgRXh0ZW5zaW9uV29ya2Jvb2sgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9Xb3JrYm9va0ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9TaGFyZWRBcGlFeHRlcm5hbENvbnRyYWN0JztcbiIsIi8qKlxuICogVGhpcyBpcyB5b3VyIG1haW4uIFRoaXMgaXMgd2hlcmUgeW91IHJlLWV4cG9ydCBldmVyeXRoaW5nIHlvdSB3YW50IHRvIGJlIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgYnVpbGQgZW5mb3JjZXMgdGhhdCB0aGUgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgaXMgZXhwb3J0ZWQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9FbWJlZGRpbmdBcGlFeHRlcm5hbENvbnRyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZW5zaW9uc0FwaUV4dGVybmFsQ29udHJhY3QnO1xuIiwiaW1wb3J0IHsgV2ViQ29tcG9uZW50TG9jYWxTZXR0aW5ncywgV2ViQ29tcG9uZW50U2V0dGluZ3NTaGFyZWQgfSBmcm9tICcuL1dlYkNvbXBvbmVudEludGVyZmFjZXMnO1xuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS1hc2stZGF0YT4gd2ViIGNvbXBvbmVudC5cbiAqIEBpZ25vcmVcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBlbnVtIEFza0RhdGFBdHRyaWJ1dGVzIHtcbiAgT3JpZ2luID0gJ29yaWdpbicsXG4gIFNob3dFbWJlZCA9ICdzaG93LWVtYmVkJyxcbiAgU2hvd1BpbiA9ICdzaG93LXBpbicsXG4gIFNob3dTYXZlID0gJ3Nob3ctc2F2ZScsXG4gIFNob3dTaGFyZSA9ICdzaG93LXNoYXJlJyxcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFza0RhdGFTZXR0aW5ncyBleHRlbmRzIFdlYkNvbXBvbmVudFNldHRpbmdzU2hhcmVkLCBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlbWJlZCBidXR0b24gaXMgaGlkZGVuIG9yIHZpc2libGUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgc2hvdy1lbWJlZD5cbiAgICogYGBgXG4gICAqL1xuICBzaG93RW1iZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGluIGJ1dHRvbiBpcyBoaWRkZW4gb3IgdmlzaWJsZS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LWFzay1kYXRhIGlkPVwidGFibGVhdUFza0RhdGFcIiBzaG93LXBpbj5cbiAgICogYGBgXG4gICAqL1xuICBzaG93UGluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNhdmUgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtYXNrLWRhdGEgaWQ9XCJ0YWJsZWF1QXNrRGF0YVwiIHNob3ctc2F2ZT5cbiAgICogYGBgXG4gICAqL1xuICBzaG93U2F2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzaGFyZSBidXR0b24gaXMgaGlkZGVuIG9yIHZpc2libGUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgc2hvdy1zaGFyZT5cbiAgICogYGBgXG4gICAqL1xuICBzaG93U2hhcmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiAgVXNlZCBmb3IgdGVsZW1ldHJ5XG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgb3JpZ2luPVwiZW1iZWRkaW5nU2l0ZVwiPlxuICAgKiBgYGBcbiAgICovXG4gIG9yaWdpbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgdG9wIGxldmVsIEFza0RhdGEgb2JqZWN0LlxuICogQGRlcHJlY2F0ZWRcbiAqKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNrRGF0YSBleHRlbmRzIEFza0RhdGFTZXR0aW5ncyB7fVxuIiwiLy8gQWxsIGVudW0gdmFsdWVzIG1hZGUgYXZhaWxhYmxlIHRvIEVtYmVkZGluZyBkZXZlbG9wZXJzLlxuLy8gRW51bXMgc2hvdWxkIGJlIGtlcHQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlxuLy8gTW9zdCBvZiB0aGVtIHNob3VsZCBtYXRjaCBhbiBlbnVtIG9uIHRoZSBzZXJ2ZXIgZGVmaW5lZCBhdFxuLy8gd29ya2dyb3VwL3ZxbHdlYi9zY3JpcHRzaGFycC9zcmMvQXBpU2hhcmVkL1B1YmxpY0VudW1zLmNzI0wzOTg6MTdcblxuLyoqXG4gKiBDcm9zc3RhYiBmaWxlIGZvcm1hdHMgYXZhaWxhYmxlIHRvIHVzZSB3aXRoIHtAbGluayBWaXouZXhwb3J0Q3Jvc3N0YWJBc3luY31cbiAqL1xuZXhwb3J0IGVudW0gQ3Jvc3N0YWJGaWxlRm9ybWF0IHtcbiAgQ1NWID0gJ2NzdicsXG4gIEV4Y2VsID0gJ3hsc3gnLFxufVxuXG4vKipcbiAqIERldmljZSB0eXBlcyBhdmFpbGFibGUgdG8gdXNlIHdpdGgge0BsaW5rIFZpei5kZXZpY2V9XG4gKi9cbmV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBEZWZhdWx0ID0gJ2RlZmF1bHQnLFxuICBEZXNrdG9wID0gJ2Rlc2t0b3AnLFxuICBUYWJsZXQgPSAndGFibGV0JyxcbiAgUGhvbmUgPSAncGhvbmUnLFxufVxuXG4vKipcbiAqIEFsbCBlcnJvciBjb2RlcyB1c2VkIGJ5IHRoZSBFbWJlZGRpbmcgQVBJLlxuICovXG5leHBvcnQgZW51bSBFbWJlZGRpbmdFcnJvckNvZGVzIHtcbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgcmVxdWVzdCB0byB0aGUgYXV0aCBlbmRwb2ludCBmYWlscy5cbiAgICovXG4gIEF1dGhGYWlsZWQgPSAnYXV0aC1mYWlsZWQnLFxuICAvKipcbiAgICogVGhlIGJyb3dzZXIgaXMgbm90IGNhcGFibGUgb2Ygc3VwcG9ydGluZyB0aGUgVGFibGVhdSBFbWJlZGRpbmcgQVBJXG4gICAqL1xuICBCcm93c2VyTm90Q2FwYWJsZSA9ICdicm93c2VyLW5vdC1jYXBhYmxlJyxcbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9ucyBvbiBhIHdvcmtib29rIG9yIGEgdmlldyBkbyBub3QgYWxsb3cgZG93bmxvYWRpbmcgdGhlIHdvcmtib29rLlxuICAgKi9cbiAgRG93bmxvYWRXb3JrYm9va05vdEFsbG93ZWQgPSAnZG93bmxvYWQtd29ya2Jvb2stbm90LWFsbG93ZWQnLFxuICAvKipcbiAgICogVGhyb3duIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGF0dGVtcHRpbmcgdG8gcGVyZm9ybSBhIGZpbHRlciBvcGVyYXRpb24uXG4gICAqL1xuICBGaWx0ZXJDYW5ub3RCZVBlcmZvcm1lZCA9ICdmaWx0ZXItY2Fubm90LWJlLXBlcmZvcm1lZCcsXG4gIC8qKlxuICAgKiBUaHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHN3aXRjaCB0byBhIHNoZWV0IGJ5IGluZGV4IHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdvcmtib29rLlxuICAgKi9cbiAgSW5kZXhPdXRPZlJhbmdlID0gJ2luZGV4LW91dC1vZi1yYW5nZScsXG4gIC8qKlxuICAgKiBUaHJvd24gd2hlbiBhbiBlcnJvciBvY2N1cnMgd2l0aGluIHRoZSBUYWJsZWF1IEVtYmVkZGluZyBBUEkuIENvbnRhY3QgVGFibGVhdSBTdXBwb3J0LlxuICAgKi9cbiAgSW50ZXJuYWxFcnJvciA9ICdpbnRlcm5hbC1lcnJvcicsXG4gIC8qKlxuICAgKiBBbiBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIGN1c3RvbSB2aWV3IHRoYXQgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBJbnZhbGlkQ3VzdG9tVmlld05hbWUgPSAnaW52YWxpZC1jdXN0b20tdmlldy1uYW1lJyxcbiAgLyoqXG4gICAqIEFuIGludmFsaWQgZGF0ZSB3YXMgc3BlY2lmaWVkIGluIGEgbWV0aG9kIHRoYXQgcmVxdWlyZWQgYSBkYXRlIHBhcmFtZXRlci5cbiAgICovXG4gIEludmFsaWREYXRlUGFyYW1ldGVyID0gJ2ludmFsaWQtZGF0ZS1wYXJhbWV0ZXInLFxuICAvKipcbiAgICogRWl0aGVyIGEgZmlsdGVyIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgZmllbGQgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YSBzb3VyY2UsIG9yIHRoZSB2YWx1ZSBzdXBwbGllZFxuICAgKiBpbiB0aGUgZmlsdGVyIG9wZXJhdGlvbiBpcyB0aGUgd3JvbmcgZGF0YSB0eXBlIG9yIGZvcm1hdC5cbiAgICovXG4gIGludmFsaWRGaWx0ZXJGaWVsZE5hbWVPclZhbHVlID0gJ2ludmFsaWQtZmlsdGVyLWZpZWxkLW5hbWUnLFxuICAvKipcbiAgICogQSBwYXJhbWV0ZXIgaXMgbm90IHRoZSBjb3JyZWN0IGRhdGEgdHlwZSBvciBmb3JtYXQuIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGluIHRoZSBFcnJvci5tZXNzYWdlXG4gICAqIGZpZWxkLlxuICAgKi9cbiAgSW52YWxpZFBhcmFtZXRlciA9ICdpbnZhbGlkLXBhcmFtZXRlcicsXG4gIC8qKlxuICAgKiBBIG5lZ2F0aXZlIHNpemUgd2FzIHNwZWNpZmllZCBvciB0aGUgbWF4U2l6ZSB2YWx1ZSBpcyBsZXNzIHRoYW4gbWluU2l6ZSBpbiBTaGVldC5jaGFuZ2VTaXplQXN5bmMoKS5cbiAgICovXG4gIEludmFsaWRTaXplID0gJ2ludmFsaWQtc2l6ZScsXG4gIC8qKlxuICAgKiBBdHRlbXB0ZWQgdG8gZ2V0IGFuIGF1dGhvcmluZyB3b3Jrc2hlZXQgd2hlbiB0aGUgY3VycmVudCBzaGVldCBpcyBub3QgYSB3b3Jrc2hlZXQuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEludmFsaWRTaGVldFR5cGUgPSAnaW52YWxpZC1zaGVldC10eXBlJyxcbiAgLyoqXG4gICAqIEEgYmVoYXZpb3IgdmFsdWUgd2FzIGZvdW5kIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBTaGVldFNpemVCZWhhdmlvciBlbnVtLlxuICAgKi9cbiAgSW52YWxpZFNpemVCZWhhdmlvciA9ICdpbnZhbGlkLXNpemUtYmVoYXZpb3InLFxuICAvKipcbiAgICogQSBiZWhhdmlvciBvdGhlciB0aGFuIFNoZWV0U2l6ZUJlaGF2aW9yLkF1dG9tYXRpYyB3YXMgc3BlY2lmaWVkIGluIFNoZWV0LmNoYW5nZVNpemVBc3luYygpIHdoZW4gdGhlIHNoZWV0IGlzIGFcbiAgICogV29ya3NoZWV0IGluc3RhbmNlLlxuICAgKi9cbiAgSW52YWxpZFNpemVCZWhhdmlvck9uV29ya3NoZWV0ID0gJ2ludmFsaWQtc2l6ZS1iZWhhdmlvci1vbi13b3Jrc2hlZXQnLFxuICAvKipcbiAgICogVGhlIFVSTCBzcGVjaWZpZWQgaW4gdGhlIFZpeiBjbGFzcyBjb25zdHJ1Y3RvciBpcyBub3QgdmFsaWQuXG4gICAqL1xuICBJbnZhbGlkVXJsID0gJ2ludmFsaWQtdXJsJyxcbiAgLyoqXG4gICAqIFRoZSBtYXhTaXplIGZpZWxkIGlzIG1pc3NpbmcgaW4gU2hlZXQuY2hhbmdlU2l6ZUFzeW5jKCkgd2hlbiBzcGVjaWZ5aW5nIFNoZWV0U2l6ZUJlaGF2aW9yLkF0TW9zdC5cbiAgICovXG4gIE1pc3NpbmdNYXhTaXplID0gJ21pc3NpbmctbWF4LXNpemUnLFxuICAvKipcbiAgICogVGhlIG1pblNpemUgZmllbGQgaXMgbWlzc2luZyBpbiBTaGVldC5jaGFuZ2VTaXplQXN5bmMoKSB3aGVuIHNwZWNpZnlpbmcgU2hlZXRTaXplQmVoYXZpb3IuQXRMZWFzdC5cbiAgICovXG4gIE1pc3NpbmdNaW5TaXplID0gJ21pc3NpbmctbWluLXNpemUnLFxuICAvKipcbiAgICogVGhlIG1pblNpemUgb3IgbWF4U2l6ZSBmaWVsZCBpcyBtaXNzaW5nIGluIFNoZWV0LmNoYW5nZVNpemVBc3luYygpIHdoZW4gc3BlY2lmeWluZyBTaGVldFNpemVCZWhhdmlvci5SYW5nZS5cbiAgICovXG4gIE1pc3NpbmdNaW5NYXhTaXplID0gJ21pc3NpbmctbWluLW1heC1zaXplJyxcbiAgLyoqXG4gICAqIENhbiBvY2N1ciBpZiB0aGUgZW1iZWRkaW5nIGFwcCBpbnRlcmFjdHMgd2l0aCBhIHBhcmFtZXRlciB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya3NoZWV0LlxuICAgKi9cbiAgTWlzc2luZ1BhcmFtZXRlciA9ICdtaXNzaW5nLXBhcmFtZXRlcicsXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2VOIGZpZWxkIGlzIG1pc3NpbmcgZm9yIGEgcmVsYXRpdmUgZGF0ZSBmaWx0ZXIgb2YgdHlwZSBMQVNUTiBvciBORVhUTi5cbiAgICovXG4gIE1pc3NpbmdSYW5nZU5Gb3JSZWxhdGl2ZURhdGVGaWx0ZXJzID0gJ21pc3NpbmctcmFuZ2Utbi1mb3ItcmVsYXRpdmUtZGF0ZS1maWx0ZXJzJyxcbiAgLyoqXG4gICAqIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWNjZXNzIFNoZWV0LmdldFVybCgpIG9uIGEgaGlkZGVuIHNoZWV0LiBIaWRkZW4gc2hlZXRzIGRvIG5vdCBoYXZlIFVSTHMuXG4gICAqL1xuICBOb1VybEZvckhpZGRlbldvcmtzaGVldCA9ICduby11cmwtZm9yLWhpZGRlbi13b3Jrc2hlZXQnLFxuICAvKipcbiAgICogT25lIG9yIGJvdGggb2YgdGhlIHBhcmVudEVsZW1lbnQgb3IgdGhlIFVSTCBwYXJhbWV0ZXJzIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIFZpeiBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIE5vVXJsT3JQYXJlbnRFbGVtZW50Tm90Rm91bmQgPSAnbm8tdXJsLW9yLXBhcmVudC1lbGVtZW50LW5vdC1mb3VuZCcsXG4gIC8qKlxuICAgKiBBbiBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIHNoZWV0IHRoYXQgaXMgbm90IGFjdGl2ZSBvciBlbWJlZGRlZCB3aXRoaW4gdGhlIGFjdGl2ZSBkYXNoYm9hcmQuXG4gICAqL1xuICBOb3RBY3RpdmVTaGVldCA9ICdub3QtYWN0aXZlLXNoZWV0JyxcbiAgLyoqXG4gICAqIEEgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBub3Qgc3BlY2lmaWVkLCBudWxsLCBvciBhbiBlbXB0eSBzdHJpbmcvYXJyYXkuXG4gICAqL1xuICBOdWxsT3JFbXB0eVBhcmFtZXRlciA9ICdudWxsLW9yLWVtcHR5LXBhcmFtZXRlcicsXG4gIC8qKlxuICAgKiBBbiBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIHNoZWV0IHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdvcmtib29rLlxuICAgKi9cbiAgU2hlZXROb3RJbldvcmtib29rID0gJ3NoZWV0LW5vdC1pbi13b3JrYm9vaycsXG4gIC8qKlxuICAgKiBBbiBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9uIGEgQ3VzdG9tVmlldyBvYmplY3QgdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKGl0IGhhcyBiZWVuIHJlbW92ZWQpLlxuICAgKi9cbiAgU3RhbGVEYXRhUmVmZXJlbmNlID0gJ3N0YWxlLWRhdGEtcmVmZXJlbmNlJyxcbiAgLyoqXG4gICAqIFVua25vd24gZXJyb3IgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYXV0aCBmbG93LlxuICAgKi9cbiAgVW5rbm93bkF1dGhFcnJvciA9ICd1bmtub3duLWF1dGgtZXJyb3InLFxuICAvKipcbiAgICogQW4gdW5rbm93biBldmVudCBuYW1lIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGNhbGwgdG8gVml6LmFkZEV2ZW50TGlzdGVuZXIgb3IgVml6LnJlbW92ZUV2ZW50TGlzdGVuZXIuXG4gICAqL1xuICBVbnN1cHBvcnRlZEV2ZW50TmFtZSA9ICd1bnN1cHBvcnRlZC1ldmVudC1uYW1lJyxcbiAgLyoqXG4gICAqIEEgVml6IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50RWxlbWVudCBzcGVjaWZpZWQgaW4gdGhlIFZpeiBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIFZpekFscmVhZHlJbk1hbmFnZXIgPSAndml6LWFscmVhZHktaW4tbWFuYWdlcicsXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBlbWJlZGRpbmcgYXBpLlxuICAgKi9cbiAgSW1wbGVtZW50YXRpb25FcnJvciA9ICd3cm9uZy1pbXBsZW1lbnRhdGlvbicsXG4gIC8qKlxuICAgKiBATm90SW1wbGVtZW50ZWRcbiAgICovXG4gIE5vdEltcGxlbWVudGVkID0gJ25vdC1pbXBsZW1lbnRlZCcsXG4gIC8qKlxuICAgKiBVbmtub3duIGVycm9yIGR1cmluZyBldmVudCBpbml0aWFsaXphdGlvblxuICAgKi9cbiAgRXZlbnRJbml0aWFsaXphdGlvbkVycm9yID0gJ2V2ZW50LWluaXRpYWxpemF0aW9uLWVycm9yJyxcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGVtYmVkZGluZyBhcGkgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiB0YWJsZWF1XG4gICAqL1xuICBJbmNvbXBhdGlibGVWZXJzaW9uRXJyb3IgPSAnaW5jb21wYXRpYmxlLXZlcnNpb24tZXJyb3InLFxuXG4gIC8qKlxuICAgKiBVbmtub3duIHtAbGluayBUYWJsZWF1RGlhbG9nVHlwZX0gcGFzc2VkIGluIHRvIFZpei5kaXNwbGF5RGlhbG9nQXN5bmMuXG4gICAqL1xuICBVbmtub3duRGlhbG9nVHlwZSA9ICd1bmtub3duLWRpYWxvZy10eXBlJyxcblxuICAvKipcbiAgICogQ2FuIG9jY3VyIGlmIHRoZSBBUEkgaW50ZXJhY3RzIHdpdGggYSBmaWx0ZXIgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHdvcmtzaGVldC5cbiAgICogQ2FuIGFsc28gb2NjdXJzIGlmIGEge0BsaW5rIEZpbHRlclR5cGV9IGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC5cbiAgICovXG4gIEZpbHRlck1pc3NpbmdPck5vdEltcGxlbWVudGVkID0gJ2ZpbHRlci1taXNzaW5nLW5vdC1pbXBsZW1lbnRlZCcsXG5cbiAgLyoqXG4gICAqIENhbiBvY2N1ciBpZiBzdG9yeSBwb2ludCBpZHMgbm8gbG9uZ2VyIG1hdGNoLlxuICAgKi9cbiAgU3RvcnlQb2ludElkTWlzbWF0Y2ggPSAnc3Rvcnlwb2ludC1pZC1taXNtYXRjaCcsXG59XG5cbi8qKlxuICogRm9ybWF0cyBhdmFpbGFibGUgdG8gdXNlIHdpdGggZGlzcGxheVN0YXRpY0ltYWdlIGluIEBWaXpJbnRlcmZhY2VzXG4gKi9cbmV4cG9ydCBlbnVtIEZpbGVGb3JtYXRzIHtcbiAgUERGID0gJ3BkZicsXG4gIFBORyA9ICdwbmcnLFxufVxuXG5leHBvcnQgZW51bSBQcmludE9yaWVudGF0aW9uIHtcbiAgUG9ydHJhaXQgPSAncG9ydHJhaXQnLFxuICBMYW5kc2NhcGUgPSAnbGFuZHNjYXBlJyxcbn1cblxuZXhwb3J0IGVudW0gUHJpbnRQYWdlU2l6ZSB7XG4gIExldHRlciA9ICdsZXR0ZXInLFxuICBMZWdhbCA9ICdsZWdhbCcsXG4gIE5vdGUgPSAnbm90ZScsXG4gIEZvbGlvID0gJ2ZvbGlvJyxcbiAgVGFibG9pZCA9ICd0YWJsb2lkJyxcbiAgTGVkZ2VyID0gJ2xlZGdlcicsXG4gIFN0YXRlbWVudCA9ICdzdGF0ZW1lbnQnLFxuICBFeGVjdXRpdmUgPSAnZXhlY3V0aXZlJyxcbiAgQTMgPSAnQTMnLFxuICBBNCA9ICdBNCcsXG4gIEE1ID0gJ0E1JyxcbiAgQjQgPSAnQjQnLFxuICBCNSA9ICdCNScsXG4gIFF1YXJ0byA9ICdxdWFydG8nLFxuICBVbnNwZWNpZmllZCA9ICd1bnNwZWNpZmllZCcsXG59XG5cbmV4cG9ydCBlbnVtIFByaW50U2NhbGluZyB7XG4gIEF1dG9tYXRpYyA9ICdhdXRvbWF0aWMnLFxuICBQZXJjMjUgPSAnMjUlJyxcbiAgUGVyYzUwID0gJzUwJScsXG4gIFBlcmM2MCA9ICc2MCUnLFxuICBQZXJjNzUgPSAnNzUlJyxcbiAgUGVyYzgwID0gJzgwJScsXG4gIFBlcmM5MCA9ICc5MCUnLFxuICBQZXJjMTAwID0gJzEwMCUnLFxuICBQZXJjMjAwID0gJzIwMCUnLFxuICBQZXJjNDAwID0gJzQwMCUnLFxuICBBdE1vc3QxUGFnZUhpZ2ggPSAnYXQtbW9zdC0xLXBhZ2UtaGlnaCcsXG4gIEF0TW9zdDJQYWdlc0hpZ2ggPSAnYXQtbW9zdC0yLXBhZ2VzLWhpZ2gnLFxuICBBdE1vc3QxUGFnZVdpZGUgPSAnYXQtbW9zdC0xLXBhZ2Utd2lkZScsXG4gIEF0TW9zdDJQYWdlc1dpZGUgPSAnYXQtbW9zdC0yLXBhZ2VzLXdpZGUnLFxufVxuXG5leHBvcnQgZW51bSBSZXZlcnRWaXpTZWxlY3Rpb24ge1xuICBBbGwgPSAnYWxsJyxcbiAgQXhlcyA9ICdheGVzJyxcbiAgRmlsdGVycyA9ICdmaWx0ZXJzJyxcbiAgU29ydHMgPSAnc29ydHMnLFxuICBTaGVsdmVzID0gJ3NoZWx2ZXMnLFxufVxuXG5leHBvcnQgZW51bSBUb29sYmFyQnV0dG9ucyB7XG4gIEFsZXJ0cyA9ICdhbGVydHMnLFxuICBBc2tEYXRhID0gJ2Fza0RhdGEnLFxuICBDdXN0b21WaWV3cyA9ICdjdXN0b21WaWV3cycsXG4gIERhdGFEZXRhaWxzID0gJ2RhdGFEZXRhaWxzJyxcbiAgU2hhcmUgPSAnc2hhcmUnLFxuICBTdWJzY3JpYmUgPSAnc3Vic2NyaWJlJyxcbn1cblxuZXhwb3J0IGVudW0gVG9vbGJhciB7XG4gIFRvcCA9ICd0b3AnLFxuICBCb3R0b20gPSAnYm90dG9tJyxcbiAgSGlkZGVuID0gJ2hpZGRlbicsXG59XG5cbmV4cG9ydCBlbnVtIFNoZWV0U2l6ZUJlaGF2aW9yIHtcbiAgQXV0b21hdGljID0gJ2F1dG9tYXRpYycsXG4gIEV4YWN0bHkgPSAnZXhhY3RseScsXG4gIFJhbmdlID0gJ3JhbmdlJyxcbiAgQXRMZWFzdCA9ICdhdGxlYXN0JyxcbiAgQXRNb3N0ID0gJ2F0bW9zdCcsXG59XG5cbi8qKlxuICogQmUgY2FyZWZ1bCB3aGVuIGFkZGluZyBuZXcgZXZlbnQgdHlwZXMuIEV4dGVuc2lvbnMgYW5kIGVtYmVkZGluZyBmb2xsb3cgdHdvIGRpZmZlcmVudCBwYXR0ZXJucyBvbiBob3cgZXZlbnRzIGFyZSBuYW1lZC5cbiAqIEV2ZW50cyBzaG91bGQgYmUgYWxsIGxvd2VyIGNhc2UgYW5kIHdpdGhvdXQgaHlwaGVucyBvciB1bmRlcnNjb3Jlcy5cbiAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHR5cGUgb2YgdGFibGVhdSBlbWJlZGRpbmcgZXZlbnQgdGhhdCBjYW4gYmUgbGlzdGVuZWQgZm9yLlxuICovXG5leHBvcnQgZW51bSBUYWJsZWF1RXZlbnRUeXBlIHtcbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgY3VzdG9tIHZpZXcgaGFzIGZpbmlzaGVkIGxvYWRpbmcuIFRoaXMgZXZlbnQgaXMgcmFpc2VkIGFmdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Ige0BsaW5rIEZpcnN0SW50ZXJhY3RpdmV9IChpZiBhbnkpIGhhcyBiZWVuIGNhbGxlZC5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIEN1c3RvbVZpZXdMb2FkZWQgPSAnY3VzdG9tdmlld2xvYWRlZCcsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgY3VzdG9tIHZpZXcgaGFzIGJlZW4gcmVtb3ZlZC5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIEN1c3RvbVZpZXdSZW1vdmVkID0gJ2N1c3RvbXZpZXdyZW1vdmVkJyxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgYmVlbiBzYXZlZCAobmV3bHkgY3JlYXRlZCBvciB1cGRhdGVkKS5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIEN1c3RvbVZpZXdTYXZlZCA9ICdjdXN0b212aWV3c2F2ZWQnLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGN1c3RvbSB2aWV3IGhhcyBiZWVuIHNldCBhcyB0aGUgZGVmYXVsdCB2aWV3IGZvciBhIHdvcmtib29rLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgQ3VzdG9tVmlld1NldERlZmF1bHQgPSAnY3VzdG9tdmlld3NldGRlZmF1bHQnLFxuXG4gIC8qKiBSYWlzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEVkaXQgQnV0dG9uLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgRWRpdEJ1dHRvbkNsaWNrZWQgPSAnZWRpdGJ1dHRvbmNsaWNrZWQnLFxuXG4gIC8qKiBSYWlzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEVkaXQgSW4gRGVza3RvcCBCdXR0b24uXG4gICAqXG4gICAqIEBjYXRlZ29yeSBBdXRob3JpbmcsIFZpZXdpbmdcbiAgICovXG4gIEVkaXRJbkRlc2t0b3BCdXR0b25DbGlja2VkID0gJ2VkaXRpbmRlc2t0b3BidXR0b25jbGlja2VkJyxcblxuICAvKiogUmFpc2VkIHdoZW4gYW55IGZpbHRlciBoYXMgY2hhbmdlZCBzdGF0ZS4gWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggVGFibGVhdVZpeiBvYmplY3RzLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgRmlsdGVyQ2hhbmdlZCA9ICdmaWx0ZXJjaGFuZ2VkJyxcblxuICAvKiogRmlyZWQgd2hlbiB2aXogc2l6ZSBpcyBrbm93blxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nLCBWaWV3aW5nXG4gICAqL1xuICBGaXJzdFZpelNpemVLbm93biA9ICdmaXJzdHZpenNpemVrbm93bicsXG5cbiAgLyoqIEZpcmVkIHdoZW4gYSB2aXogZmlyc3QgYmVjb21lcyBpbnRlcmFjdGl2ZVxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nLCBWaWV3aW5nXG4gICAqL1xuICBGaXJzdEludGVyYWN0aXZlID0gJ2ZpcnN0aW50ZXJhY3RpdmUnLFxuXG4gIC8qKiBSYWlzZWQgd2hlbiBhIGN1c3RvbSBtYXJrIGNvbnRleHQgbWVudSBpcyBjbGlja2VkLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgQ3VzdG9tTWFya0NvbnRleHRNZW51RXZlbnQgPSAnY3VzdG9tbWFya2NvbnRleHRtZW51JyxcblxuICAvKiogVGhlIHNlbGVjdGVkIG1hcmtzIG9uIGEgdmlzdWFsaXphdGlvbiBoYXZlIGNoYW5nZWQuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFRhYmxlYXVWaXogb2JqZWN0cy5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIE1hcmtTZWxlY3Rpb25DaGFuZ2VkID0gJ21hcmtzZWxlY3Rpb25jaGFuZ2VkJyxcblxuICAvKiogQSBwYXJhbWV0ZXIgaGFzIGhhZCBpdHMgdmFsdWUgbW9kaWZpZWQuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFtbUGFyYW1ldGVyXV0gb2JqZWN0cy5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIFBhcmFtZXRlckNoYW5nZWQgPSAncGFyYW1ldGVyY2hhbmdlZCcsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIGEgdG9vbGJhciBidXR0b24gb3IgY29udHJvbCBiZWNvbWVzIGF2YWlsYWJsZSBvciBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgVG9vbGJhclN0YXRlQ2hhbmdlZCA9ICd0b29sYmFyc3RhdGVjaGFuZ2VkJyxcblxuICAvKiogUmFpc2VkIHdoZW4gdGhlIHdvcmtib29rIGlzIHJlYWR5IHRvIGNsb3NlLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBzZW50IHdoZW4gdXNpbmcgZW1iZWRkZWQgd2ViIGF1dGhvcmluZyBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nXG4gICAqL1xuICBXb3JrYm9va1JlYWR5VG9DbG9zZSA9ICd3b3JrYm9va3JlYWR5dG9jbG9zZScsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIHRoZSB3b3JrYm9vayBoYXMgYmVlbiBwdWJsaXNoZWQuIFRoaXMgbm90aWZpY2F0aW9uIGlzIHNlbnQgd2hlbiB1c2luZyBlbWJlZGRlZCB3ZWIgYXV0aG9yaW5nIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBBdXRob3JpbmdcbiAgICovXG4gIFdvcmtib29rUHVibGlzaGVkID0gJ3dvcmtib29rcHVibGlzaGVkJyxcblxuICAvKiogUmFpc2VkIHdoZW4gXCJwdWJsaXNoIGFzXCIgaXMgc3VjY2Vzc2Z1bC4gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCB3aGVuIHVzaW5nIGVtYmVkZGVkIHdlYiBhdXRob3JpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQGNhdGVnb3J5IEF1dGhvcmluZ1xuICAgKi9cbiAgV29ya2Jvb2tQdWJsaXNoZWRBcyA9ICd3b3JrYm9va3B1Ymxpc2hlZGFzJyxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBVUkwgYWN0aW9uIG9jY3Vycy4gU2VlIHRoZSB7QGxpbmsgVXJsQWN0aW9uRXZlbnR9IGNsYXNzLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgVXJsQWN0aW9uID0gJ3VybGFjdGlvbicsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCBhZnRlciBhIHRhYiBzd2l0Y2ggb2NjdXJzICh0aGUgYWN0aXZlIHNoZWV0IGhhcyBjaGFuZ2VkKS4gR3VhcmFudGVlcyB0aGUgdml6IG9iamVjdCB3aWxsIGJlIGludGVyYWN0aXZlIGFmdGVyIHRoaXMuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBWaWV3aW5nXG4gICAqL1xuICBUYWJTd2l0Y2hlZCA9ICd0YWJzd2l0Y2hlZCcsXG4gIC8qKlxuICAgKlxuICAgKiBSYWlzZWQgYWZ0ZXIgYSBuZXcgc3RvcnkgcG9pbnQgYmVjb21lcyBhY3RpdmUuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBWaWV3aW5nXG4gICAqL1xuICBTdG9yeVBvaW50U3dpdGNoZWQgPSAnc3Rvcnlwb2ludHN3aXRjaGVkJyxcbiAgLyoqXG4gICAqXG4gICAqIFJhaXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycyB3aGlsZSBsb2FkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgd2ViY29tcG9uZW50LlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nLCBWaWV3aW5nLCBBc2tEYXRhXG4gICAqL1xuICBWaXpMb2FkRXJyb3IgPSAndml6bG9hZGVycm9yJyxcbiAgLyoqXG4gICAqIFJhaXNlZCBhZnRlciB0aGUgaWZyYW1lIHNyYyBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZFxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nLCBWaWV3aW5nLCBBc2tEYXRhXG4gICAqL1xuICBJZnJhbWVTcmNVcGRhdGVkID0gJ2lmcmFtZXNyY3VwZGF0ZWQnLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlIHRvIHN1bW1hcnkgZGF0YS5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIFN1bW1hcnlEYXRhQ2hhbmdlZCA9ICdzdW1tYXJ5ZGF0YWNoYW5nZWQnLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiB0YWJsZWF1ICh2aXotY2xpZW50KSBpcyByZWFkeSB0byByZWNlaXZlIGFuIGF1dGggdG9rZW4uXG4gICAqIFVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIGluIHNhbGVzZm9yY2UgbmF0aXZlIG1vZGUuXG4gICAqXG4gICAqIEBoaWRkZW5cbiAgICogQGNhdGVnb3J5IEF1dGhvcmluZywgVmlld2luZyxcbiAgICovXG4gIFJlYWR5VG9SZWNlaXZlQXV0aFRva2VuID0gJ3JlYWR5dG9yZWNlaXZlYXV0aHRva2VuJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhdGlvbiBvZiBhIGNvbnRleHQgbWVudSB3aGVyZSB1c2VycyBjYW4gYWRkIGV4dGVybmFsIG1lbnUgaXRlbXMuXG4gKi9cbmV4cG9ydCBlbnVtIEFwaU1lbnVUeXBlIHtcbiAgLyoqIEV4dGVybmFsIG1lbnUgaXRlbSB3aWxsIGJlIGluamVjdGVkIGluIHViZXJ0aXAgZGlhbG9nICovXG4gIFViZXJ0aXAgPSAndWJlcnRpcCcsXG59XG5cbi8qKiBZb3UgY2FuIHVzZSB0aGlzIHR5cGUgd2l0aCBhIHtAbGluayBWaXp9IG9iamVjdC4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlYXVEaWFsb2dUeXBlIHtcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgUERGIGRpYWxvZy5cbiAgICovXG4gIEV4cG9ydFBERiA9ICdleHBvcnQtcGRmJyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgUG93ZXJQb2ludCBkaWFsb2cuXG4gICAqL1xuICBFeHBvcnRQb3dlclBvaW50ID0gJ2V4cG9ydC1wb3dlcnBvaW50JyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgRGF0YSBkaWFsb2cuXG4gICAqL1xuICBFeHBvcnREYXRhID0gJ2V4cG9ydC1kYXRhJyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgQ3Jvc3NUYWIgZGlhbG9nLlxuICAgKi9cbiAgRXhwb3J0Q3Jvc3NUYWIgPSAnZXhwb3J0LWNyb3NzLXRhYicsXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRpc3BsYXkgdGhlIGRvd25sb2FkIFdvcmtib29rIGRpYWxvZy5cbiAgICovXG4gIEV4cG9ydFdvcmtib29rID0gJ2V4cG9ydC13b3JrYm9vaycsXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRpc3BsYXkgdGhlIFNoYXJlIGRpYWxvZy5cbiAgICovXG4gIFNoYXJlID0gJ3NoYXJlJyxcbn1cbiIsImltcG9ydCB7IFdlYkNvbXBvbmVudExvY2FsU2V0dGluZ3MgfSBmcm9tICcuL1dlYkNvbXBvbmVudEludGVyZmFjZXMnO1xuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS1wdWxzZT4gd2ViIGNvbXBvbmVudC5cbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGVudW0gUHVsc2VBdHRyaWJ1dGVzIHtcbiAgRGlzYWJsZUV4cGxvcmVGaWx0ZXIgPSAnZGlzYWJsZS1leHBsb3JlLWZpbHRlcicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVsc2VTZXR0aW5ncyBleHRlbmRzIFdlYkNvbXBvbmVudExvY2FsU2V0dGluZ3Mge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGV4cGxvcmUgZmlsdGVyIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtcHVsc2UgaWQ9XCJ0YWJsZWF1UHVsc2VcIiBkaXNhYmxlLWV4cGxvcmUtZmlsdGVyPlxuICAgKiBgYGBcbiAgICovXG4gIGRpc2FibGVFeHBsb3JlRmlsdGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRva2VuIHVzZWQgZm9yIGF1dGhvcml6YXRpb25cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiB0b2tlbj1cInNvbWUtdG9rZW4tY29udGFpbmluZy1jbGllbnRJZFwiIC8+XG4gICAqIDx0YWJsZWF1LWF1dGhvcmluZy12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgdG9rZW49XCJzb21lLXRva2VuLWNvbnRhaW5pbmctY2xpZW50SWRcIiAvPlxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgdG9rZW49XCJzb21lLXRva2VuLWNvbnRhaW5pbmctY2xpZW50SWRcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSB0b3AtbGV2ZWwgUHVsc2Ugb2JqZWN0LlxuICoqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxzZSBleHRlbmRzIFB1bHNlU2V0dGluZ3Mge31cbiIsImltcG9ydCB7XG4gIENyb3NzdGFiRmlsZUZvcm1hdCxcbiAgRGV2aWNlVHlwZSxcbiAgUHJpbnRPcmllbnRhdGlvbixcbiAgUHJpbnRQYWdlU2l6ZSxcbiAgUHJpbnRTY2FsaW5nLFxuICBUYWJsZWF1RGlhbG9nVHlwZSxcbiAgVGFibGVhdUV2ZW50VHlwZSxcbiAgVG9vbGJhcixcbn0gZnJvbSAnLi9FbnVtcyc7XG5pbXBvcnQgeyBTaGVldFNpemUgfSBmcm9tICcuL1NoZWV0SW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzLCBXZWJDb21wb25lbnRTZXR0aW5nc1NoYXJlZCB9IGZyb20gJy4vV2ViQ29tcG9uZW50SW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBXb3JrYm9vayB9IGZyb20gJy4vV29ya2Jvb2tJbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS12aXo+IGFuZCA8dGFibGVhdS1hdXRob3Jpbmctdml6PiB3ZWIgY29tcG9uZW50LlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZW51bSBWaXpTaGFyZWRBdHRyaWJ1dGVzIHtcbiAgVG91Y2hPcHRpbWl6ZSA9ICd0b3VjaC1vcHRpbWl6ZScsXG4gIEhpZGVFZGl0SW5EZXNrdG9wQnV0dG9uID0gJ2hpZGUtZWRpdC1pbi1kZXNrdG9wLWJ1dHRvbicsXG4gIFN1cHByZXNzRGVmYXVsdEVkaXRCZWhhdmlvciA9ICdzdXBwcmVzcy1kZWZhdWx0LWVkaXQtYmVoYXZpb3InLFxuICBEaXNhYmxlVmVyc2lvbkNoZWNrID0gJ2Rpc2FibGUtdmVyc2lvbi1jaGVjaycsXG4gIE9uRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWQgPSAnb25FZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZCcsXG4gIE9uRmlyc3RWaXpTaXplS25vd24gPSAnb25GaXJzdFZpelNpemVLbm93bicsXG4gIE9uRmlyc3RJbnRlcmFjdGl2ZSA9ICdvbkZpcnN0SW50ZXJhY3RpdmUnLFxufVxuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS12aXo+IHdlYiBjb21wb25lbnQuXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBlbnVtIFZpekF0dHJpYnV0ZXMge1xuICBEaXNhYmxlVXJsQWN0aW9uc1BvcHVwcyA9ICdkaXNhYmxlLXVybC1hY3Rpb25zJyxcbiAgSGlkZVRhYnMgPSAnaGlkZS10YWJzJyxcbiAgVG9vbGJhciA9ICd0b29sYmFyJyxcbiAgSW5zdGFuY2VJZFRvQ2xvbmUgPSAnaW5zdGFuY2UtaWQtdG8tY2xvbmUnLFxuICBEZXZpY2UgPSAnZGV2aWNlJyxcbiAgSGlkZUVkaXRCdXR0b24gPSAnaGlkZS1lZGl0LWJ1dHRvbicsXG4gIE9uRWRpdEJ1dHRvbkNsaWNrZWQgPSAnb25FZGl0QnV0dG9uQ2xpY2tlZCcsXG4gIE9uRmlsdGVyQ2hhbmdlZCA9ICdvbkZpbHRlckNoYW5nZWQnLFxuICBPbkN1c3RvbU1hcmtDb250ZXh0TWVudUV2ZW50ID0gJ29uQ3VzdG9tTWFya0NvbnRleHRNZW51RXZlbnQnLFxuICBPbk1hcmtTZWxlY3Rpb25DaGFuZ2VkID0gJ29uTWFya1NlbGVjdGlvbkNoYW5nZWQnLFxuICBPblBhcmFtZXRlckNoYW5nZWQgPSAnb25QYXJhbWV0ZXJDaGFuZ2VkJyxcbiAgT25Ub29sYmFyU3RhdGVDaGFuZ2VkID0gJ29uVG9vbGJhclN0YXRlQ2hhbmdlZCcsXG4gIE9uVXJsQWN0aW9uID0gJ29uVXJsQWN0aW9uJyxcbiAgT25UYWJTd2l0Y2hlZCA9ICdvblRhYlN3aXRjaGVkJyxcbiAgT25DdXN0b21WaWV3TG9hZGVkID0gJ29uQ3VzdG9tVmlld0xvYWRlZCcsXG4gIE9uQ3VzdG9tVmlld1JlbW92ZWQgPSAnb25DdXN0b21WaWV3UmVtb3ZlZCcsXG4gIE9uQ3VzdG9tVmlld1NhdmVkID0gJ29uQ3VzdG9tVmlld1NhdmVkJyxcbiAgT25DdXN0b21WaWV3U2V0RGVmYXVsdCA9ICdvbkN1c3RvbVZpZXdTZXREZWZhdWx0JyxcbiAgT25TdG9yeVBvaW50U3dpdGNoZWQgPSAnb25TdG9yeVBvaW50U3dpdGNoZWQnLFxuICBPblN1bW1hcnlEYXRhQ2hhbmdlZCA9ICdvblN1bW1hcnlEYXRhQ2hhbmdlZCcsXG4gIE9uUmVhZHlUb1JlY2VpdmVBdXRoVG9rZW4gPSAnb25SZWFkeVRvUmVjZWl2ZUF1dGhUb2tlbicsXG59XG5cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBzdHJpbmcgY29uc3RhbnRzIHlvdSBjYW4gdXNlIGFzIEhUTUwgYXR0cmlidXRlcyBmb3IgdGhlIDx0YWJsZWF1LWF1dGhvcmluZy12aXo+IHdlYiBjb21wb25lbnQuXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBlbnVtIFZpekF1dGhvcmluZ0F0dHJpYnV0ZXMge1xuICBPbldvcmtib29rUHVibGlzaGVkID0gJ29uV29ya2Jvb2tQdWJsaXNoZWQnLFxuICBPbldvcmtib29rUHVibGlzaGVkQXMgPSAnb25Xb3JrYm9va1B1Ymxpc2hlZEFzJyxcbiAgT25Xb3JrYm9va1JlYWR5VG9DbG9zZSA9ICdvbldvcmtib29rUmVhZHlUb0Nsb3NlJyxcbiAgSGlkZUNsb3NlQnV0dG9uID0gJ2hpZGUtY2xvc2UtYnV0dG9uJyxcbn1cblxuLyoqXG4gKiBUaGUgbmFtZXMgb2YgdGhlIHN0cmluZyBjb25zdGFudHMgeW91IGNhbiB1c2UgYXMgY2hpbGQgdGFncyBmb3IgVGFibGVhdVZpeiBhbmQgVGFibGVhdUF1dGhvcmluZ1ZpeiBjdXN0b20gZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBlbnVtIFZpekNoaWxkRWxlbWVudHMge1xuICAvKipcbiAgICogQ29udGFpbnMgYSBsaXN0IG9mIGZpbHRlciBwYXJhbWV0ZXJzLiBBdmFpbGFibGUgb25seSBpbiB2aWV3aW5nIG1vZGUuXG4gICAqL1xuICBWaXpGaWx0ZXIgPSAndml6LWZpbHRlcicsXG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIGEgbmFtZSBhbmQgdmFsdWUgZm9yIGEgcGFyYW1ldGVyLiBBdmFpbGFibGUgb25seSBpbiB2aWV3aW5nIG1vZGUuXG4gICAqL1xuICBWaXpQYXJhbWV0ZXIgPSAndml6LXBhcmFtZXRlcicsXG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIGEgbGlzdCBvZiBjdXN0b20gcGFyYW1ldGVycy4gIEF2YWlsYWJsZSBpbiBib3RoIHZpZXdpbmcgYW5kIGF1dGhvcmluZyBtb2Rlcy5cbiAgICovXG4gIEN1c3RvbVBhcmFtZXRlciA9ICdjdXN0b20tcGFyYW1ldGVyJyxcbn1cblxuZXhwb3J0IGVudW0gVml6Q2hpbGRFbGVtZW50QXR0cmlidXRlcyB7XG4gIEZpZWxkID0gJ2ZpZWxkJyxcbiAgVmFsdWUgPSAndmFsdWUnLFxuICBOYW1lID0gJ25hbWUnLFxufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSB0b3AgbGV2ZWwgVml6IG9iamVjdC5cbiAqKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml6IGV4dGVuZHMgVml6U2V0dGluZ3MsIFdlYkNvbXBvbmVudExvY2FsU2V0dGluZ3MsIFZpekFjdGlvbnMge1xuICAvKipcbiAgICogT25lIFdvcmtib29rIGlzIHN1cHBvcnRlZCBwZXIgdmlzdWFsaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtib29rPzogV29ya2Jvb2s7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYXV0aCB0b2tlbiBmb3Igc2FsZXNmb3JjZSBuYXRpdmUgbW9kZVxuICAgKiBAcGFyYW0gdG9rZW5cbiAgICovXG4gIHNldEF1dGhUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgdG9wIGxldmVsIEF1dGhvcmluZyBWaXogb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcmluZ1ZpeiBleHRlbmRzIFZpekF1dGhvcmluZ1NldHRpbmdzLCBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpc3VhbGl6YXRpb24ncyBjdXJyZW50IFVSTC5cbiAgICovXG4gIGdldEN1cnJlbnRTcmNBc3luYygpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYXV0aCB0b2tlbiBmb3Igc2FsZXNmb3JjZSBuYXRpdmUgbW9kZVxuICAgKiBAcGFyYW0gdG9rZW5cbiAgICovXG4gIHNldEF1dGhUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgLSBBY3Rpb25zIHJlbGF0ZWQgdG8gZXZlbnRzIGFuZCBzdGF0ZSBvZiB0aGUgdml6XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml6QWN0aW9ucyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhdXRvbWF0aWMgdXBkYXRlcyBhcmUgY3VycmVudGx5IHBhdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9tYXRpY1VwZGF0ZXNBcmVQYXVzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdXNlIGxheW91dCB1cGRhdGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIHJlc2l6aW5nIHRoZSB2aXN1YWxpemF0aW9uIG9yIHBlcmZvcm1pbmcgbXVsdGlwbGUgY2FsbHMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGxheW91dC5cbiAgICovXG4gIHBhdXNlQXV0b21hdGljVXBkYXRlc0FzeW5jKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBsYXlvdXQgdXBkYXRlcy5cbiAgICovXG4gIHJlc3VtZUF1dG9tYXRpY1VwZGF0ZXNBc3luYygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgbGF5b3V0IHVwZGF0ZXMuXG4gICAqL1xuICB0b2dnbGVBdXRvbWF0aWNVcGRhdGVzQXN5bmMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRXF1aXZhbGVudCB0byBjbGlja2luZyBvbiB0aGUgUmV2ZXJ0IEFsbCB0b29sYmFyIGJ1dHRvbiwgd2hpY2ggcmVzdG9yZXMgdGhlIHdvcmtib29rIHRvIGl0cyBzdGFydGluZyBzdGF0ZS5cbiAgICovXG4gIHJldmVydEFsbEFzeW5jKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEVxdWl2YWxlbnQgdG8gY2xpY2tpbmcgb24gdGhlIFJlZnJlc2ggRGF0YSB0b29sYmFyIGJ1dHRvbi5cbiAgICovXG4gIHJlZnJlc2hEYXRhQXN5bmMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRXF1aXZhbGVudCB0byBjbGlja2luZyBvbiBEb3dubG9hZCA+IEltYWdlIGZyb20gdGhlIHRvb2xiYXIsIHdoaWNoIGNyZWF0ZXMgYSBQTkcgZmlsZSBvZiB0aGUgY3VycmVudCB2aXN1YWxpemF0aW9uLlxuICAgKi9cbiAgZXhwb3J0SW1hZ2VBc3luYygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBjcm9zc3RhYiBvZiBhbnkgZ2l2ZW4gd29ya3NoZWV0IHdpdGhpbiB0aGUgY3VycmVudCB2aWV3IHRvIGFcbiAgICogc3BlY2lmaWVkIGZvcm1hdCAoQ3Jvc3N0YWJGaWxlRm9ybWF0LkV4Y2VsLCBDcm9zc3RhYkZpbGVGb3JtYXQuQ1NWKS5cbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzaGVldCBuYW1lIGRvZXMgbm90IG1hdGNoIGFueSB3b3Jrc2hlZXRzIHdpdGhpbiB0aGUgYWN0aXZlIHNoZWV0LlxuICAgKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNyb3NzdGFiIGZpbGUgZmFpbGVkIHRvIGJlIGNyZWF0ZWQuXG4gICAqIE5vdGU6IGV4cG9ydENyb3NzdGFiQXN5bmMgcmVzb2x2ZXMgd2hlbiBhIGRvd25sb2FkIGlzIGluaXRpYXRlZC4gSXQgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCBhIGRvd25sb2FkIHdhcyBzdWNjZXNzZnVsIG9yIGlmIHRoZSBkb3dubG9hZCB3YXMgY29tcGxldGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiBsZXQgdml6ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlYXVWaXonKTtcbiAgICogdml6LmV4cG9ydENyb3NzdGFiQXN5bmMoJ1NhbGVzIGJ5IFNlZ21lbnQnLCBDcm9zc3RhYkZpbGVGb3JtYXQuQ1NWKTtcbiAgICogYGBgXG4gICAqL1xuICBleHBvcnRDcm9zc3RhYkFzeW5jKHNoZWV0TmFtZTogc3RyaW5nLCBmb3JtYXQ6IENyb3NzdGFiRmlsZUZvcm1hdCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIHN1bW1hcnkgZGF0YSBzaG93biBpbiB0aGUgVmlldyBEYXRhIHdpbmRvd1xuICAgKiAoc2hvd24gd2hlbiB5b3UgY2xpY2sgRG93bmxvYWQgPiBEYXRhIGZyb20gdGhlIHRvb2xiYXIgZm9yIGFueSBnaXZlbiB3b3Jrc2hlZXQgd2l0aGluIHRoZSBjdXJyZW50IHZpZXcpLlxuICAgKiBUaGUgY3VycmVudCBmaWxlIGZvcm1hdCBpcyBDU1YuIFRoZXJlIGlzIG5vIGxpbWl0YXRpb24gb24gdGhlIGFtb3VudCBvZiBzdW1tYXJ5IGRhdGEgeW91IGNhbiBleHBvcnQuXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgc2hlZXQgbmFtZSBkb2VzIG5vdCBtYXRjaCBhbnkgd29ya3NoZWV0cyB3aXRoaW4gdGhlIGFjdGl2ZSBzaGVldC5cbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBDU1YgZmlsZSBmYWlsZWQgdG8gYmUgY3JlYXRlZC5cbiAgICogTm90ZTogZXhwb3J0RGF0YUFzeW5jIHJlc29sdmVzIHdoZW4gYSBkb3dubG9hZCBpcyBpbml0aWF0ZWQuIEl0IGRvZXMgbm90IGluZGljYXRlIHRoYXQgYSBkb3dubG9hZCB3YXMgc3VjY2Vzc2Z1bCBvciBpZiB0aGUgZG93bmxvYWQgd2FzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogbGV0IHZpeiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZWF1Vml6Jyk7XG4gICAqIGNvbnN0IGFjdGl2ZVNoZWV0ID0gdml6Lndvcmtib29rLmFjdGl2ZVNoZWV0O1xuICAgKiBpZiAoYWN0aXZlU2hlZXQuc2hlZXRUeXBlID09PSBTaGVldFR5cGUuV29ya3NoZWV0KSB7XG4gICAqICAgY29uc3QgY29sdW1ucyA9IGF3YWl0IGFjdGl2ZVNoZWV0LmdldFN1bW1hcnlDb2x1bW5zSW5mb0FzeW5jKCk7XG4gICAqICAgLy8gR2V0dGluZyBmaWVsZElkJ3MgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgY29sdW1uc1xuICAgKiAgIGNvbnN0IGNvbHVtbnNUb0luY2x1ZGVCeUlkID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgKiAgICAgaWYgKGNvbHVtbi5maWVsZE5hbWUgPT09ICdMYXRpdHVkZScgfHwgY29sdW1uLmZpZWxkTmFtZSA9PT0gJ0xvbmdpdHVkZScpIHtcbiAgICogICAgICAgcmV0dXJuIGNvbHVtbi5maWVsZElkO1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKiAgIGF3YWl0IHZpei5leHBvcnREYXRhQXN5bmMoYWN0aXZlU2hlZXQubmFtZSwgeyBjb2x1bW5zVG9JbmNsdWRlQnlJZCB9KTtcbiAgICogfVxuICAgKiBlbHNlIGlmIChhY3RpdmVTaGVldC5zaGVldFR5cGUgPT09IFNoZWV0VHlwZS5EYXNoYm9hcmQpIHtcbiAgICogICAvLyBFeHBvcnRpbmcgdGhlIHN1bW1hcnkgZGF0YSBmb3IgZWFjaCB3b3Jrc2hlZXQgaW4gdGhlIGRhc2hib2FyZCB3aGlsZSBhbHNvIGlnbm9yaW5nIGFsaWFzZXNcbiAgICogICBmb3IgKGNvbnN0IHdvcmtzaGVldCBvZiBhY3RpdmVTaGVldC53b3Jrc2hlZXRzKSB7XG4gICAqICAgICBhd2FpdCB2aXouZXhwb3J0RGF0YUFzeW5jKHdvcmtzaGVldC5uYW1lLCB7IGlnbm9yZUFsaWFzZXM6IHRydWUgfSk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGVsc2VcbiAgICoge1xuICAgKiAgIC8vIGFjdGl2ZVNoZWV0IGlzIGEgU3RvcnkgYW5kIHdlIHdhbnQgdG8gZXhwb3J0IHdvcmtzaGVldHMgd2l0aGluIHRoZSBjdXJyZW50IHZpZXdcbiAgICogICBjb25zdCBjb250YWluZWRTaGVldCA9IGFjdGl2ZVNoZWV0LmFjdGl2ZVN0b3J5UG9pbnQuY29udGFpbmVkU2hlZXQ7XG4gICAqICAgaWYgKGNvbnRhaW5lZFNoZWV0ICE9PSB1bmRlZmluZWQgJiYgY29udGFpbmVkU2hlZXQuc2hlZXRUeXBlID09PSBTaGVldFR5cGUuV29ya3NoZWV0KSB7XG4gICAqICAgICAvLyBFeHBvcnRpbmcgc3VtbWFyeSBkYXRhIG9mIGEgd29ya3NoZWV0IHdpdGhpbiB0aGUgYWN0aXZlIHN0b3J5IHBvaW50XG4gICAqICAgICBhd2FpdCB2aXouZXhwb3J0RGF0YUFzeW5jKGNvbnRhaW5lZFNoZWV0Lm5hbWUpO1xuICAgKiAgIH0gZWxzZSBpZiAoY29udGFpbmVkU2hlZXQgIT09IHVuZGVmaW5lZCAmJiBjb250YWluZWRTaGVldC5zaGVldFR5cGUgPT09IFNoZWV0VHlwZS5EYXNoYm9hcmQpIHtcbiAgICogICAgIC8vIEV4cG9ydGluZyB0aGUgc3VtbWFyeSBkYXRhIGZvciBlYWNoIHdvcmtzaGVldCB3aXRoaW4gdGhlIGFjdGl2ZSBzdG9yeSBwb2ludFxuICAgKiAgICAgZm9yIChjb25zdCB3b3Jrc2hlZXQgb2YgY29udGFpbmVkU2hlZXQud29ya3NoZWV0cykge1xuICAgKiAgICAgICBhd2FpdCB2aXouZXhwb3J0RGF0YUFzeW5jKHdvcmtzaGVldC5uYW1lKTtcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBleHBvcnREYXRhQXN5bmMoc2hlZXROYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBFeHBvcnREYXRhT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGxpc3Qgb2Ygc2hlZXRzIHRvIGEgUG93ZXJQb2ludCBmaWxlLiBJZiBubyBzaGVldHMgYXJlIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgc2hlZXQgaXMgZXhwb3J0ZWQuXG4gICAqIFRoZSBvcmRlciB0aGUgc2hlZXRzIGFwcGVhciBpbiB0aGUgbGlzdCBpcyB0aGUgb3JkZXIgdGhlIHNoZWV0cyBhcHBlYXIgaW4gdGhlIFBvd2VyUG9pbnQgZmlsZS5cbiAgICogVGhlIGxpc3Qgb2Ygc2hlZXRzIGNhbiBlaXRoZXIgZXhjbHVzaXZlbHkgaW5jbHVkZSB0aGUgd29ya3NoZWV0cyB3aXRoaW4gYSBkYXNoYm9hcmQgb3IgZXhjbHVzaXZlbHkgaW5jbHVkZSB0aGUgcHVibGlzaGVkIHNoZWV0cyBmcm9tIHRoZSB3b3JrYm9vay5cbiAgICpcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBsaXN0IG9mIHNoZWV0cyBjb250YWlucyBib3RoIHdvcmtzaGVldHMgd2l0aGluIGEgZGFzaGJvYXJkIGFuZCBwdWJsaXNoZWQgc2hlZXRzIGZyb20gdGhlIHdvcmtib29rLlxuICAgKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIFBvd2VyUG9pbnQgZmlsZSBmYWlscyB0byBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBOb3RlOiBleHBvcnRQb3dlclBvaW50QXN5bmMgcmVzb2x2ZXMgd2hlbiBhIGRvd25sb2FkIGlzIGluaXRpYXRlZC4gSXQgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCBhIGRvd25sb2FkIHdhcyBzdWNjZXNzZnVsIG9yIGlmIHRoZSBkb3dubG9hZCB3YXMgY29tcGxldGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiBsZXQgdml6ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlYXVWaXonKTtcbiAgICogY29uc3Qgd29ya2Jvb2sgPSB2aXoud29ya2Jvb2s7XG4gICAqIGNvbnN0IGFjdGl2ZVNoZWV0ID0gd29ya2Jvb2suYWN0aXZlU2hlZXQ7XG4gICAqIGlmIChhY3RpdmVTaGVldC5zaGVldFR5cGUgPT09IFNoZWV0VHlwZS5Xb3Jrc2hlZXQgfHwgYWN0aXZlU2hlZXQuc2hlZXRUeXBlID09PSBTaGVldFR5cGUuU3RvcnkpIHtcbiAgICogICBhd2FpdCB2aXouZXhwb3J0UG93ZXJQb2ludEFzeW5jKCk7XG4gICAqIH0gZWxzZSBpZiAoYWN0aXZlU2hlZXQuc2hlZXRUeXBlID09PSAgU2hlZXRUeXBlLkRhc2hib2FyZCkge1xuICAgKiAgIGNvbnN0IHdvcmtzaGVldE5hbWVzID0gYWN0aXZlU2hlZXQud29ya3NoZWV0cy5tYXAoKHdvcmtzaGVldCkgPT4gd29ya3NoZWV0Lm5hbWUpO1xuICAgKiAgIGF3YWl0IHZpei5leHBvcnRQb3dlclBvaW50QXN5bmMod29ya3NoZWV0TmFtZXMpO1xuICAgKiB9XG4gICAqIC8vIGV4cG9ydGluZyBhbGwgc2hlZXRzIHdpdGhpbiB0aGUgd29ya2Jvb2sgdG8gUG93ZXJQb2ludFxuICAgKiBjb25zdCBwdWJsaXNoZWRTaGVldE5hbWVzID0gd29ya2Jvb2sucHVibGlzaGVkU2hlZXRzSW5mby5tYXAoKHB1Ymxpc2hlZFNoZWV0SW5mbykgPT4gcHVibGlzaGVkU2hlZXRJbmZvLm5hbWUpO1xuICAgKiBhd2FpdCB2aXouZXhwb3J0UG93ZXJQb2ludEFzeW5jKHB1Ymxpc2hlZFNoZWV0TmFtZXMpO1xuICAgKiBgYGBcbiAgICovXG4gIGV4cG9ydFBvd2VyUG9pbnRBc3luYyhzaGVldE5hbWVzPzogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGxpc3Qgb2Ygc2hlZXRzIHdpdGggdGhlIGdpdmVuIHtAbGluayBFeHBvcnRQREZPcHRpb25zfSBvcHRpb25zLiBJZiBubyBzaGVldHMgYXJlIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgc2hlZXQgaXMgZXhwb3J0ZWQuXG4gICAqIFRoZSBsaXN0IG9mIHNoZWV0cyBjYW4gZWl0aGVyIGV4Y2x1c2l2ZWx5IGluY2x1ZGUgdGhlIHdvcmtzaGVldHMgd2l0aGluIGEgZGFzaGJvYXJkIG9yIGV4Y2x1c2l2ZWx5IGluY2x1ZGUgdGhlIHB1Ymxpc2hlZCBzaGVldHMgZnJvbSB0aGUgd29ya2Jvb2suXG4gICAqIElmIG5vIEV4cG9ydFBERk9wdGlvbnMgYXJlIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlOiBTY2FsaW5nID0gQXV0b21hdGljLCBQYWdlU2l6ZSA9IExldHRlciwgYW5kIE9yaWVudGF0aW9uID0gUG9ydHJhaXQuXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgbGlzdCBvZiBzaGVldHMgY29udGFpbnMgYm90aCB3b3Jrc2hlZXRzIHdpdGhpbiBhIGRhc2hib2FyZCBhbmQgcHVibGlzaGVkIHNoZWV0cyBmcm9tIHRoZSB3b3JrYm9vay5cbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBQREYgZmlsZSBmYWlscyB0byBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBOb3RlOiBleHBvcnRQREZBc3luYyByZXNvbHZlcyB3aGVuIGEgZG93bmxvYWQgaXMgaW5pdGlhdGVkLiBJdCBkb2VzIG5vdCBpbmRpY2F0ZSB0aGF0IGEgZG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3IgaWYgdGhlIGRvd25sb2FkIHdhcyBjb21wbGV0ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIGxldCB2aXogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGVhdVZpeicpO1xuICAgKiBjb25zdCB3b3JrYm9vayA9IHZpei53b3JrYm9vaztcbiAgICogY29uc3QgYWN0aXZlU2hlZXQgPSB3b3JrYm9vay5hY3RpdmVTaGVldDtcbiAgICogaWYgKGFjdGl2ZVNoZWV0LnNoZWV0VHlwZSA9PT0gU2hlZXRUeXBlLldvcmtzaGVldCB8fCBhY3RpdmVTaGVldC5zaGVldFR5cGUgPT09IFNoZWV0VHlwZS5TdG9yeSkge1xuICAgKiAgIGF3YWl0IHZpei5leHBvcnRQREZBc3luYygpO1xuICAgKiB9IGVsc2UgaWYgKGFjdGl2ZVNoZWV0LnNoZWV0VHlwZSA9PT0gIFNoZWV0VHlwZS5EYXNoYm9hcmQpIHtcbiAgICogICBjb25zdCB3b3Jrc2hlZXROYW1lcyA9IGFjdGl2ZVNoZWV0LndvcmtzaGVldHMubWFwKCh3b3Jrc2hlZXQpID0+IHdvcmtzaGVldC5uYW1lKTtcbiAgICogICBhd2FpdCB2aXouZXhwb3J0UERGQXN5bmMod29ya3NoZWV0TmFtZXMpO1xuICAgKiB9XG4gICAqIC8vIGV4cG9ydGluZyBhbGwgc2hlZXRzIHdpdGhpbiB0aGUgd29ya2Jvb2sgdG8gUERGXG4gICAqIGNvbnN0IHB1Ymxpc2hlZFNoZWV0TmFtZXMgPSB3b3JrYm9vay5wdWJsaXNoZWRTaGVldHNJbmZvLm1hcCgocHVibGlzaGVkU2hlZXRJbmZvKSA9PiBwdWJsaXNoZWRTaGVldEluZm8ubmFtZSk7XG4gICAqIGF3YWl0IHZpei5leHBvcnRQREZBc3luYyhwdWJsaXNoZWRTaGVldE5hbWVzKTtcbiAgICogYGBgXG4gICAqL1xuICBleHBvcnRQREZBc3luYyhzaGVldE5hbWVzPzogQXJyYXk8c3RyaW5nPiwgb3B0aW9ucz86IEV4cG9ydFBERk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG9uZSBvZiB0aGUgZXhwb3J0IGRpYWxvZ3MgYmFzZWQgb24gdGhlIGRpYWxvZ1R5cGUgcGFyYW1ldGVyXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiBkaWFsb2dUeXBlIGlzIGludmFsaWRcbiAgICovXG4gIGRpc3BsYXlEaWFsb2dBc3luYyhkaWFsb2dUeXBlOiBUYWJsZWF1RGlhbG9nVHlwZSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpc3VhbGl6YXRpb24ncyBjdXJyZW50IFVSTC5cbiAgICovXG4gIGdldEN1cnJlbnRTcmNBc3luYygpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFJlZG9lcyB0aGUgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIG9uIGEgc2hlZXQuXG4gICAqL1xuICByZWRvQXN5bmMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVW5kb2VzIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgb24gYSBzaGVldC5cbiAgICovXG4gIHVuZG9Bc3luYygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gICAqXG4gICAqIGBgYFxuICAgKiBhc3luYyBmdW5jdGlvbiBnZXRTZWxlY3RlZE1hcmtzKGV2ZW50KSB7XG4gICAqICAgICBjb25zdCBtYXJrc1NlbGVjdGVkID0gYXdhaXQgZXZlbnQuZGV0YWlsLmdldE1hcmtzQXN5bmMoKTtcbiAgICogICAgIGNvbnN0IG51bU1hcmtzID0gbWFya3NTZWxlY3RlZC5kYXRhWzBdLmRhdGEubGVuZ3RoO1xuICAgKiAgICAgY29uc29sZS5sb2coYCR7bnVtTWFya3N9IG1hcmtzIFNlbGVjdGVkYCk7XG4gICAqIH1cbiAgICpcbiAgICogbGV0IHZpeiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZWF1Vml6Jyk7XG4gICAqIHZpei5hZGRFdmVudExpc3RlbmVyKFwibWFya3NlbGVjdGlvbmNoYW5nZWRcIiwgZ2V0U2VsZWN0ZWRNYXJrcyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBUYWJsZWF1RXZlbnRUeXBlLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICAgKlxuICAgKiBgYGBcbiAgICogbGV0IHZpeiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZWF1Vml6Jyk7XG4gICAqIHZpei5yZW1vdmVFdmVudExpc3RlbmVyKFwibWFya3NlbGVjdGlvbmNoYW5nZWRcIiwgZ2V0U2VsZWN0ZWRNYXJrcyk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBUYWJsZWF1RXZlbnRUeXBlLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBmaWx0ZXIgdGhlIHZpeiBiZWZvcmUgaW5pdGlhbGl6YXRpb24uIElmIHVzZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGl0IHdpbGwgcmUtcmVuZGVyIHRoZSB2aXouXG4gICAqIEZvciBmaWx0ZXJpbmcgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIHVzZSB0aGUgb3RoZXIgZmlsdGVyaW5nIG1ldGhvZHMsIHN1Y2ggYXMgYGFwcGx5RmlsdGVyQXN5bmNgLlxuICAgKlxuICAgKiBJZiB5b3UgYWRkIHRoZSBzYW1lIGZpbHRlciBmaWVsZHMgdXNpbmcgdGhlIGBhZGRGaWx0ZXIoKWAgbWV0aG9kIGFuZCBieSB1c2luZyB0aGUgYDx2aXotZmlsdGVyPmAgZWxlbWVudCBpbiB0aGUgYDx0YWJsZWF1LXZpej5gIHdlYiBjb21wb25lbnQsXG4gICAqIHlvdSBtaWdodCBleHBlcmllbmNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGZpbHRlciBvbi5cbiAgICogQHBhcmFtIHZhbHVlIFNpbmdsZSB2YWx1ZSBvciBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyB0byBmaWx0ZXIgb24uXG4gICAqXG4gICAqIGBgYFxuICAgKiB2aXouYWRkRmlsdGVyKCdSZWdpb24nLCAnQ2VudHJhbCxXZXN0Jyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRmlsdGVyKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXpTaXplIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHNoZWV0U2l6ZSByZWNvcmQgZm9yIHRoZSBjdXJyZW50IHNoZWV0XG4gICAqL1xuICByZWFkb25seSBzaGVldFNpemU6IFNoZWV0U2l6ZTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBUYWJsZWF1IFVJIGVsZW1lbnRzICh0aGUgY2hyb21lKSBzdXJyb3VuZGluZyB0aGUgdmlldy5cbiAgICovXG4gIHJlYWRvbmx5IGNocm9tZUhlaWdodDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBhIHZpeiB0aGF0IGFyZSBjb21tb24gYmV0d2VlblxuICogdmlld2luZyBhbmQgYXV0aG9yaW5nIG1vZGUuXG4gKi9cbmludGVyZmFjZSBWaXpTZXR0aW5nc1NoYXJlZCBleHRlbmRzIFdlYkNvbXBvbmVudFNldHRpbmdzU2hhcmVkIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHRvdWNoIG9wdGltaXplIHZpeiBjb250cm9scy5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiB0b3VjaC1vcHRpbWl6ZSAvPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIHRvdWNoLW9wdGltaXplIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgdG91Y2hPcHRpbWl6ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBFZGl0IGluIERlc2t0b3AgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byBmYWxzZSwgbWVhbmluZyB0aGF0IHRoZSBFZGl0IGluIERlc2t0b3AgYnV0dG9uIGlzIHZpc2libGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgaGlkZS1lZGl0LWluLWRlc2t0b3AtYnV0dG9uPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIGhpZGUtZWRpdC1pbi1kZXNrdG9wLWJ1dHRvbj5cbiAgICogYGBgXG4gICAqL1xuICBoaWRlRWRpdEluRGVza3RvcEJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkZWZhdWx0IGVkaXQgYmVoYXZpb3IgaXMgc3VwcHJlc3NlZC5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gZmFsc2UsIG1lYW5pbmcgdGhhdCB0aGUgZGVmYXVsdCBlZGl0IGJlaGF2aW9yIGlzIG5vdCBzdXBwcmVzc2VkLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIHN1cHByZXNzLWRlZmF1bHQtZWRpdC1iZWhhdmlvcj5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBzdXBwcmVzcy1kZWZhdWx0LWVkaXQtYmVoYXZpb3I+XG4gICAqIGBgYFxuICAgKi9cbiAgc3VwcHJlc3NEZWZhdWx0RWRpdEJlaGF2aW9yPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBFZGl0IEluIERlc2t0b3AgQnV0dG9uLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBUYWJsZWF1Vml6IG9iamVjdHMuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25FZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZD1cIm9uRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWRIYW5kbGVyXCIgLz5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkVkaXRJbkRlc2t0b3BCdXR0b25DbGlja2VkPVwib25FZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSBzaXplIG9mIHRoZSB2aXogaXMga25vd24uIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdG8gcGVyZm9ybSB0YXNrcyBzdWNoIGFzIHJlc2l6aW5nXG4gICAqIHRoZSBlbGVtZW50cyBzdXJyb3VuZGluZyB0aGUgVml6IG9iamVjdCBvbmNlIHRoZSBvYmplY3QncyBzaXplIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIFwib25GaXJzdFZpelNpemVLbm93blwiPVwib25GaXJzdFZpelNpemVLbm93bkhhbmRsZXJcIiAvPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIG9uRmlyc3RWaXpTaXplS25vd249XCJvbkZpcnN0Vml6U2l6ZUtub3duSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25GaXJzdFZpelNpemVLbm93bj86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gdGhlIFZpeiBvYmplY3QgZmlyc3QgYmVjb21lcyBpbnRlcmFjdGl2ZS4gVGhpcyBpcyBvbmx5IHJhaXNlZCBvbmNlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIFwib25GaXJzdEludGVyYWN0aXZlXCI9XCJvbkZpcnN0SW50ZXJhY3RpdmVIYW5kbGVyXCIgLz5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkZpcnN0SW50ZXJhY3RpdmU9XCJvbkZpcnN0SW50ZXJhY3RpdmVIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbkZpcnN0SW50ZXJhY3RpdmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgdml6IGluIHZpZXcgbW9kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXpTZXR0aW5ncyBleHRlbmRzIFZpelNldHRpbmdzU2hhcmVkIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHN1cHByZXNzIHRoZSBleGVjdXRpb24gb2YgVVJMIGFjdGlvbnMuIFRoaXMgb3B0aW9uIGRvZXMgbm90IHByZXZlbnQgdGhlIFVSTCBhY3Rpb25cbiAgICogZXZlbnQgZnJvbSBiZWluZyByYWlzZWQuIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB3aGF0IGhhcHBlbnMgd2hlbiBhIFVSTCBhY3Rpb24gb2NjdXJzLiBJZiBzZXRcbiAgICogdG8gdHJ1ZSBhbmQgeW91IGNyZWF0ZSBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIFVSTF9BQ1RJT04gZXZlbnQsIHlvdSBjYW4gdXNlIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAqIGhhbmRsZXIgdG8gY3VzdG9taXplIHRoZSBhY3Rpb25zLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIGRpc2FibGUtdXJsLWFjdGlvbnMgLz5cbiAgICogYGBgXG4gICAqL1xuICBkaXNhYmxlVXJsQWN0aW9uc1BvcHVwcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYnMgYXJlIGhpZGRlbiBvciBzaG93bi5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiAgaGlkZS10YWJzIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgaGlkZVRhYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sYmFyLCBpZiBpdCBpcyBzaG93bi4gVGhlIHZhbHVlcyBjYW4gYmUgVG9vbGJhci5Ub3AsXG4gICAqIFRvb2xiYXIuQm90dG9tIG9yIFRvb2xiYXIuSGlkZGVuLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byBUb29sYmFyLkJvdHRvbS5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiAgdG9vbGJhcj1cImhpZGRlblwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgdG9vbGJhcj86IFRvb2xiYXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGRldmljZSBsYXlvdXQgZm9yIGEgZGFzaGJvYXJkLCBpZiBpdCBleGlzdHMuXG4gICAqIFZhbHVlcyBjYW4gYmUgZGVmYXVsdCwgZGVza3RvcCwgdGFibGV0LCBvciBwaG9uZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gbG9hZGluZyBhIGxheW91dCBiYXNlZCBvbiB0aGVcbiAgICogc21hbGxlc3QgZGltZW5zaW9uIG9mIHRoZSBob3N0aW5nIGlmcmFtZSBlbGVtZW50LlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiICBkZXZpY2U9XCJkZXNrdG9wXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBkZXZpY2U/OiBEZXZpY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIElEIG9mIGFuIGV4aXN0aW5nIGluc3RhbmNlIHRvIG1ha2UgYSBjb3B5IChjbG9uZSkgb2YuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNvbnRpbnVlIGFuYWx5c2lzIG9mIGFuIGV4aXN0aW5nIHZpc3VhbGl6YXRpb25cbiAgICogd2l0aG91dCBsb3NpbmcgdGhlIHN0YXRlIG9mIHRoZSBvcmlnaW5hbC4gSWYgdGhlIElEIGRvZXMgbm90IHJlZmVyIHRvIGFuIGV4aXN0aW5nIHZpc3VhbGl6YXRpb24sXG4gICAqIHRoZSBjbG9uZWQgdmVyc2lvbiBpcyBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIHZpc3VhbGl6YXRpb24uXG4gICAqXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgIGluc3RhbmNlLWlkLXRvLWNsb25lPVwiaWQxXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBpbnN0YW5jZUlkVG9DbG9uZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEVkaXQgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byBmYWxzZSwgbWVhbmluZyB0aGF0IHRoZSBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIGhpZGUtZWRpdC1idXR0b24+XG4gICAqIGBgYFxuICAgKi9cbiAgaGlkZUVkaXRCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEVkaXQgQnV0dG9uLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uRWRpdEJ1dHRvbkNsaWNrZWQ9XCJvbkVkaXRCdXR0b25DbGlja2VkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25FZGl0QnV0dG9uQ2xpY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYW55IGZpbHRlciBoYXMgY2hhbmdlZCBzdGF0ZS4gWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggVGFibGVhdVZpeiBvYmplY3RzLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uRmlsdGVyQ2hhbmdlZD1cIm9uRmlsdGVyQ2hhbmdlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uRmlsdGVyQ2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gbWFyayBjb250ZXh0IG1lbnUgaXMgY2xpY2tlZC5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkN1c3RvbU1hcmtDb250ZXh0TWVudUV2ZW50PVwib25DdXN0b21NYXJrQ29udGV4dE1lbnVFdmVudEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uQ3VzdG9tTWFya0NvbnRleHRNZW51RXZlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSBzZWxlY3RlZCBtYXJrcyBvbiBhIHZpc3VhbGl6YXRpb24gaGF2ZSBjaGFuZ2VkLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBUYWJsZWF1Vml6IG9iamVjdHMuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25NYXJrU2VsZWN0aW9uQ2hhbmdlZD1cIm9uTWFya1NlbGVjdGlvbkNoYW5nZWRIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbk1hcmtTZWxlY3Rpb25DaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiBhIHBhcmFtZXRlciBoYXMgaGFkIGl0cyB2YWx1ZSBtb2RpZmllZC4gWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggW1tQYXJhbWV0ZXJdXSBvYmplY3RzLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uUGFyYW1ldGVyQ2hhbmdlZD1cIm9uUGFyYW1ldGVyQ2hhbmdlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uUGFyYW1ldGVyQ2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSB0b29sYmFyIGJ1dHRvbiBvciBjb250cm9sIGJlY29tZXMgYXZhaWxhYmxlIG9yIGJlY29tZXMgdW5hdmFpbGFibGUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25Ub29sYmFyU3RhdGVDaGFuZ2VkPVwib25Ub29sYmFyU3RhdGVDaGFuZ2VkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25Ub29sYmFyU3RhdGVDaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiBhIFVSTCBhY3Rpb24gb2NjdXJzLiBTZWUgdGhlIHtAbGluayBVcmxBY3Rpb25FdmVudH0gY2xhc3MuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25VcmxBY3Rpb249XCJvblVybEFjdGlvbkhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uVXJsQWN0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgYWZ0ZXIgYSB0YWIgc3dpdGNoIG9jY3VycyAodGhlIGFjdGl2ZSBzaGVldCBoYXMgY2hhbmdlZCkuIEd1YXJhbnRlZXMgdGhlIHZpeiBvYmplY3Qgd2lsbCBiZSBpbnRlcmFjdGl2ZSBhZnRlciB0aGlzLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uVGFiU3dpdGNoZWQ9XCJvblRhYlN3aXRjaGVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25UYWJTd2l0Y2hlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgZmluaXNoZWQgbG9hZGluZy4gVGhpcyBldmVudCBpcyByYWlzZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrXG4gICAqIGZ1bmN0aW9uIGZvciB7QGxpbmsgRmlyc3RJbnRlcmFjdGl2ZX0gKGlmIGFueSkgaGFzIGJlZW4gY2FsbGVkLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uQ3VzdG9tVmlld0xvYWRlZD1cIm9uQ3VzdG9tVmlld0xvYWRlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uQ3VzdG9tVmlld0xvYWRlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgYmVlbiByZW1vdmVkLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uQ3VzdG9tVmlld1JlbW92ZWQ9XCJvbkN1c3RvbVZpZXdSZW1vdmVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25DdXN0b21WaWV3UmVtb3ZlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgYmVlbiBzYXZlZCAobmV3bHkgY3JlYXRlZCBvciB1cGRhdGVkKS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkN1c3RvbVZpZXdTYXZlZD1cIm9uQ3VzdG9tVmlld1NhdmVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25DdXN0b21WaWV3U2F2ZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIGEgY3VzdG9tIHZpZXcgaGFzIGJlZW4gc2V0IGFzIHRoZSBkZWZhdWx0IHZpZXcgZm9yIGEgd29ya2Jvb2suXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25DdXN0b21WaWV3U2V0RGVmYXVsdD1cIm9uQ3VzdG9tVmlld1NldERlZmF1bHRIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbkN1c3RvbVZpZXdTZXREZWZhdWx0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgYWZ0ZXIgYSBuZXcgc3RvcnkgcG9pbnQgYmVjb21lcyBhY3RpdmUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25TdG9yeVBvaW50U3dpdGNoZWQ9XCJvblN0b3J5UG9pbnRTd2l0Y2hlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uU3RvcnlQb2ludFN3aXRjaGVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiB0aGUgc3VtbWFyeSBkYXRhIG9uIGEgdmlzdWFsaXphdGlvbiBoYXZlIGNoYW5nZWQuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFRhYmxlYXVWaXogb2JqZWN0cy5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvblN1bW1hcnlEYXRhQ2hhbmdlZD1cIm9uU3VtbWFyeURhdGFDaGFuZ2VkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25TdW1tYXJ5RGF0YUNoYW5nZWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogKEJldGEpIFJlcHJlc2VudHMgdGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgdml6IGluIGF1dGhvcmluZyBtb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpekF1dGhvcmluZ1NldHRpbmdzIGV4dGVuZHMgVml6U2V0dGluZ3NTaGFyZWQge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIENsb3NlIGJ1dHRvbiBpcyBoaWRkZW4gb3IgdmlzaWJsZS5cbiAgICogSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gZmFsc2UsIG1lYW5pbmcgdGhhdCB0aGUgQ2xvc2UgYnV0dG9uIGlzIHZpc2libGUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIGhpZGUtY2xvc2UtYnV0dG9uIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgaGlkZUNsb3NlQnV0dG9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gdGhlIHdvcmtib29rIGhhcyBiZWVuIHB1Ymxpc2hlZC4gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCB3aGVuIHVzaW5nIGVtYmVkZGVkIHdlYiBhdXRob3JpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LWF1dGhvcmluZy12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25Xb3JrYm9va1B1Ymxpc2hlZD1cIm9uV29ya2Jvb2tQdWJsaXNoZWRIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbldvcmtib29rUHVibGlzaGVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiBcInB1Ymxpc2ggYXNcIiBpcyBzdWNjZXNzZnVsLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBzZW50IHdoZW4gdXNpbmcgZW1iZWRkZWQgd2ViIGF1dGhvcmluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbldvcmtib29rUHVibGlzaGVkQXM9XCJvbldvcmtib29rUHVibGlzaGVkQXNIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbldvcmtib29rUHVibGlzaGVkQXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSB3b3JrYm9vayBpcyByZWFkeSB0byBjbG9zZS4gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCB3aGVuIHVzaW5nIGVtYmVkZGVkIHdlYiBhdXRob3JpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LWF1dGhvcmluZy12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25Xb3JrYm9va1JlYWR5VG9DbG9zZT1cIm9uV29ya2Jvb2tSZWFkeVRvQ2xvc2VIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbldvcmtib29rUmVhZHlUb0Nsb3NlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclBhcmFtZXRlcnMge1xuICBmaWVsZDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZpelBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gc2V0IFBhcmFtZXRlciB2YWx1ZXMgb24gdGhlIHZpei5cbiAqXG4gKiAqIGBgYFxuICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiPlxuICogIDx2aXotcGFyYW1ldGVyIG5hbWU9XCJwYXJhbWV0ZXItbmFtZVwiIHZhbHVlPVwicGFyYW1ldGVyLXZhbHVlXCI+PC92aXotcGFyYW1ldGVyPlxuICogPC90YWJsZWF1LXZpej5cbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXpQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyIHRvIGJlIHNldC5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgYmVpbmcgc2V0LlxuICAgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDdXN0b21QYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIHBhc3MgYWxvbmcgc2V0dGluZ3MsIGluZm9ybWF0aW9uLCBldGMuLCB0aGF0IGFyZW4ndCBleHBvc2VkIG9uIHRoZVxuICogdGFibGVhdS12aXogZWxlbWVudC4gQ3VzdG9tUGFyYW1ldGVycyB3aWxsIG92ZXJyaWRlIGF0dHJpYnV0ZXMsIG9yIGZpbHRlcnMsIHNldCBvbiB0aGUgdGFibGVhdS12aXogZWxlbWVudC5cbiAqXG4gKiAqIGBgYFxuICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiPlxuICogIDxjdXN0b20tcGFyYW1ldGVyIG5hbWU9XCJwYXJhbWV0ZXItbmFtZVwiIHZhbHVlPVwicGFyYW1ldGVyLXZhbHVlXCI+PC9jdXN0b20tcGFyYW1ldGVyPlxuICogPC90YWJsZWF1LXZpej5cbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21QYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyIHRvIGJlIHNldC5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgYmVpbmcgc2V0LlxuICAgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgZXhwb3J0aW5nIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RGF0YU9wdGlvbnMge1xuICAvKipcbiAgICogRG8gbm90IHVzZSBhbGlhc2VzIHNwZWNpZmllZCBpbiB0aGUgZGF0YSBzb3VyY2UgaW4gVGFibGVhdS4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIGlnbm9yZUFsaWFzZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGNvbHVtbnMgdG8gaW5jbHVkZSBzcGVjaWZpZWQgYnkgZmllbGQgaWQsIGluY2x1ZGVzIGFsbCBieSBkZWZhdWx0LlxuICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNvbHVtbiBpZHMgaW4gdGhlIGFycmF5IGRldGVybWluZXMgdGhlIGNvbHVtbiBvcmRlciBzaG93biBpbiB0aGUgc3VtbWFyeSBkYXRhIHRhYmxlLlxuICAgKi9cbiAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFBERk9wdGlvbnMge1xuICBzY2FsaW5nOiBQcmludFNjYWxpbmc7XG4gIHBhZ2VTaXplOiBQcmludFBhZ2VTaXplO1xuICBvcmllbnRhdGlvbjogUHJpbnRPcmllbnRhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRTY2VuYXJpb3NGb3JQREZBbmRQb3dlclBvaW50IHtcbiAgY3VycmVudFNoZWV0TmFtZTogc3RyaW5nO1xuICBleHBvcnRhYmxlU2hlZXROYW1lc0Zyb21EYXNoYm9hcmQ6IEFycmF5PHN0cmluZz47XG4gIGV4cG9ydGFibGVTaGVldE5hbWVzRnJvbVdvcmtib29rOiBBcnJheTxzdHJpbmc+O1xufVxuIiwiLyoqXG4gKiBVc2VyIHN1cHBsaWVkIG9wdGlvbnMgdGhhdCBkbyBub3QgZ2V0IHBhc3NlZCBhcyByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gbG9hZCBhIFRhYmxlYXUgdml6LCBUYWJsZWF1IGFza2RhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSB2aXogc3JjXG4gICAqL1xuICBzcmM/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHdpZHRoIGluIHBpeGVsc1xuICAgKiBDYW4gYmUgYW55IHZhbGlkIENTUyBzaXplIHNwZWNpZmllci4gSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gdGhlIHB1Ymxpc2hlZCB3aWR0aCBvZiB0aGUgdmlldy5cbiAgICovXG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGhlaWdodCBpbiBwaXhlbHNcbiAgICogQ2FuIGJlIGFueSB2YWxpZCBDU1Mgc2l6ZSBzcGVjaWZpZXIuIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIHRoZSBwdWJsaXNoZWQgaGVpZ2h0IG9mIHRoZSB2aWV3LlxuICAgKi9cbiAgaGVpZ2h0Pzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBhIHdlYmNvbXBvbmVudCB0aGF0IGFyZSBjb21tb24gYmV0d2VlblxuICogdml6IGFuZCBhc2tkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkNvbXBvbmVudFNldHRpbmdzU2hhcmVkIHtcbiAgLyoqXG4gICAqIFRoZSB0b2tlbiB1c2VkIGZvciBhdXRob3JpemF0aW9uXG4gICAqXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgdG9rZW49XCJzb21lLXRva2VuLWNvbnRhaW5pbmctY2xpZW50SWRcIiAvPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIHRva2VuPVwic29tZS10b2tlbi1jb250YWluaW5nLWNsaWVudElkXCIgLz5cbiAgICogPHRhYmxlYXUtYXNrLWRhdGEgaWQ9XCJ0YWJsZWF1QXNrRGF0YVwiIHRva2VuPVwic29tZS10b2tlbi1jb250YWluaW5nLWNsaWVudElkXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICB0b2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG5vbi1taW5pZmllZCB2ZXJzaW9uIG9mIEphdmFTY3JpcHQgaXMgbG9hZGVkLiBJZiBzcGVjaWZpZWQgKG9yIHNldCB0byB0cnVlKSwgdGhlXG4gICAqIG5vbi1taW5pZmllZCB2ZXJzaW9uIGlzIHVzZWQgZm9yIGJvdGggdGhlIGxvY2FsIGNvbXBvbmVudCBhbmQgdGhlIFRhYmxlYXUgU2VydmVyIHZpc3VhbGl6YXRpb24gKGlmIGVuYWJsZWQpLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkIChvciBzZXQgdG8gZmFsc2UpLCB0aGUgbWluaWZpZWQgdmVyc2lvbiBvZiB0aGUgSmF2YVNjcmlwdCBmaWxlcyBhcmUgbG9hZGVkLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIGRlYnVnIC8+XG4gICAqIDx0YWJsZWF1LWF1dGhvcmluZy12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgZGVidWcgLz5cbiAgICogPHRhYmxlYXUtYXNrLWRhdGEgaWQ9XCJ0YWJsZWF1QXNrRGF0YVwiIGRlYnVnIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZGVidWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgdGhlIG9sZCBhdXRoIG1lY2hhbmlzbSBmb3IgYXV0aGVudGljYXRpb24gd2hpY2ggaGFwcGVucyBpbnNpZGUgdGhlIGlmcmFtZS4gSWYgc3BlY2lmaWVkLCBWaXpMb2FkRXJyb3JFdmVudHNcbiAgICogdHJpZ2dlcmVkIGR1ZSB0byBhdXRoIGZhaWx1cmVzIHdpbGwgbm90IGJlIHRocm93bi5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiBpZnJhbWUtYXV0aCAvPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIGlmcmFtZS1hdXRoIC8+XG4gICAqIDx0YWJsZWF1LWFzay1kYXRhIGlkPVwidGFibGVhdUFza0RhdGFcIiBpZnJhbWUtYXV0aCAvPlxuICAgKiBgYGBcbiAgICovXG4gIGlmcmFtZUF1dGg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgY29tbW9uIHN0cmluZyBjb25zdGFudHMgeW91IGNhbiB1c2UgYXMgSFRNTCBhdHRyaWJ1dGVzIGZvciB0aGUgdGFibGVhdSB3ZWIgY29tcG9uZW50LlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZW51bSBXZWJDb21wb25lbnRBdHRyaWJ1dGVzIHtcbiAgU3JjID0gJ3NyYycsXG4gIFdpZHRoID0gJ3dpZHRoJyxcbiAgSGVpZ2h0ID0gJ2hlaWdodCcsXG4gIFRva2VuID0gJ3Rva2VuJyxcbiAgRGVidWcgPSAnZGVidWcnLFxuICBJZnJhbWVBdXRoID0gJ2lmcmFtZS1hdXRoJyxcbiAgT25WaXpMb2FkRXJyb3IgPSAnb252aXpsb2FkZXJyb3InLFxuICBGb3JjZVRva2VuU3luYyA9ICdmb3JjZS10b2tlbi1zeW5jJyxcbn1cblxuLyoqXG4gKiBUaGUgbmFtZXMgb2YgdGhlIHN0cmluZyBjb25zdGFudHMgeW91IGNhbiB1c2UgYXMgY2hpbGQgdGFncyBmb3IgVGFibGVhdVZpeiwgVGFibGVhdUF1dGhvcmluZ1ZpeiBhbmQgVGFibGVhdUFza0RhdGEgY3VzdG9tIGVsZW1lbnRzLlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZW51bSBXZWJDb21wb25lbnRDaGlsZEVsZW1lbnRzIHtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGEgbGlzdCBvZiBjdXN0b20gcGFyYW1ldGVycy4gIEF2YWlsYWJsZSBpbiB2aXogdmlld2luZywgdml6IGF1dGhvcmluZyBhbmQgYXNrZGF0YS5cbiAgICovXG4gIEN1c3RvbVBhcmFtZXRlciA9ICdjdXN0b20tcGFyYW1ldGVyJyxcbn1cblxuZXhwb3J0IGVudW0gV2ViQ29tcG9uZW50Q2hpbGRFbGVtZW50QXR0cmlidXRlcyB7XG4gIEZpZWxkID0gJ2ZpZWxkJyxcbiAgVmFsdWUgPSAndmFsdWUnLFxuICBOYW1lID0gJ25hbWUnLFxufVxuIiwiLy8gQWxsIGVudW0gdmFsdWVzIG1hZGUgYXZhaWxhYmxlIHRvIEV4dGVuc2lvbnMgZGV2ZWxvcGVycy5cbi8vIEVudW1zIHNob3VsZCBiZSBrZXB0IGluIGFscGhhYmV0aWNhbCBvcmRlci5cblxuaW1wb3J0IHsgRXh0ZW5zaW9ucyB9IGZyb20gJy4vRXh0ZW5zaW9ucyc7XG5cbm5hbWVzcGFjZSBUYWJsZWF1IHtcbiAgZXhwb3J0IGxldCBleHRlbnNpb25zOiBFeHRlbnNpb25zO1xuICAvKipcbiAgICogQWxsIGVycm9yIGNvZGVzIHVzZWQgYnkgdGhlIEV4dGVuc2lvbnMgQVBJLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRXJyb3JDb2RlcyB7XG4gICAgLyoqXG4gICAgICogVGhyb3duIHdoZW4gY2FsbGVyIGF0dGVtcHRzIHRvIGV4ZWN1dGUgY29tbWFuZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBBUElOb3RJbml0aWFsaXplZCA9ICdhcGktbm90LWluaXRpYWxpemVkJyxcbiAgICAvKipcbiAgICAgKiBUaHJvd24gd2hlbiBjYWxsZXIgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBjb21tYW5kIHdoaWxlIGV4dGVuc2lvbiBpcyBub3QgdmlzaWJsZS5cbiAgICAgKi9cbiAgICBWaXNpYmlsaXR5RXJyb3IgPSAndmlzaWJpbGl0eS1lcnJvcicsXG4gICAgLyoqXG4gICAgICogT25seSBvbmUgZGlhbG9nIGNhbiBiZSBvcGVuZWQgYXQgdGltZSB3aXRoIHRoZSBVSSBuYW1lc3BhY2UgZnVuY3Rpb25hbGl0eS5cbiAgICAgKi9cbiAgICBEaWFsb2dBbHJlYWR5T3BlbiA9ICdkaWFsb2ctYWxyZWFkeS1vcGVuJyxcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlbiBkaWFsb2cgd2FzIGNsb3NlZCBieSB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBEaWFsb2dDbG9zZWRCeVVzZXIgPSAnZGlhbG9nLWNsb3NlZC1ieS11c2VyJyxcbiAgICAvKipcbiAgICAgKiBBbiBlcnJvciBvY2N1cnJlZCB3aXRoaW4gdGhlIFRhYmxlYXUgRXh0ZW5zaW9ucyBBUEkuIENvbnRhY3QgVGFibGVhdSBTdXBwb3J0LlxuICAgICAqL1xuICAgIEludGVybmFsRXJyb3IgPSAnaW50ZXJuYWwtZXJyb3InLFxuICAgIC8qKlxuICAgICAqIEEgZGlhbG9nIG11c3Qgc3RhcnQgb24gdGhlIHNhbWUgZG9tYWluIGFzIHRoZSBwYXJlbnQgZXh0ZW5pb24uXG4gICAgICovXG4gICAgSW52YWxpZERvbWFpbkRpYWxvZyA9ICdpbnZhbGlkLWRpYWxvZy1kb21haW4nLFxuICAgIC8qKlxuICAgICAqIEEgcGFyYW1ldGVyIGlzIG5vdCB0aGUgY29ycmVjdCBkYXRhIHR5cGUgb3IgZm9ybWF0LiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiB0aGUgRXJyb3IubWVzc2FnZSBmaWVsZC5cbiAgICAgKi9cbiAgICBJbnZhbGlkUGFyYW1ldGVyID0gJ2ludmFsaWQtcGFyYW1ldGVyJyxcbiAgICAvKipcbiAgICAgKiBDYW4gb2NjdXIgaWYgdGhlIGV4dGVuc2lvbiBpbnRlcmFjdHMgd2l0aCBhIGZpbHRlciB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya3NoZWV0LlxuICAgICAqL1xuICAgIE1pc3NpbmdGaWx0ZXIgPSAnbWlzc2luZy1maWx0ZXInLFxuICAgIC8qKlxuICAgICAqIENhbiBvY2N1ciBpZiB0aGUgZXh0ZW5zaW9uIGludGVyYWN0cyB3aXRoIGEgcGFyYW1ldGVyIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3Jrc2hlZXQuXG4gICAgICovXG4gICAgTWlzc2luZ1BhcmFtZXRlciA9ICdtaXNzaW5nLXBhcmFtZXRlcicsXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICovXG4gICAgU2VydmVyRXJyb3IgPSAnc2VydmVyLWVycm9yJyxcbiAgICAvKipcbiAgICAgKiBEZXZlbG9wZXIgY2Fubm90IHNhdmUgc2V0dGluZ3Mgd2hpbGUgYW5vdGhlciBzYXZlIGlzIHN0aWxsIGluIHByb2dyZXNzLlxuICAgICAqL1xuICAgIFNldHRpbmdTYXZlSW5Qcm9ncmVzcyA9ICdzZXR0aW5nLXNhdmUtaW4tcHJvZ3Jlc3MnLFxuICAgIC8qKlxuICAgICAqIEFuIHVua25vd24gZXZlbnQgbmFtZSB3YXMgc3BlY2lmaWVkIGluIHRoZSBjYWxsIHRvIGBhZGRFdmVudExpc3RlbmVyYCBvciBgcmVtb3ZlRXZlbnRMaXN0ZW5lcmAuXG4gICAgICovXG4gICAgVW5zdXBwb3J0ZWRFdmVudE5hbWUgPSAndW5zdXBwb3J0ZWQtZXZlbnQtbmFtZScsXG4gICAgLyoqXG4gICAgICogQSBtZXRob2Qgd2FzIHVzZWQgZm9yIGEgdHlwZSBvZiBkYXRhIHNvdXJjZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IG1ldGhvZCAoc2VlIGdldEFjdGl2ZVRhYmxlc0FzeW5jIGZvciBhbiBleGFtcGxlKVxuICAgICAqL1xuICAgIFVuc3VwcG9ydGVkTWV0aG9kRm9yRGF0YVNvdXJjZVR5cGUgPSAndW5zdXBwb3J0ZWQtbWV0aG9kLWZvci1kYXRhLXNvdXJjZS10eXBlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgRXh0ZW5zaW9ucyBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEV4dGVuc2lvbkNvbnRleHQge1xuICAgIERlc2t0b3AgPSAnZGVza3RvcCcsXG4gICAgU2VydmVyID0gJ3NlcnZlcicsXG4gIH1cblxuICAvKipcbiAgICogVGhlIG1vZGUgaW4gd2hpY2ggdGhlIEV4dGVuc2lvbnMgaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAqL1xuICBleHBvcnQgZW51bSBFeHRlbnNpb25Nb2RlIHtcbiAgICBBdXRob3JpbmcgPSAnYXV0aG9yaW5nJyxcbiAgICBWaWV3aW5nID0gJ3ZpZXdpbmcnLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZXZlbnQgdGhhdCBjYW4gYmUgbGlzdGVuZWQgZm9yLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gVGFibGVhdUV2ZW50VHlwZSB7XG4gICAgLyoqIFJhaXNlZCB3aGVuIGFueSBmaWx0ZXIgaGFzIGNoYW5nZWQgc3RhdGUuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFtXb3Jrc2hlZXRdKC4uL2ludGVyZmFjZXMvd29ya3NoZWV0Lmh0bWwpIG9iamVjdHMuKi9cbiAgICBGaWx0ZXJDaGFuZ2VkID0gJ2ZpbHRlci1jaGFuZ2VkJyxcblxuICAgIC8qKiBUaGUgc2VsZWN0ZWQgbWFya3Mgb24gYSB2aXN1YWxpemF0aW9uIGhhcyBjaGFuZ2VkLlxuICAgICAqIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFtXb3Jrc2hlZXRdKC4uL2ludGVyZmFjZXMvd29ya3NoZWV0Lmh0bWwpIG9iamVjdHMuICovXG4gICAgTWFya1NlbGVjdGlvbkNoYW5nZWQgPSAnbWFyay1zZWxlY3Rpb24tY2hhbmdlZCcsXG5cbiAgICAvKiogVGhlIHN1bW1hcnkgZGF0YSBiYWNraW5nIGEgd29ya3NoZWV0IGhhcyBjaGFuZ2VkXG4gICAgICogWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggW1dvcmtzaGVldF0oLi4vaW50ZXJmYWNlcy93b3Jrc2hlZXQuaHRtbCkgb2JqZWN0cy4qL1xuICAgIFN1bW1hcnlEYXRhQ2hhbmdlZCA9ICdzdW1tYXJ5LWRhdGEtY2hhbmdlZCcsXG5cbiAgICAvKiogQSBwYXJhbWV0ZXIgaGFzIGhhZCBpdHMgdmFsdWUgbW9kaWZpZWQuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFtbUGFyYW1ldGVyXV0gb2JqZWN0cy4gKi9cbiAgICBQYXJhbWV0ZXJDaGFuZ2VkID0gJ3BhcmFtZXRlci1jaGFuZ2VkJyxcblxuICAgIC8qKiBTZXR0aW5ncyBoYXZlIGJlZW4gY2hhbmdlZCBmb3IgdGhpcyBleHRlbnNpb24uIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFtbU2V0dGluZ3NdXSBvYmplY3RzLiAqL1xuICAgIFNldHRpbmdzQ2hhbmdlZCA9ICdzZXR0aW5ncy1jaGFuZ2VkJyxcblxuICAgIC8qKiBUaGUgZGFzaGJvYXJkIGxheW91dCBoYXMgY2hhbmdlZFxuICAgICAqIEBjYXRlZ29yeSBEYXNoYm9hcmQgRXh0ZW5zaW9uc1xuICAgICAqL1xuICAgIERhc2hib2FyZExheW91dENoYW5nZWQgPSAnZGFzaGJvYXJkLWxheW91dC1jaGFuZ2VkJyxcblxuICAgIC8qKiBUaGUgd29ya2Jvb2sgZm9ybWF0dGluZyBoYXMgY2hhbmdlZFxuICAgICAqIEBjYXRlZ29yeSBEYXNoYm9hcmQgRXh0ZW5zaW9uc1xuICAgICAqL1xuICAgIFdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWQgPSAnd29ya2Jvb2stZm9ybWF0dGluZy1jaGFuZ2VkJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgZGF0YSB0eXBlIG9mIGVuY29kaW5ncyBmb3IgY3JlYXRlVml6SW1hZ2VBc3luYy5cbiAgICogQHNpbmNlIDEuNi4wXG4gICAqL1xuICBleHBvcnQgZW51bSBWaXpJbWFnZUVuY29kaW5nVHlwZSB7XG4gICAgRGlzY3JldGUgPSAnZGlzY3JldGUnLFxuICAgIENvbnRpbnVvdXMgPSAnY29udGludW91cycsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIHNvcnQgZGlyZWN0aW9uIGZvciBjcmVhdGVWaXpJbWFnZUFzeW5jLlxuICAgKiBAc2luY2UgMS44LjAgYW5kIFRhYmxlYXUgMjAyMS40XG4gICAqL1xuICBleHBvcnQgZW51bSBWaXpJbWFnZVNvcnREaXJlY3Rpb25UeXBlIHtcbiAgICBBc2NlbmRpbmcgPSAnYXNjZW5kaW5nJyxcbiAgICBEZXNjZW5kaW5nID0gJ2Rlc2NlbmRpbmcnLFxuICB9XG5cbiAgLyoqXG4gICAqIEVudW0gdGhhdCByZXByZXNlbnRzIHRoZSBwYWxldHRlIHR5cGUgZm9yIGNyZWF0ZVZpekltYWdlQXN5bmMuXG4gICAqIEBzaW5jZSAxLjguMCBhbmQgVGFibGVhdSAyMDIxLjRcbiAgICovXG4gIGV4cG9ydCBlbnVtIFZpekltYWdlUGFsZXR0ZVR5cGUge1xuICAgIEN1c3RvbURpdmVyZ2luZyA9ICdjdXN0b20tZGl2ZXJnaW5nJyxcbiAgICBDdXN0b21TZXF1ZW50aWFsID0gJ2N1c3RvbS1zZXF1ZW50aWFsJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgU2l6ZSBTZXR0aW5nIHR5cGUgZm9yIGNyZWF0ZVZpekltYWdlQXN5bmMuXG4gICAqIEBzaW5jZSAxLjguMCBhbmQgVGFibGVhdSAyMDIxLjRcbiAgICovXG4gIGV4cG9ydCBlbnVtIFZpekltYWdlU2l6ZVNldHRpbmdUeXBlIHtcbiAgICBGaXhlZCA9ICdmaXhlZCcsXG4gICAgTWFudWFsID0gJ21hbnVhbCcsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIFNpemUgU2V0dGluZyBhbGlnbm1lbnQgdHlwZSBmb3IgY3JlYXRlVml6SW1hZ2VBc3luYy5cbiAgICogQHNpbmNlIDEuOC4wIGFuZCBUYWJsZWF1IDIwMjEuNFxuICAgKi9cbiAgZXhwb3J0IGVudW0gVml6SW1hZ2VTaXplU2V0dGluZ0FsaWdubWVudFR5cGUge1xuICAgIFJpZ2h0ID0gJ3JpZ2h0JyxcbiAgICBMZWZ0ID0gJ2xlZnQnLFxuICAgIENlbnRlciA9ICdjZW50ZXInLFxuICB9XG59XG5leHBvcnQgPSBUYWJsZWF1O1xuIiwiZXhwb3J0IGVudW0gU2hhcmVkRXJyb3JDb2RlcyB7XG4gIC8qKlxuICAgKiBBIENTViBvciBFeGNlbCBmaWxlIGZhaWxlZCB0byBiZSBjcmVhdGVkIGluIFZpei5leHBvcnRDcm9zc3RhYkFzeW5jKCkuXG4gICAqL1xuICBDcm9zc3RhYkNyZWF0aW9uRXJyb3IgPSAnY3Jvc3N0YWItY3JlYXRpb24tZXJyb3InLFxuICAvKipcbiAgICogQSBDU1YgZmlsZSBmYWlsZWQgdG8gYmUgY3JlYXRlZCBpbiBWaXouZXhwb3J0RGF0YUFzeW5jKCkuXG4gICAqL1xuICBEYXRhQ3JlYXRpb25FcnJvciA9ICdkYXRhLWNyZWF0aW9uLWVycm9yJyxcbiAgLyoqXG4gICAqIEFuIGludmFsaWQgYWdncmVnYXRpb24gd2FzIHNwZWNpZmllZCBmb3IgdGhlIGZpbHRlciwgc3VjaCBhcyBzZXR0aW5nIGEgcmFuZ2UgZmlsdGVyIHRvIFwiU1VNKFNhbGVzKVwiIGluc3RlYWQgb2ZcbiAgICogXCJTYWxlc1wiLlxuICAgKi9cbiAgSW52YWxpZEFnZ3JlZ2F0aW9uRmllbGROYW1lID0gJ2ludmFsaWQtYWdncmVnYXRpb24tZmllbGQtbmFtZScsXG4gIC8qKlxuICAgKiBBIGZpbHRlciBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIGZpZWxkIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgSW52YWxpZEZpbHRlckZpZWxkTmFtZSA9ICdpbnZhbGlkLWZpbHRlci1uYW1lJyxcbiAgLyoqXG4gICAqIEEgZmlsdGVyIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyB0aGUgd3JvbmcgZGF0YSB0eXBlIG9yIGZvcm1hdC5cbiAgICovXG4gIEludmFsaWRGaWx0ZXJGaWVsZFZhbHVlID0gJ2ludmFsaWQtZmlsdGVyLWZpZWxkVmFsdWUnLFxuICAvKipcbiAgICogQW4gaW52YWxpZCBkYXRlIHZhbHVlIHdhcyBzcGVjaWZpZWQgaW4gYSBTaGVldC5zZWxlY3RNYXJrc0FzeW5jKCkgY2FsbCBmb3IgYSBkYXRlIGZpZWxkLlxuICAgKi9cbiAgSW52YWxpZFNlbGVjdGlvbkRhdGUgPSAnaW52YWxpZC1zZWxlY3Rpb24tZGF0ZScsXG4gIC8qKlxuICAgKiBBIGZpZWxkIHdhcyBzcGVjaWZpZWQgaW4gYSBTaGVldC5zZWxlY3RNYXJrc0FzeW5jKCkgY2FsbCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhIHNvdXJjZS5cbiAgICovXG4gIEludmFsaWRTZWxlY3Rpb25GaWVsZE5hbWUgPSAnaW52YWxpZC1zZWxlY3Rpb24tZmllbGROYW1lJyxcbiAgLyoqXG4gICAqIEFuIGludmFsaWQgdmFsdWUgd2FzIHNwZWNpZmllZCBpbiBhIFNoZWV0LnNlbGVjdE1hcmtzQXN5bmMoKSBjYWxsLlxuICAgKi9cbiAgSW52YWxpZFNlbGVjdGlvblZhbHVlID0gJ2ludmFsaWQtc2VsZWN0aW9uLXZhbHVlJyxcbiAgLyoqXG4gICAqIEEgcGFyYW1ldGVyIGRpZCBub3QgaW5jbHVkZSBhIHZhbGlkIHNoZWV0IHNlbGVjdGlvbiBmb3IgZXhwb3J0aW5nLlxuICAgKi9cbiAgSW52YWxpZFNlbGVjdGlvblNoZWV0ID0gJ2ludmFsaWQtc2VsZWN0aW9uLXNoZWV0JyxcbiAgLyoqXG4gICAqIEFuIGVycm9yIG9jY3VycmVkIHdpdGhpbiB0aGUgVGFibGVhdSBBUEkuIENvbnRhY3QgVGFibGVhdSBTdXBwb3J0LlxuICAgKi9cbiAgSW50ZXJuYWxFcnJvciA9ICdpbnRlcm5hbC1lcnJvcicsXG4gIC8qKlxuICAgKiBBIHBhcmFtZXRlciBpcyBub3QgdGhlIGNvcnJlY3QgZGF0YSB0eXBlIG9yIGZvcm1hdC4gVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgaW4gdGhlIEVycm9yLm1lc3NhZ2UgZmllbGQuXG4gICAqL1xuICBJbnZhbGlkUGFyYW1ldGVyID0gJ2ludmFsaWQtcGFyYW1ldGVyJyxcbiAgLyoqXG4gICAqIEEgUERGIGZpbGUgZmFpbGVkIHRvIGJlIGNyZWF0ZWQgaW4gVml6LmV4cG9ydFBERkFzeW5jKCkuXG4gICAqL1xuICBQREZDcmVhdGlvbkVycm9yID0gJ3BkZi1jcmVhdGlvbi1lcnJvcicsXG4gIC8qKlxuICAgKiBBIFBvd2VyUG9pbnQgZmlsZSBmYWlsZWQgdG8gYmUgY3JlYXRlZCBpbiBWaXouZXhwb3J0UG93ZXJQb2ludEFzeW5jKCkuXG4gICAqL1xuICBQb3dlclBvaW50Q3JlYXRpb25FcnJvciA9ICdwb3dlcnBvaW50LWNyZWF0aW9uLWVycm9yJyxcbiAgLyoqXG4gICAqIEFuIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgc2hlZXQgdGhhdCBpcyBub3QgYWN0aXZlIG9yIGVtYmVkZGVkIHdpdGhpbiB0aGUgYWN0aXZlIGRhc2hib2FyZC5cbiAgICovXG4gIE5vdEFjdGl2ZVNoZWV0ID0gJ25vdC1hY3RpdmUtc2hlZXQnLFxuICAvKipcbiAgICogUHJvcGVydHkgb3IgRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRoaW4gdGhlIFRhYmxlYXUgQVBJLlxuICAgKi9cbiAgSW1wbGVtZW50YXRpb25FcnJvciA9ICd3cm9uZy1pbXBsZW1lbnRhdGlvbicsXG4gIC8qKlxuICAgKiBDYW4gb2NjdXIgd2hlbiB0d28gaW5jb21wYXRpYmxlIGNhbGxzIGFyZSB0cmlnZ2VyZWQgdG9nZXRoZXIuXG4gICAqL1xuICBBcGlFeGVjdXRpb25FcnJvciA9ICdhcGktZXhlY3V0aW9uLWVycm9yJyxcbiAgLyoqXG4gICAqIEEgZ2VuZXJhbC1wdXJwb3NlIHNlcnZlciBlcnJvciBvY2N1cnJlZC4gRGV0YWlscyBhcmUgY29udGFpbmVkIGluIHRoZSBFcnJvciBvYmplY3QuXG4gICAqL1xuICBTZXJ2ZXJFcnJvciA9ICdzZXJ2ZXItZXJyb3InLFxuICAvKipcbiAgICogQ2FuIG9jY3VyIHdoZW4gYW4gYXBpIGNhbGwgdGltZXMgb3V0LlxuICAgKi9cbiAgVGltZW91dCA9ICd0aW1lb3V0Jyxcbn1cbiIsIi8qKlxuICogVGhlIHRhYmxlYXUgbmFtZXNwYWNlIGV4aXN0cyBmb3Igb3JnYW5pemF0aW9uIGFuZCB0byBhdm9pZCBwb2xsdXRpbmdcbiAqIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBJdCBjb250YWlucyBubyBjb25zdHJ1Y3RzIG90aGVyIHRoYW4gc3ViLW5hbWVzcGFjZXMgYW5kIHRoZSBUYWJsZWF1IGVudW1lcmF0aW9ucy5cbiAqL1xubmFtZXNwYWNlIFRhYmxlYXUge1xuICBleHBvcnQgZW51bSBBbmFseXRpY3NPYmplY3RUeXBlIHtcbiAgICBDbHVzdGVyID0gJ2NsdXN0ZXInLFxuICAgIEZvcmVjYXN0ID0gJ2ZvcmVjYXN0JyxcbiAgICBUcmVuZExpbmUgPSAndHJlbmQtbGluZScsXG4gIH1cblxuICBleHBvcnQgZW51bSBBbm5vdGF0aW9uVHlwZSB7XG4gICAgTWFyayA9ICdtYXJrJyxcbiAgICBQb2ludCA9ICdwb2ludCcsXG4gICAgQXJlYSA9ICdhcmVhJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvbHVtblR5cGUge1xuICAgIERpc2NyZXRlID0gJ2Rpc2NyZXRlJyxcbiAgICBDb250aW51b3VzID0gJ2NvbnRpbnVvdXMnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2xhc3NOYW1lS2V5IHtcbiAgICBXb3Jrc2hlZXRUaXRsZSA9ICd0YWJsZWF1LXdvcmtzaGVldC10aXRsZScsXG4gICAgV29ya3NoZWV0ID0gJ3RhYmxlYXUtd29ya3NoZWV0JyxcbiAgICBUb29sdGlwID0gJ3RhYmxlYXUtdG9vbHRpcCcsXG4gICAgU3RvcnlUaXRsZSA9ICd0YWJsZWF1LXN0b3J5LXRpdGxlJyxcbiAgICBEYXNoYm9hcmRUaXRsZSA9ICd0YWJsZWF1LWRhc2hib2FyZC10aXRsZScsXG4gIH1cblxuICAvKipcbiAgICogV2hhdCB0aGUgb2JqZWN0IHJlcHJlc2VudHMgaW4gYSBkYXNoYm9hcmQuXG4gICAqL1xuICBleHBvcnQgZW51bSBEYXNoYm9hcmRPYmplY3RUeXBlIHtcbiAgICBCbGFuayA9ICdibGFuaycsXG4gICAgV29ya3NoZWV0ID0gJ3dvcmtzaGVldCcsXG4gICAgUXVpY2tGaWx0ZXIgPSAncXVpY2stZmlsdGVyJyxcbiAgICBQYXJhbWV0ZXJDb250cm9sID0gJ3BhcmFtZXRlci1jb250cm9sJyxcbiAgICBQYWdlRmlsdGVyID0gJ3BhZ2UtZmlsdGVyJyxcbiAgICBMZWdlbmQgPSAnbGVnZW5kJyxcbiAgICBUaXRsZSA9ICd0aXRsZScsXG4gICAgVGV4dCA9ICd0ZXh0JyxcbiAgICBJbWFnZSA9ICdpbWFnZScsXG4gICAgV2ViUGFnZSA9ICd3ZWItcGFnZScsXG4gICAgRXh0ZW5zaW9uID0gJ2V4dGVuc2lvbicsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgYSBkYXNoYm9hcmQgb2JqZWN0LlxuICAgKiBAc2luY2UgMS43LjBcbiAgICovXG4gIGV4cG9ydCBlbnVtIERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlUeXBlIHtcbiAgICAvKiogVXNlZCBmb3IgdHVybmluZyBvbiB0aGUgdmlzaWJpbGl0eSBvZiBhIGRhc2hib2FyZCBvYmplY3QuKi9cbiAgICBTaG93ID0gJ3Nob3cnLFxuXG4gICAgLyoqIFVzZWQgZm9yIHR1cm5pbmcgb2ZmIHRoZSB2aXNpYmlsaXR5IG9mIGEgZGFzaGJvYXJkIG9iamVjdC4qL1xuICAgIEhpZGUgPSAnaGlkZScsXG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhIGEgdmFsdWUgY2FuIGhhdmVcbiAgICovXG4gIGV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBTdHJpbmcgPSAnc3RyaW5nJyxcbiAgICBJbnQgPSAnaW50JyxcbiAgICBGbG9hdCA9ICdmbG9hdCcsXG4gICAgQm9vbCA9ICdib29sJyxcbiAgICBEYXRlID0gJ2RhdGUnLFxuICAgIERhdGVUaW1lID0gJ2RhdGUtdGltZScsXG4gICAgU3BhdGlhbCA9ICdzcGF0aWFsJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nLFxuICB9XG5cbiAgLyoqXG4gICAqIEVudW0gdGhhdCByZXByZXNlbnRzIHRoZSBjaGFuZ2VzIHRoYXQgb2NjdXIgdG8gYSBkYXNoYm9hcmQgb2JqZWN0LlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRGFzaGJvYXJkTGF5b3V0Q2hhbmdlIHtcbiAgICAvKiogQSBkYXNoYm9hcmQgb2JqZWN0IHdhcyBhZGRlZCAqL1xuICAgIEFkZGVkID0gJ2FkZGVkJyxcblxuICAgIC8qKiBBIGRhc2hib2FyZCBvYmplY3Qgd2FzIHJlbW92ZWQgKi9cbiAgICBSZW1vdmVkID0gJ3JlbW92ZWQnLFxuXG4gICAgLyoqIEEgZGFzaGJvYXJkIG9iamVjdCdzIGZsb2F0aW5nIHN0YXRlIGNoYW5nZWQgKi9cbiAgICBJc0Zsb2F0aW5nQ2hhbmdlZCA9ICdpcy1mbG9hdGluZy1jaGFuZ2VkJyxcblxuICAgIC8qKiBBIGRhc2hib2FyZCBvYmplY3QncyB2aXNpYmlsaXR5IGNoYW5nZWQgKi9cbiAgICBJc1Zpc2libGVDaGFuZ2VkID0gJ2lzLXZpc2libGUtY2hhbmdlZCcsXG5cbiAgICAvKiogQSBkYXNoYm9hcmQgb2JqZWN0J3MgcG9zaXRpb24gY2hhbmdlZCAqL1xuICAgIFBvc2l0aW9uQ2hhbmdlZCA9ICdwb3NpdGlvbi1jaGFuZ2VkJyxcblxuICAgIC8qKiBBIGRhc2hib2FyZCBvYmplY3QncyBzaXplIGNoYW5nZWQgKi9cbiAgICBTaXplQ2hhbmdlZCA9ICdzaXplLWNoYW5nZWQnLFxuXG4gICAgLyoqIEEgZGFzaGJvYXJkIG9iamVjdCB3YXMgcmVuYW1lZCAqL1xuICAgIE5hbWVDaGFuZ2VkID0gJ25hbWUtY2hhbmdlZCcsXG5cbiAgICAvKiogQSBkYXNoYm9hcmQgb2JqZWN0IGlzIHNlbGVjdGVkICovXG4gICAgU2VsZWN0ZWQgPSAnc2VsZWN0ZWQnLFxuXG4gICAgLyoqIEEgZGFzaGJvYXJkIG9iamVjdCBpcyBkZXNlbGVjdGVkICovXG4gICAgRGVzZWxlY3RlZCA9ICdkZXNlbGVjdGVkJyxcblxuICAgIC8qKiBOYXZpZ2F0ZSB0byBhbm90aGVyIGRhc2hib2FyZCAqL1xuICAgIERhc2hib2FyZENoYW5nZWQgPSAnZGFzaGJvYXJkLWNoYW5nZWQnLFxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkIGRhdGUgcmFuZ2VzIGZvciBhIHJlbGF0aXZlIGRhdGUgZmlsdGVyLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRGF0ZVJhbmdlVHlwZSB7XG4gICAgTGFzdCA9ICdsYXN0JyxcbiAgICBMYXN0TiA9ICdsYXN0LW4nLFxuICAgIE5leHQgPSAnbmV4dCcsXG4gICAgTmV4dE4gPSAnbmV4dC1uJyxcbiAgICBDdXJyZW50ID0gJ2N1cnJlbnQnLFxuICAgIFRvRGF0ZSA9ICd0by1kYXRlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgdHlwZXMgb2YgZGlhbG9nIHBvcHVwIHN0eWxlcy5cbiAgICovXG4gIGV4cG9ydCBlbnVtIERpYWxvZ1N0eWxlIHtcbiAgICBXaW5kb3cgPSAnd2luZG93JyxcbiAgICBNb2RhbCA9ICdtb2RhbCcsXG4gICAgTW9kZWxlc3MgPSAnbW9kZWxlc3MnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRW5jb2RpbmdUeXBlIHtcbiAgICBDb2x1bW4gPSAnY29sdW1uJyxcbiAgICBSb3cgPSAncm93JyxcbiAgICBQYWdlID0gJ3BhZ2UnLFxuICAgIEZpbHRlciA9ICdmaWx0ZXInLFxuICAgIE1hcmtzVHlwZSA9ICdtYXJrcy10eXBlJyxcbiAgICBNZWFzdXJlVmFsdWVzID0gJ21lYXN1cmUtdmFsdWVzJyxcbiAgICBDb2xvciA9ICdjb2xvcicsXG4gICAgU2l6ZSA9ICdzaXplJyxcbiAgICBMYWJlbCA9ICdsYWJlbCcsXG4gICAgRGV0YWlsID0gJ2RldGFpbCcsXG4gICAgVG9vbHRpcCA9ICd0b29sdGlwJyxcbiAgICBTaGFwZSA9ICdzaGFwZScsXG4gICAgUGF0aCA9ICdwYXRoJyxcbiAgICBBbmdsZSA9ICdhbmdsZScsXG4gICAgR2VvbWV0cnkgPSAnZ2VvbWV0cnknLFxuICAgIEN1c3RvbSA9ICdjdXN0b20nLFxuICB9XG5cbiAgLyoqXG4gICAqICBUeXBlIG9mIGFnZ3JlZ2F0aW9uIG9uIGEgZmllbGQuXG4gICAqL1xuICBleHBvcnQgZW51bSBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgU3VtID0gJ3N1bScsXG4gICAgQXZnID0gJ2F2ZycsXG4gICAgTWluID0gJ21pbicsXG4gICAgTWF4ID0gJ21heCcsXG4gICAgU3RkZXYgPSAnc3RkZXYnLFxuICAgIFN0ZGV2cCA9ICdzdGRldnAnLFxuICAgIFZhciA9ICd2YXInLFxuICAgIFZhcnAgPSAndmFycCcsXG4gICAgQ29sbGVjdCA9ICdjb2xsZWN0JyxcbiAgICBDb3VudCA9ICdjb3VudCcsXG4gICAgQ291bnRkID0gJ2NvdW50ZCcsXG4gICAgTWVkaWFuID0gJ21lZGlhbicsXG4gICAgQXR0ciA9ICdhdHRyJyxcbiAgICBOb25lID0gJ25vbmUnLFxuICAgIFllYXIgPSAneWVhcicsXG4gICAgUXRyID0gJ3F0cicsXG4gICAgTW9udGggPSAnbW9udGgnLFxuICAgIERheSA9ICdkYXknLFxuICAgIEhvdXIgPSAnaG91cicsXG4gICAgTWludXRlID0gJ21pbnV0ZScsXG4gICAgU2Vjb25kID0gJ3NlY29uZCcsXG4gICAgV2VlayA9ICd3ZWVrJyxcbiAgICBXZWVrZGF5ID0gJ3dlZWtkYXknLFxuICAgIE1vbnRoWWVhciA9ICdtb250aC15ZWFyJyxcbiAgICBNZHkgPSAnbWR5JyxcbiAgICBFbmQgPSAnZW5kJyxcbiAgICBUcnVuY1llYXIgPSAndHJ1bmMteWVhcicsXG4gICAgVHJ1bmNRdHIgPSAndHJ1bmMtcXRyJyxcbiAgICBUcnVuY01vbnRoID0gJ3RydW5jLW1vbnRoJyxcbiAgICBUcnVuY1dlZWsgPSAndHJ1bmMtd2VlaycsXG4gICAgVHJ1bmNEYXkgPSAndHJ1bmMtZGF5JyxcbiAgICBUcnVuY0hvdXIgPSAndHJ1bmMtaG91cicsXG4gICAgVHJ1bmNNaW51dGUgPSAndHJ1bmMtbWludXRlJyxcbiAgICBUcnVuY1NlY29uZCA9ICd0cnVuYy1zZWNvbmQnLFxuICAgIFF1YXJ0MSA9ICdxdWFydDEnLFxuICAgIFF1YXJ0MyA9ICdxdWFydDMnLFxuICAgIFNrZXduZXNzID0gJ3NrZXduZXNzJyxcbiAgICBLdXJ0b3NpcyA9ICdrdXJ0b3NpcycsXG4gICAgSW5PdXQgPSAnaW4tb3V0JyxcbiAgICBVc2VyID0gJ3VzZXInLFxuICB9XG5cbiAgLyoqXG4gICAqIFJvbGUgb2YgYSBmaWVsZC5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEZpZWxkUm9sZVR5cGUge1xuICAgIERpbWVuc2lvbiA9ICdkaW1lbnNpb24nLFxuICAgIE1lYXN1cmUgPSAnbWVhc3VyZScsXG4gICAgVW5rbm93biA9ICd1bmtub3duJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUgdmFsaWQgdHlwZXMgb2YgZmlsdGVycyB0aGF0IGNhbiBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRmlsdGVyVHlwZSB7XG4gICAgQ2F0ZWdvcmljYWwgPSAnY2F0ZWdvcmljYWwnLFxuICAgIFJhbmdlID0gJ3JhbmdlJyxcbiAgICBIaWVyYXJjaGljYWwgPSAnaGllcmFyY2hpY2FsJyxcbiAgICBSZWxhdGl2ZURhdGUgPSAncmVsYXRpdmUtZGF0ZScsXG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpZmZlcmVudCB1cGRhdGUgdHlwZXMgZm9yIGFwcGx5aW5nIGZpbHRlclxuICAgKi9cbiAgZXhwb3J0IGVudW0gRmlsdGVyVXBkYXRlVHlwZSB7XG4gICAgQWRkID0gJ2FkZCcsXG4gICAgQWxsID0gJ2FsbCcsXG4gICAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIHR5cGUgZm9yIGEgZmlsdGVyXG4gICAqL1xuICBleHBvcnQgZW51bSBGaWx0ZXJEb21haW5UeXBlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZG9tYWluIHZhbHVlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgc3BlY2lmaWVkIGZpbHRlclxuICAgICAqIGkuZS4gdGhlIGRvbWFpbiBpcyByZXN0cmljdGVkIGJ5IGEgcHJldmlvdXMgZmlsdGVyXG4gICAgICovXG4gICAgUmVsZXZhbnQgPSAncmVsZXZhbnQnLFxuICAgIC8qKlxuICAgICAqIGxpc3Qgb2YgYWxsIHBvc3NpYmxlIGRvbWFpbiB2YWx1ZXMgZnJvbSBkYXRhYmFzZVxuICAgICAqL1xuICAgIERhdGFiYXNlID0gJ2RhdGFiYXNlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGZvciBzcGVjaWZ5aW5nIHdoaWNoIHZhbHVlcyB0byBpbmNsdWRlIGZvciBmaWx0ZXJpbmdcbiAgICogSW5kaWNhdGVzIHdoYXQgdG8gZG8gd2l0aCBudWxsIHZhbHVlcyBmb3IgYSBnaXZlbiBmaWx0ZXIgb3IgbWFyayBzZWxlY3Rpb24gY2FsbC5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEZpbHRlck51bGxPcHRpb24ge1xuICAgIE51bGxWYWx1ZXMgPSAnbnVsbC12YWx1ZXMnLFxuICAgIE5vbk51bGxWYWx1ZXMgPSAnbm9uLW51bGwtdmFsdWVzJyxcbiAgICBBbGxWYWx1ZXMgPSAnYWxsLXZhbHVlcycsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHNlcnZlcyBhcyBhIGZpbHRlciBvbiB0aGUgRGF0YVZhbHVlcyByZXR1cm5lZCBmcm9tIGBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jYCxcbiAgICogYGdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luY2AgYW5kIGBnZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmNgLlxuICAgKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvZiByZXR1cm5lZCBkYXRhIHZhbHVlcyBvbmx5LiBUYWJsZWF1IHZlcnNpb25zIHByaW9yIHRvIDIwMjEuMlxuICAgKiB3aWxsIHBhc3MgdGhlIGRhdGEgYWNyb3NzIGFuZCBwb3B1bGF0ZSB0aGUgRGF0YVZhbHVlIHByb3BlcnRpZXMuXG4gICAqIFBsZWFzZSBub3RlIHRoYXQgYWxsIHByb3BlcnRpZXMgbm90IHJlcXVlc3RlZCB3aWxsIGJlIGB1bmRlZmluZWRgIGluIHRoZSBEYXRhVmFsdWUgcmVzdWx0cy5cbiAgICogQHNpbmNlIDEuNS4wXG4gICAqL1xuICBleHBvcnQgZW51bSBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB7XG4gICAgLyoqIERhdGFWYWx1ZXMgd2lsbCBpbmNsdWRlIGFsbCBwcm9wZXJ0aWVzLiovXG4gICAgQWxsVmFsdWVzID0gJ2FsbC12YWx1ZXMnLFxuXG4gICAgLyoqIERhdGFWYWx1ZXMgd2lsbCBvbmx5IGluY2x1ZGUgdmFsdWUgYW5kIG5hdGl2ZVZhbHVlIHByb3BlcnRpZXMuKi9cbiAgICBPbmx5TmF0aXZlVmFsdWVzID0gJ29ubHktbmF0aXZlLXZhbHVlcycsXG5cbiAgICAvKiogRGF0YVZhbHVlcyB3aWxsIG9ubHkgaW5jbHVkZSBmb3JtYXR0ZWRWYWx1ZSBwcm9wZXJ0aWVzLiAqL1xuICAgIE9ubHlGb3JtYXR0ZWRWYWx1ZXMgPSAnb25seS1mb3JtYXR0ZWQtdmFsdWVzJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlIG9mIG1hcmsgZm9yIGEgZ2l2ZW4gbWFya3MgY2FyZCBpbiBhIHZpei5cbiAgICovXG4gIGV4cG9ydCBlbnVtIE1hcmtUeXBlIHtcbiAgICBCYXIgPSAnYmFyJyxcbiAgICBMaW5lID0gJ2xpbmUnLFxuICAgIEFyZWEgPSAnYXJlYScsXG4gICAgU3F1YXJlID0gJ3NxdWFyZScsXG4gICAgQ2lyY2xlID0gJ2NpcmNsZScsXG4gICAgU2hhcGUgPSAnc2hhcGUnLFxuICAgIFRleHQgPSAndGV4dCcsXG4gICAgTWFwID0gJ21hcCcsXG4gICAgUGllID0gJ3BpZScsXG4gICAgR2FudHRCYXIgPSAnZ2FudHQtYmFyJyxcbiAgICBQb2x5Z29uID0gJ3BvbHlnb24nLFxuICAgIEhlYXRtYXAgPSAnaGVhdG1hcCcsXG4gICAgVml6RXh0ZW5zaW9uID0gJ3Zpei1leHRlbnNpb24nLFxuICB9XG5cbiAgLyoqXG4gICAqIEFuIGVudW1lcmF0aW9uIGRlc2NyaWJpbmcgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBhbGxvd2FibGUgdmFsdWVzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlc3RyaWN0aW5nIHRoZSBkb21haW4gb2YgYSBwYXJhbWV0ZXJcbiAgICovXG4gIGV4cG9ydCBlbnVtIFBhcmFtZXRlclZhbHVlVHlwZSB7XG4gICAgQWxsID0gJ2FsbCcsXG4gICAgTGlzdCA9ICdsaXN0JyxcbiAgICBSYW5nZSA9ICdyYW5nZScsXG4gIH1cblxuICAvKipcbiAgICogRGF0ZSBwZXJpb2QgdXNlZCBpbiBmaWx0ZXJzIGFuZCBpbiBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gUGVyaW9kVHlwZSB7XG4gICAgWWVhcnMgPSAneWVhcnMnLFxuICAgIFF1YXJ0ZXJzID0gJ3F1YXJ0ZXJzJyxcbiAgICBNb250aHMgPSAnbW9udGhzJyxcbiAgICBXZWVrcyA9ICd3ZWVrcycsXG4gICAgRGF5cyA9ICdkYXlzJyxcbiAgICBIb3VycyA9ICdob3VycycsXG4gICAgTWludXRlcyA9ICdtaW51dGVzJyxcbiAgICBTZWNvbmRzID0gJ3NlY29uZHMnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gUXVpY2tUYWJsZUNhbGNUeXBlIHtcbiAgICBSdW5uaW5nVG90YWwgPSAncnVubmluZy10b3RhbCcsXG4gICAgRGlmZmVyZW5jZSA9ICdkaWZmZXJlbmNlJyxcbiAgICBQZXJjZW50RGlmZmVyZW5jZSA9ICdwZXJjZW50LWRpZmZlcmVuY2UnLFxuICAgIFBlcmNlbnRPZlRvdGFsID0gJ3BlcmNlbnQtb2YtdG90YWwnLFxuICAgIFJhbmsgPSAncmFuaycsXG4gICAgUGVyY2VudGlsZSA9ICdwZXJjZW50aWxlJyxcbiAgICBNb3ZpbmdBdmVyYWdlID0gJ21vdmluZy1hdmVyYWdlJyxcbiAgICBZVERUb3RhbCA9ICd5dGQtdG90YWwnLFxuICAgIENvbXBvdW5kR3Jvd3RoUmF0ZSA9ICdjb21wb3VuZC1ncm93dGgtcmF0ZScsXG4gICAgWWVhck92ZXJZZWFyR3Jvd3RoID0gJ3llYXItb3Zlci15ZWFyLWdyb3d0aCcsXG4gICAgWVRER3Jvd3RoID0gJ3l0ZC1ncm93dGgnLFxuICAgIFVuZGVmaW5lZCA9ICd1bmRlZmluZWQnLFxuICB9XG5cbiAgLyoqXG4gICAqIEVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIHNlbGVjdGlvbiB0eXBlIGZvciBzZWxlY3QgbWFya3MgYXBpLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gU2VsZWN0aW9uVXBkYXRlVHlwZSB7XG4gICAgUmVwbGFjZSA9ICdzZWxlY3QtcmVwbGFjZScsXG4gICAgQWRkID0gJ3NlbGVjdC1hZGQnLFxuICAgIFJlbW92ZSA9ICdzZWxlY3QtcmVtb3ZlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIGZvciBzcGVjaWZ5aW5nIHRoZSBzZWxlY3Qgb3B0aW9uIGZvciB0aGUge0BsaW5rIFdvcmtzaGVldC5zZWxlY3RUdXBsZXNBc3luY30gbWV0aG9kLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gU2VsZWN0T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGV4aXN0aW5nIHNlbGVjdGlvbiBiZWZvcmUgc2VsZWN0aW5nIHRoZSB0dXBsZXMgc3BlY2lmaWVkXG4gICAgICovXG4gICAgU2ltcGxlID0gJ3NlbGVjdC1vcHRpb25zLXNpbXBsZScsXG4gICAgLyoqXG4gICAgICogQWRkcyBzcGVjaWZpZWQgdHVwbGVzIHRvIHRoZSBleGlzdGluZyBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBUb2dnbGUgPSAnc2VsZWN0LW9wdGlvbnMtdG9nZ2xlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzaGVldCBhIFtbU2hlZXRdXSBvYmplY3QgcmVwcmVzZW50c1xuICAgKi9cbiAgZXhwb3J0IGVudW0gU2hlZXRUeXBlIHtcbiAgICBEYXNoYm9hcmQgPSAnZGFzaGJvYXJkJyxcbiAgICBTdG9yeSA9ICdzdG9yeScsXG4gICAgV29ya3NoZWV0ID0gJ3dvcmtzaGVldCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTb3J0RGlyZWN0aW9uIHtcbiAgICBJbmNyZWFzaW5nID0gJ2luY3JlYXNpbmcnLFxuICAgIERlY3JlYXNpbmcgPSAnZGVjcmVhc2luZycsXG4gIH1cblxuICBleHBvcnQgZW51bSBUcmVuZExpbmVNb2RlbFR5cGUge1xuICAgIExpbmVhciA9ICdsaW5lYXInLFxuICAgIExvZ2FyaXRobWljID0gJ2xvZ2FyaXRobWljJyxcbiAgICBFeHBvbmVudGlhbCA9ICdleHBvbmVudGlhbCcsXG4gICAgUG9seW5vbWlhbCA9ICdwb2x5bm9taWFsJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVwbGF5IHNwZWVkIG9mIGFuIGFuaW1hdGlvbi5cbiAgICogQHNpbmNlIDEuNy4wXG4gICAqL1xuICBleHBvcnQgZW51bSBSZXBsYXlTcGVlZFR5cGUge1xuICAgIC8qKiBVc2VkIGZvciBzZXR0aW5nIHRoZSByZXBsYXkgc3BlZWQgb2YgYW4gYW5pbWF0aW9uIHRvIDAuNXguKi9cbiAgICBTbG93ID0gJ3Nsb3cnLFxuXG4gICAgLyoqIFVzZWQgZm9yIHNldHRpbmcgdGhlIHJlcGxheSBzcGVlZCBvZiBhbiBhbmltYXRpb24gdG8gMS4weC4qL1xuICAgIE5vcm1hbCA9ICdub3JtYWwnLFxuXG4gICAgLyoqIFVzZWQgZm9yIHNldHRpbmcgdGhlIHJlcGxheSBzcGVlZCBvZiBhbiBhbmltYXRpb24gdG8gMi4weC4qL1xuICAgIEZhc3QgPSAnZmFzdCcsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIGxldmVsIGluIGEgaGllcmFyY2hpY2FsIGZpbHRlclxuICAgKiBAc2luY2UgRXh0ZW5zaW9ucyAxLjEwLjBcbiAgICovXG4gIGV4cG9ydCBlbnVtIEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUge1xuICAgIEFsbFNlbGVjdGVkID0gJ2FsbC1zZWxlY3RlZCcsXG4gICAgTm9uZVNlbGVjdGVkID0gJ25vbmUtc2VsZWN0ZWQnLFxuICAgIFNvbWVTZWxlY3RlZCA9ICdzb21lLXNlbGVjdGVkJyxcbiAgICBVbmtub3duU2VsZWN0ZWQgPSAndW5rbm93bi1zZWxlY3RlZCcsXG4gIH1cblxuICAvKipcbiAgICogWm9uZVZpc2liaWxpdHlUeXBlXG4gICAqIEBkZXByZWNhdGVkIHVzZSBEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZVxuICAgKi9cbiAgZXhwb3J0IGRlY2xhcmUgdHlwZSBab25lVmlzaWJpbGl0eVR5cGUgPSBEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZTtcbiAgZXhwb3J0IGNvbnN0IFpvbmVWaXNpYmlsaXR5VHlwZSA9IHsgLi4uRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eVR5cGUgfTtcbn1cbmV4cG9ydCA9IFRhYmxlYXU7XG4iLCIvLyBUaGlzIGZpbGUgcmUtZXhwb3J0cyBldmVyeXRoaW5nIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHNoYXJlZCBhcGkgcHVibGljIGludGVyZmFjZVxuXG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL0Fubm90YXRpb25JbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvRGF0YVNvdXJjZUludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9EYXRhVGFibGVJbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvRW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9FbnZpcm9ubWVudEludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9GaWx0ZXJJbnRlcmZhY2VzJztcbmV4cG9ydCB7XG4gIEFuYWx5dGljc09iamVjdFR5cGUsXG4gIEFubm90YXRpb25UeXBlLFxuICBDbGFzc05hbWVLZXksXG4gIENvbHVtblR5cGUsXG4gIERhc2hib2FyZExheW91dENoYW5nZSxcbiAgRGFzaGJvYXJkT2JqZWN0VHlwZSxcbiAgRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eVR5cGUsXG4gIERhdGFUeXBlLFxuICBEYXRlUmFuZ2VUeXBlLFxuICBEaWFsb2dTdHlsZSxcbiAgRW5jb2RpbmdUeXBlLFxuICBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSxcbiAgRmllbGRSb2xlVHlwZSxcbiAgRmlsdGVyRG9tYWluVHlwZSxcbiAgRmlsdGVyTnVsbE9wdGlvbixcbiAgRmlsdGVyVHlwZSxcbiAgRmlsdGVyVXBkYXRlVHlwZSxcbiAgSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZSxcbiAgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gIE1hcmtUeXBlLFxuICBQYXJhbWV0ZXJWYWx1ZVR5cGUsXG4gIFBlcmlvZFR5cGUsXG4gIFF1aWNrVGFibGVDYWxjVHlwZSxcbiAgUmVwbGF5U3BlZWRUeXBlLFxuICBTZWxlY3RPcHRpb25zLFxuICBTZWxlY3Rpb25VcGRhdGVUeXBlLFxuICBTaGVldFR5cGUsXG4gIFNvcnREaXJlY3Rpb24sXG4gIFRyZW5kTGluZU1vZGVsVHlwZSxcbiAgWm9uZVZpc2liaWxpdHlUeXBlLFxufSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL05hbWVzcGFjZXMvVGFibGVhdSc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL1NlbGVjdGlvbkludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9TaGVldEludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9WaXN1YWxNb2RlbEludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL1dvcmtib29rRm9ybWF0dGluZ0ludGVyZmFjZXMnO1xuIiwiLyoqXG4gKiBUaGlzIGlzIHlvdXIgbWFpbi4gVGhpcyBpcyB3aGVyZSB5b3UgcmUtZXhwb3J0IGV2ZXJ5dGhpbmcgeW91IHdhbnQgdG8gYmUgcHVibGljbHkgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBidWlsZCBlbmZvcmNlcyB0aGF0IHRoZSBmaWxlIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBnbG9iYWwgdmFyaWFibGUgdGhhdCBpcyBleHBvcnRlZC5cbiAqL1xuXG4vLyBUaGUgZm9sbG93aW5nIHBvbHlmaWxscyBhcmUgbmVlZGVkIGZvciBJRTExXG5pbXBvcnQgJ2NvcmUtanMvZXMvbnVtYmVyL2lzLWludGVnZXInO1xuaW1wb3J0ICdjb3JlLWpzL2VzL251bWJlci9pcy1uYW4nO1xuaW1wb3J0ICdjb3JlLWpzL2VzL29iamVjdC9hc3NpZ24nO1xuLy8gRXhwb3J0IHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCB0byBiZSBhdmFpbGFibGUgYXQgcnVudGltZVxuLy8gIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgeWFybiBwdWJsaXNoOmJ1bXAgdmlhIHNjcmlwdHMvcHVibGlzaC1jaGVjay50c1xuLy8gIHVwZGF0ZUludGVybmFsQ29udHJhY3RSdW50aW1lVmVyc2lvbiBpbiB0aGUgbW9ub3JlcG8gcm9vdC5cbmltcG9ydCAqIGFzIGludGVybmFsQ29udHJhY3RWZXJzaW9uIGZyb20gJy4uL2ludGVybmFsLWNvbnRyYWN0LXZlcnNpb24uanNvbic7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTiA9IGludGVybmFsQ29udHJhY3RWZXJzaW9uO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyYWN0L0RhdGFUeXBlQ29udmVydGVyJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhY3QvRW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFjdC9Nb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFjdC9Ob3RpZmljYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhY3QvUGFyYW1ldGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyYWN0L1ZlcmJzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlL0Fza0RhdGFJbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2UvSW5pdGlhbGl6YXRpb25PcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlL0ludGVybmFsQXBpRGlzcGF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZS9QdWxzZUludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZS9WZXJzaW9uTnVtYmVyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlL1ZxbEludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2luZy9Dcm9zc0ZyYW1lTWVzc2VuZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnaW5nL2ludGVyZmFjZS9NZXNzYWdlRGlzcGF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2luZy9pbnRlcmZhY2UvTWVzc2FnZUxpc3RlbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnaW5nL2ludGVyZmFjZS9NZXNzYWdlVHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdpbmcvaW50ZXJmYWNlL01lc3Nlbmdlcic7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2luZy9pbnRlcmZhY2UvUHJlcGFyZWRNZXNzYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vdmVyc2lvbmluZy9JbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZlcnNpb25pbmcvVmVyc2lvbkNvbnZlcnRlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJzaW9uaW5nL2V4dGVybmFsL0V4dGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdmVyc2lvbmluZy9leHRlcm5hbC9FeHRlcm5hbElkZW50aXR5VmVyc2lvbkNvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZlcnNpb25pbmcvZXh0ZXJuYWwvRXh0ZXJuYWxWZXJzaW9uQ29udmVydGVyRmFjdG9yeSc7XG5cbi8vIEV4cG9ydCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgbWVzc2FnaW5nIGZvciBjb25zdW1lcnMgdG8gdXNlLlxuLy8gQmUgdmVyeSBjYXJlZnVsIG1ha2luZyBhbnkgdXBkYXRlcyB0byB0aGlzIGNvbnRyYWN0IHdoaWNoIGJyZWFrIHZlcnNpb24gY29tcGF0aWJpbGl0eS5cbmV4cG9ydCBjb25zdCBNRVNTQUdJTkdfVkVSU0lPTiA9IHtcbiAgbWFqb3I6IDEsXG4gIG1pbm9yOiAwLFxuICBmaXg6IDAsXG59O1xuIiwiaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuL0VudW1zJztcblxuZXhwb3J0IGNsYXNzIERhdGFUeXBlQ29udmVydGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaXNTcGVjaWFsKHZhbHVlQXNTdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIFByaW9yIHRvIFNob3dEYXRhVGFibGVQcmVzTW9kZWwsIHNwZWNpYWwgdmFsdWVzIGNvbWUgdG8gdXMgYXNcbiAgICAvLyAnJW51bGwlJywgJyVhbGwlJywgJyV3aWxkY2FyZCUnLCAnJW1pc3NpbmclJy4uLlxuICAgIC8vIFdoaWxlIHRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciByZXR1cm4gdHJ1ZSBmb3IgU2hvd0RhdGFUYWJsZVByZXNNb2RlbCBjb252ZXJzaW9uLFxuICAgIC8vIGl0IGlzIGFzIGNoZWFwIGFzIHBhc3NpbmcgYXJvdW5kIGEgdmVyc2lvbiBhbmQgY2hlY2tpbmcgdGhhdC5cbiAgICAvLyAoU2VlIERhdGFWYWx1ZUZvcm1hdHRlci5jcHApXG5cbiAgICBpZiAodmFsdWVBc1N0cmluZy5sZW5ndGggPiAyICYmIHZhbHVlQXNTdHJpbmdbMF0gPT09ICclJyAmJiB2YWx1ZUFzU3RyaW5nW3ZhbHVlQXNTdHJpbmcubGVuZ3RoIC0gMV0gPT09ICclJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNwZWNpYWxWYWx1ZUluZGljYXRvciA9ICclbnVsbCUnO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCb29sZWFuKGJvb2xlYW5TdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4gfCBzdHJpbmcge1xuICAgIC8vIGJvb2xlYW4gdmFsdWVzIGNvbWUgdG8gdXMgYXMgJ3RydWUnfCdmYWxzZSdcbiAgICBjb25zdCBub3JtYWxpemVkQm9vbGVhbjogc3RyaW5nID0gYm9vbGVhblN0cmluZy50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBub3JtYWxpemVkQm9vbGVhbiAhPT0gJ3RydWUnICYmIG5vcm1hbGl6ZWRCb29sZWFuICE9PSAnZmFsc2UnID8gdGhpcy5zcGVjaWFsVmFsdWVJbmRpY2F0b3IgOiBub3JtYWxpemVkQm9vbGVhbiA9PT0gJ3RydWUnO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBwcml2YXRlIHN0YXRpYyBwYXJzZU51bWJlcih2YWx1ZUFzU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHZhbHVlQXNTdHJpbmcpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgPyB0aGlzLnNwZWNpYWxWYWx1ZUluZGljYXRvciA6IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VEYXRlKGRhdGVBc1N0cmluZzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIE5vdGUgdGhhdCB3aXRob3V0IGEgdGltZSwgdGhlIGRhdGUgaXMgYXNzdW1lZCB0byBiZSBVVENcbiAgICAvLyBJbnB1dCBvZiAyMDIwLTAzLTI1IGlzIHByaW50ZWQgYXM6IE1hciAyNCAyMDIwIDE3OjAwOjAwIEdNVC0wNzAwXG4gICAgLy8gVGhpcyBtYXRjaGVzIHN0eWxlIHVzZWQgaW4gZXhpc3RpbmcgY29udmVydEZpbHRlclZhbHVlUHJlc01vZGVsXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgRGF0ZShkYXRlQXNTdHJpbmcpO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSA/IG51bGwgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlRGF0ZVRpbWUoZGF0ZUFzU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gV2l0aCBhIHRpbWUsIHRoZSBkYXRlIGlzIGFzc3VtZWQgdG8gYmUgVVRDLlxuICAgIC8vIE91ciBkYXRlIGZvcm1hdCBpcyBhbHdheXM6IHl5eXktbW0tZGQgaGg6bW06c3NcbiAgICAvLyBVbmZvcnR1bmF0ZWx5LCBJRTExIGNhbid0IHBhcnNlIHRoYXQgZm9ybWF0IHNvIHdlIGFkZCBhIFQgYmV0d2VlbiB0aGUgZGF5IGFuZCB0aW1lLlxuICAgIC8vIFdlIGFsc28gYWRkIGEgWiBzbyB0aGF0IGl0IGlzIFVUQy4gKFdpdGhvdXQgdGhlIFosIHNvbWUgYnJvd3NlcnMgYXNzdW1lIGxvY2FsLCBhbmQgb3RoZXJzIFVUQylcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlU3RyaW5nOiBzdHJpbmcgPSBkYXRlQXNTdHJpbmcucmVwbGFjZSgnICcsICdUJykuY29uY2F0KCdaJyk7XG4gICAgY29uc3QgdmFsdWUgPSBuZXcgRGF0ZShmb3JtYXR0ZWREYXRlU3RyaW5nKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkgPyBudWxsIDogdmFsdWU7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFZhbHVlQXNTdHJpbmdUb1ZhbHVlKHZhbHVlQXNTdHJpbmc6IHN0cmluZywgdHlwZTogRGF0YVR5cGUpOiBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBUaGlzIGlzIGJvdGggRGF0YURpY3Rpb25hcnkgYW5kIFNob3dEYXRhVGFibGVQcmVzTW9kZWwgY29tcGF0aWJsZS5cbiAgICAvLyBJbiB0aGUgRGF0YURpY3Rpb25hcnksIHZhbHVlQXNTdHJpbmcgY2FuIGJlICclbnVsbCUnIG9yICclbWlzc2luZyUnLCB3aGlsZSBpblxuICAgIC8vIFNob3dEYXRhVGFibGVQcmVzTW9kZWwsIHdlIGNhbiBnZXQgJ251bGwnIG9yICdtaXNzaW5nJywgb3IgJyVudWxsJScgZm9yIHN0cmluZyBzcGVjaWFsIHZhbHVlcy5cbiAgICAvLyBGb3IgZWl0aGVyIG9mIHRoZXNlIGNhc2VzLCB3ZSByZXR1cm4gc3BlY2lhbFZhbHVlSW5kaWNhdG9yIChvciB0aGUgb3JpZ2luYWwgc3BlY2lhbCBzdHJpbmcpLlxuICAgIC8vIFRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsdHksIHRoaXMgY29udmVydGVyOlxuICAgIC8vIDEuIHJldHVybnMgYSBzdHJpbmcgZm9yIGFueSBzcGVjaWFsIHZhbHVlc1xuICAgIC8vIDIuIHJldHVybnMgYSBzdHJpbmcgZm9yIGFueSBkYXRlXG5cbiAgICAvLyBQYXJhbWV0ZXIgbWluL21heCB2YWx1ZXMgY2FuIGJlIHVuZGVmaW5lZCwgc28gcmVzdWx0IGlzIGFsc28gdW5kZWZpbmVkXG4gICAgaWYgKHZhbHVlQXNTdHJpbmcgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZUFzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3BlY2lhbCh2YWx1ZUFzU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHZhbHVlQXNTdHJpbmc7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIERhdGFUeXBlLkJvb2w6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQm9vbGVhbih2YWx1ZUFzU3RyaW5nKTtcblxuICAgICAgY2FzZSBEYXRhVHlwZS5JbnQ6XG4gICAgICBjYXNlIERhdGFUeXBlLkZsb2F0OlxuICAgICAgICAvLyBSZXR1cm4gc3BlY2lhbCB2YWx1ZSAnJW51bGwlJyBmb3IgYW55IGZhaWx1cmUgaW4gcGFyc2luZy5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGF0IGJlY2F1c2UgU2hvd0RhdGFUYWJsZVByZXNNb2RlbCB3aWxsIGdpdmUgdXMgc3RyaW5ncyBsaWtlICdudWxsJ1xuICAgICAgICAvLyBmb3Igc3BlY2lhbCB2YWx1ZXMuXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTnVtYmVyKHZhbHVlQXNTdHJpbmcpO1xuXG4gICAgICBjYXNlIERhdGFUeXBlLkRhdGU6XG4gICAgICAgIC8vIEZvciBTaG93RGF0YVRhYmxlUHJlc01vZGVsLCBzcGVjaWFsIHZhbHVlcyB3aWxsIGJlIFwibnVsbFwiIHdoaWNoIHdpbGwgZmFpbCB0byBwYXJzZS5cbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSByZXR1cm4gJyVudWxsJScuXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRGF0ZSh2YWx1ZUFzU3RyaW5nKSA9PT0gbnVsbCA/IHRoaXMuc3BlY2lhbFZhbHVlSW5kaWNhdG9yIDogdmFsdWVBc1N0cmluZztcblxuICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgLy8gRm9yIFNob3dEYXRhVGFibGVQcmVzTW9kZWwsIHNwZWNpYWwgdmFsdWVzIHdpbGwgYmUgXCJudWxsXCIgd2hpY2ggd2lsbCBmYWlsIHRvIHBhcnNlLlxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIHJldHVybiAnJW51bGwlJ1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZURhdGVUaW1lKHZhbHVlQXNTdHJpbmcpID09PSBudWxsID8gdGhpcy5zcGVjaWFsVmFsdWVJbmRpY2F0b3IgOiB2YWx1ZUFzU3RyaW5nO1xuXG4gICAgICBjYXNlIERhdGFUeXBlLlNwYXRpYWw6XG4gICAgICBjYXNlIERhdGFUeXBlLlN0cmluZzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZUFzU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0VmFsdWVUb05hdGl2ZVZhbHVlKHZhbHVlOiBhbnksIHR5cGU6IERhdGFUeXBlKTogYm9vbGVhbiB8IG51bWJlciB8IERhdGUgfCBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBUaGlzIGNvbnZlcnRzIGZyb20gb3VyIDEuMiBBUEkgdGhhdCByZXR1cm5zIHN0cmluZ3MgZm9yIHNwZWNpYWxzLCBhbmQgZGF0ZXMgYXMgc3RyaW5ncy5cbiAgICAvLyBJdCB0YWtlcyB0aGUgc3BlY2lhbCBjYXNlIG9mICclbnVsbCUnIGFuZCByZXR1cm5zIGEgbnVsbC5cbiAgICAvLyBGb3IgZGF0ZXMsIGl0IHJldHVybnMgYSBEYXRlIG9iamVjdCByYXRoZXIgdGhhbiBhIHN0cmluZy5cbiAgICAvLyBjb252ZXJ0VmFsdWVUb05hdGl2ZVZhbHVlIHNob3VsZCBiZSB1c2VkIHRvIGJ1aWxkIGEgRGF0YVZhbHVlLm5hdGl2ZVZhbHVlIGZpZWxkLlxuXG4gICAgLy8gUGFyYW1ldGVyIG1pbi9tYXggY2FuIGJlIHVuZGVmaW5lZC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgbmF0aXZlVmFsdWUgaXMgdHJlYXRlZCBsaWtlIGEgc3BlY2lhbFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRGF0YVR5cGUuQm9vbDpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBudWxsIDogdmFsdWU7XG5cbiAgICAgIGNhc2UgRGF0YVR5cGUuSW50OlxuICAgICAgY2FzZSBEYXRhVHlwZS5GbG9hdDpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBudWxsIDogdmFsdWU7XG5cbiAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIHRvIERhdGUgb2JqZWN0IChvciBudWxsIGlmIHBhcnNpbmcgZmFpbHMgLi4uIHdlIGFzc3VtZSBzcGVjaWFsKVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZURhdGUodmFsdWUpO1xuXG4gICAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdG8gRGF0ZSBvYmplY3QgKG9yIG51bGwgaWYgcGFyc2luZyBmYWlscyAuLi4gd2UgYXNzdW1lIHNwZWNpYWwpXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRGF0ZVRpbWUodmFsdWUpO1xuXG4gICAgICBjYXNlIERhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTcGVjaWFsKHZhbHVlKSA/IG51bGwgOiB2YWx1ZTtcblxuICAgICAgY2FzZSBEYXRhVHlwZS5TcGF0aWFsOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0U3RyaW5nVmFsdWVUb05hdGl2ZVZhbHVlKHZhbHVlOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlKTogYm9vbGVhbiB8IG51bWJlciB8IERhdGUgfCBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gZnJvbSBzdHJpbmcgZGlyZWN0bHkgdG8gbmF0aXZlIHZhbHVlIGZvciBhbGwgdHlwZXNcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsdWVUb05hdGl2ZVZhbHVlKHRoaXMuY29udmVydFZhbHVlQXNTdHJpbmdUb1ZhbHVlKHZhbHVlLCB0eXBlKSwgdHlwZSk7XG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIEV4dGVuc2lvbkNvbnRleHQge1xuICBEZXNrdG9wID0gJ2Rlc2t0b3AnLFxuICBTZXJ2ZXIgPSAnc2VydmVyJyxcbiAgVW5rbm93biA9ICd1bmtub3duJyxcbn1cblxuZXhwb3J0IGVudW0gRXh0ZW5zaW9uTW9kZSB7XG4gIEF1dGhvcmluZyA9ICdhdXRob3JpbmcnLFxuICBWaWV3aW5nID0gJ3ZpZXdpbmcnLFxuICBVbmtub3duID0gJ3Vua25vd24nLFxufVxuXG5leHBvcnQgZW51bSBBbm5vdGF0ZUVudW0ge1xuICBNYXJrID0gJ21hcmsnLFxuICBQb2ludCA9ICdwb2ludCcsXG4gIEFyZWEgPSAnYXJlYScsXG59XG5cbmV4cG9ydCBlbnVtIENvbHVtblR5cGUge1xuICBEaXNjcmV0ZSA9ICdkaXNjcmV0ZScsXG4gIENvbnRpbnVvdXMgPSAnY29udGludW91cycsXG59XG5cbmV4cG9ydCBlbnVtIERhc2hib2FyZE9iamVjdFR5cGUge1xuICBCbGFuayA9ICdibGFuaycsXG4gIFdvcmtzaGVldCA9ICd3b3Jrc2hlZXQnLFxuICBRdWlja0ZpbHRlciA9ICdxdWljay1maWx0ZXInLFxuICBQYXJhbWV0ZXJDb250cm9sID0gJ3BhcmFtZXRlci1jb250cm9sJyxcbiAgUGFnZUZpbHRlciA9ICdwYWdlLWZpbHRlcicsXG4gIExlZ2VuZCA9ICdsZWdlbmQnLFxuICBUaXRsZSA9ICd0aXRsZScsXG4gIFRleHQgPSAndGV4dCcsXG4gIEltYWdlID0gJ2ltYWdlJyxcbiAgV2ViUGFnZSA9ICd3ZWItcGFnZScsXG4gIEV4dGVuc2lvbiA9ICdleHRlbnNpb24nLFxufVxuXG5leHBvcnQgZW51bSBEYXRhVHlwZSB7XG4gIFN0cmluZyA9ICdzdHJpbmcnLFxuICBJbnQgPSAnaW50JyxcbiAgRmxvYXQgPSAnZmxvYXQnLFxuICBCb29sID0gJ2Jvb2wnLFxuICBEYXRlID0gJ2RhdGUnLFxuICBEYXRlVGltZSA9ICdkYXRlLXRpbWUnLFxuICBTcGF0aWFsID0gJ3NwYXRpYWwnLFxuICBVbmtub3duID0gJ3Vua25vd24nLFxufVxuXG5leHBvcnQgZW51bSBEaWFsb2dTdHlsZSB7XG4gIFdpbmRvdyA9ICd3aW5kb3cnLFxuICBNb2RhbCA9ICdtb2RhbCcsXG4gIE1vZGVsZXNzID0gJ21vZGVsZXNzJyxcbn1cblxuZXhwb3J0IGVudW0gRW5jb2RlZERhdGFUeXBlIHtcbiAgTnVtYmVyID0gJ251bWJlcicsXG4gIFN0cmluZyA9ICdzdHJpbmcnLFxuICBEYXRlID0gJ2RhdGUnLFxuICBCb29sZWFuID0gJ2Jvb2xlYW4nLFxufVxuXG5leHBvcnQgZW51bSBFcnJvckNvZGVzIHtcbiAgSU5JVElBTElaQVRJT05fRVJST1IgPSAnaW5pdGlhbGl6YXRpb24tZXJyb3InLFxuICBJTlRFUk5BTF9FUlJPUiA9ICdpbnRlcm5hbC1lcnJvcicsXG4gIE1JU1NJTkdfRU5VTV9NQVBQSU5HID0gJ21pc3NpbmctZW51bS1tYXBwaW5nJyxcbiAgTUlTU0lOR19QQVJBTUVURVIgPSAnbWlzc2luZy1wYXJhbWV0ZXInLFxuICBQRVJNSVNTSU9OX0RFTklFRCA9ICdwZXJtaXNzaW9uLWRlbmllZCcsXG4gIFBSRVNfTU9ERUxfUEFSU0lOR19FUlJPUiA9ICdwcmVzLW1vZGVsLXBhcnNpbmctZXJyb3InLFxuICBWRVJTSU9OX05PVF9DT05GSUdVUkVEID0gJ3ZlcnNpb24tbm90LWNvbmZpZ3VyZWQnLFxuICBWSVNJQklMSVRZX0VSUk9SID0gJ3Zpc2liaWxpdHktZXJyb3InLFxuICBVTktOT1dOX1ZFUkJfSUQgPSAndW5rbm93bi12ZXJiLWlkJyxcbn1cblxuZXhwb3J0IGVudW0gRmllbGRBZ2dyZWdhdGlvblR5cGUge1xuICBTdW0gPSAnc3VtJyxcbiAgQXZnID0gJ2F2ZycsXG4gIE1pbiA9ICdtaW4nLFxuICBNYXggPSAnbWF4JyxcbiAgU3RkZXYgPSAnc3RkZXYnLFxuICBTdGRldnAgPSAnc3RkZXZwJyxcbiAgVmFyID0gJ3ZhcicsXG4gIFZhcnAgPSAndmFycCcsXG4gIENvbGxlY3QgPSAnY29sbGVjdCcsXG4gIENvdW50ID0gJ2NvdW50JyxcbiAgQ291bnRkID0gJ2NvdW50ZCcsXG4gIE1lZGlhbiA9ICdtZWRpYW4nLFxuICBBdHRyID0gJ2F0dHInLFxuICBOb25lID0gJ25vbmUnLFxuICBZZWFyID0gJ3llYXInLFxuICBRdHIgPSAncXRyJyxcbiAgTW9udGggPSAnbW9udGgnLFxuICBEYXkgPSAnZGF5JyxcbiAgSG91ciA9ICdob3VyJyxcbiAgTWludXRlID0gJ21pbnV0ZScsXG4gIFNlY29uZCA9ICdzZWNvbmQnLFxuICBXZWVrID0gJ3dlZWsnLFxuICBXZWVrZGF5ID0gJ3dlZWtkYXknLFxuICBNb250aFllYXIgPSAnbW9udGgteWVhcicsXG4gIE1keSA9ICdtZHknLFxuICBFbmQgPSAnZW5kJyxcbiAgVHJ1bmNZZWFyID0gJ3RydW5jLXllYXInLFxuICBUcnVuY1F0ciA9ICd0cnVuYy1xdHInLFxuICBUcnVuY01vbnRoID0gJ3RydW5jLW1vbnRoJyxcbiAgVHJ1bmNXZWVrID0gJ3RydW5jLXdlZWsnLFxuICBUcnVuY0RheSA9ICd0cnVuYy1kYXknLFxuICBUcnVuY0hvdXIgPSAndHJ1bmMtaG91cicsXG4gIFRydW5jTWludXRlID0gJ3RydW5jLW1pbnV0ZScsXG4gIFRydW5jU2Vjb25kID0gJ3RydW5jLXNlY29uZCcsXG4gIFF1YXJ0MSA9ICdxdWFydDEnLFxuICBRdWFydDMgPSAncXVhcnQzJyxcbiAgU2tld25lc3MgPSAnc2tld25lc3MnLFxuICBLdXJ0b3NpcyA9ICdrdXJ0b3NpcycsXG4gIEluT3V0ID0gJ2luLW91dCcsXG4gIFVzZXIgPSAndXNlcicsXG59XG5cbmV4cG9ydCBlbnVtIEZpZWxkUm9sZVR5cGUge1xuICBEaW1lbnNpb24gPSAnZGltZW5zaW9uJyxcbiAgTWVhc3VyZSA9ICdtZWFzdXJlJyxcbiAgVW5rbm93biA9ICd1bmtub3duJyxcbn1cblxuLyoqXG4gKiAgVGhlIGRpZmZlcmVudCB1cGRhdGUgdHlwZXMgZm9yIGFwcGx5aW5nIGZpbHRlci5cbiAqL1xuZXhwb3J0IGVudW0gRmlsdGVyVXBkYXRlVHlwZSB7XG4gIEFkZCA9ICdhZGQnLFxuICBBbGwgPSAnYWxsJyxcbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbiAgUmVtb3ZlID0gJ3JlbW92ZScsXG59XG5cbmV4cG9ydCBlbnVtIFNoZWV0VHlwZSB7XG4gIERhc2hib2FyZCA9ICdkYXNoYm9hcmQnLFxuICBTdG9yeSA9ICdzdG9yeScsXG4gIFdvcmtzaGVldCA9ICd3b3Jrc2hlZXQnLFxufVxuXG5leHBvcnQgZW51bSBEb21haW5SZXN0cmljdGlvblR5cGUge1xuICBBbGwgPSAnYWxsJyxcbiAgTGlzdCA9ICdsaXN0JyxcbiAgUmFuZ2UgPSAncmFuZ2UnLFxufVxuXG5leHBvcnQgZW51bSBEYXRlU3RlcFBlcmlvZCB7XG4gIFllYXJzID0gJ3llYXJzJyxcbiAgUXVhcnRlcnMgPSAncXVhcnRlcnMnLFxuICBNb250aHMgPSAnbW9udGhzJyxcbiAgV2Vla3MgPSAnd2Vla3MnLFxuICBEYXlzID0gJ2RheXMnLFxuICBIb3VycyA9ICdob3VycycsXG4gIE1pbnV0ZXMgPSAnbWludXRlcycsXG4gIFNlY29uZHMgPSAnc2Vjb25kcycsXG59XG5cbi8qKlxuICogVGhlIG9wdGlvbiBmb3Igc3BlY2lmeWluZyB3aGljaCB2YWx1ZXMgdG8gaW5jbHVkZSBmb3IgZmlsdGVyaW5nLlxuICovXG5leHBvcnQgZW51bSBGaWx0ZXJOdWxsT3B0aW9uIHtcbiAgTnVsbFZhbHVlcyA9ICdudWxsdmFsdWVzJyxcbiAgTm9uTnVsbFZhbHVlcyA9ICdub25udWxsdmFsdWVzJyxcbiAgQWxsVmFsdWVzID0gJ2FsbHZhbHVlcycsXG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgZmlsdGVyIGRvbWFpblxuICovXG5leHBvcnQgZW51bSBGaWx0ZXJEb21haW5UeXBlIHtcbiAgUmVsZXZhbnQgPSAncmVsZXZhbnQnLFxuICBEYXRhYmFzZSA9ICdkYXRhYmFzZScsXG59XG5cbi8qKlxuICogSW50ZXJuYWwgZW51bSBmb3Igc3BlY2lmeWluZyB0aGUgc2VsZWN0aW9uIHR5cGUgZm9yIHNlbGVjdCBtYXJrcyBhcGkuXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGVjdGlvblVwZGF0ZVR5cGUge1xuICBSZXBsYWNlID0gJ3NlbGVjdC1yZXBsYWNlJyxcbiAgQWRkID0gJ3NlbGVjdC1hZGQnLFxuICBSZW1vdmUgPSAnc2VsZWN0LXJlbW92ZScsXG59XG5cbi8qKlxuICogSW50ZXJuYWwgZW51bSBmb3Igc3BlY2lmeWluZyB0aGUgc2VsZWN0IG9wdGlvbiBmb3IgdGhlIHNlbGVjdCB0dXBsZXMgYXBpLlxuICovXG5leHBvcnQgZW51bSBTZWxlY3RPcHRpb25zIHtcbiAgU2ltcGxlID0gJ3NlbGVjdC1vcHRpb25zLXNpbXBsZScsXG4gIFRvZ2dsZSA9ICdzZWxlY3Qtb3B0aW9ucy10b2dnbGUnLFxuICBNZW51ID0gJ3NlbGVjdC1vcHRpb25zLW1lbnUnLCAvLyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGV4dGVybmFsIGNvbnRyYWN0XG4gIFJhbmdlID0gJ3NlbGVjdC1vcHRpb25zLXJhbmdlJywgLy8gbm90IGltcGxlbWVudGVkIGluIHRoZSBleHRlcm5hbCBjb250cmFjdFxuICBTZWFyY2ggPSAnc2VsZWN0LW9wdGlvbnMtc2VhcmNoJywgLy8gbm90IGltcGxlbWVudGVkIGluIHRoZSBleHRlcm5hbCBjb250cmFjdFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIGluY2x1ZGVkIHZhbHVlcyB0eXBlIGZvciByYW5nZSBzZWxlY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFF1YW50aXRhdGl2ZUluY2x1ZGVkVmFsdWVzIHtcbiAgSW5jbHVkZU51bGwgPSAnaW5jbHVkZS1udWxsJyxcbiAgSW5jbHVkZU5vbk51bGwgPSAnaW5jbHVkZS1ub24tbnVsbCcsXG4gIEluY2x1ZGVBbGwgPSAnaW5jbHVkZS1hbGwnLFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgYSBoaWVyYXJjaGljYWwgbGV2ZWwgc2VsZWN0aW9uIHN0YXRlLlxuICovXG5leHBvcnQgZW51bSBIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlIHtcbiAgQWxsU2VsZWN0ZWQgPSAnYWxsLXNlbGVjdGVkJyxcbiAgTm9uZVNlbGVjdGVkID0gJ25vbmUtc2VsZWN0ZWQnLFxuICBTb21lU2VsZWN0ZWQgPSAnc29tZS1zZWxlY3RlZCcsXG4gIFVua25vd25TZWxlY3RlZCA9ICd1bmtub3duLXNlbGVjdGVkJyxcbn1cblxuLyoqXG4gKiBUeXBlIG9mIG1hcmsgZm9yIGEgZ2l2ZW4gbWFya3MgY2FyZCBpbiBhIHZpei5cbiAqL1xuZXhwb3J0IGVudW0gTWFya1R5cGUge1xuICBCYXIgPSAnYmFyJyxcbiAgTGluZSA9ICdsaW5lJyxcbiAgQXJlYSA9ICdhcmVhJyxcbiAgU3F1YXJlID0gJ3NxdWFyZScsXG4gIENpcmNsZSA9ICdjaXJjbGUnLFxuICBTaGFwZSA9ICdzaGFwZScsXG4gIFRleHQgPSAndGV4dCcsXG4gIE1hcCA9ICdtYXAnLFxuICBQaWUgPSAncGllJyxcbiAgR2FudHRCYXIgPSAnZ2FudHQtYmFyJyxcbiAgUG9seWdvbiA9ICdwb2x5Z29uJyxcbiAgSGVhdG1hcCA9ICdoZWF0bWFwJyxcbiAgVml6RXh0ZW5zaW9uID0gJ3Zpei1leHRlbnNpb24nLFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgZmlsdGVyXG4gKi9cbmV4cG9ydCBlbnVtIEZpbHRlclR5cGUge1xuICBDYXRlZ29yaWNhbCA9ICdjYXRlZ29yaWNhbCcsXG4gIFJhbmdlID0gJ3JhbmdlJyxcbiAgUmVsYXRpdmVEYXRlID0gJ3JlbGF0aXZlRGF0ZScsXG4gIEhpZXJhcmNoaWNhbCA9ICdoaWVyYXJjaGljYWwnLFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIERhdGVSYW5nZVR5cGUgb2YgYSByZWxhdGl2ZSBkYXRlIGZpbHRlclxuICovXG5leHBvcnQgZW51bSBEYXRlUmFuZ2VUeXBlIHtcbiAgLyoqXG4gICAqIFJlZmVycyB0byB0aGUgbGFzdCBkYXksIHdlZWssIG1vbnRoLCBldGMuIG9mIHRoZSBkYXRlIHBlcmlvZC5cbiAgICovXG4gIExhc3QgPSAnbGFzdCcsXG4gIC8qKlxuICAgKiBSZWZlcnMgdG8gdGhlIGxhc3QgTiBkYXlzLCB3ZWVrcywgbW9udGhzLCBldGMuIG9mIHRoZSBkYXRlIHBlcmlvZC5cbiAgICovXG4gIExhc3ROID0gJ2xhc3ROJyxcbiAgLyoqXG4gICAqIFJlZmVycyB0byB0aGUgbmV4dCBkYXksIHdlZWssIG1vbnRoLCBldGMuIG9mIHRoZSBkYXRlIHBlcmlvZC5cbiAgICovXG4gIE5leHQgPSAnbmV4dCcsXG4gIC8qKlxuICAgKiBSZWZlcnMgdG8gdGhlIG5leHQgTiBkYXlzLCB3ZWVrcywgbW9udGhzLCBldGMuIG9mIHRoZSBkYXRlIHBlcmlvZC5cbiAgICovXG4gIE5leHROID0gJ25leHROJyxcbiAgLyoqXG4gICAqIFJlZmVycyB0byB0aGUgY3VycmVudCBkYXksIHdlZWssIG1vbnRoLCBldGMuIG9mIHRoZSBkYXRlIHBlcmlvZC5cbiAgICovXG4gIEN1cnJlbnQgPSAnY3VycmVudCcsXG4gIC8qKlxuICAgKiBSZWZlcnMgdG8gZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGRheSwgd2VlaywgbW9udGgsIGV0Yy4gb2YgdGhlIGRhdGUgcGVyaW9kLlxuICAgKi9cbiAgVG9EYXRlID0gJ3RvRGF0ZScsXG59XG5cbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGxhdW5jaGluZyBvZiBhbiBleHRlbnNpb24gZGlhbG9nIHN1Y2NlZWRlZCBvciBmYWlsZWQuXG4gKi9cbmV4cG9ydCBlbnVtIEV4dGVuc2lvbkRpYWxvZ1Jlc3VsdCB7XG4gIERpYWxvZ0FscmVhZHlPcGVuID0gJ2RpYWxvZy1hbHJlYWR5LW9wZW4nLFxuICBJbnZhbGlkRG9tYWluID0gJ2ludmFsaWQtZG9tYWluJyxcbiAgU3VjY2VzcyA9ICdzdWNjZXNzJyxcbn1cblxuLy8gRW51bWVyYXRpb24gZm9yIEFwaVNob3dEYXRhIHRhYmxlIGlkIHNlbnRpbmVscy5cbmV4cG9ydCBlbnVtIEFwaVNob3dEYXRhVGFibGVTZW50aW5lbCB7XG4gIC8vIGZpbmQgdGhlIG9uZSBsb2dpY2FsIHRhYmxlIC0gdXNlZCBpbiB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGdldFVuZGVybHlpbmdEYXRhVGFibGUgYW5kIGdldExvZ2ljYWxEYXRhVGFibGUgY29tbWFuZHNcbiAgU2luZ2xlVGFibGVJZCA9ICdzaW5nbGUtdGFibGUtaWQtc2VudGluZWwnLFxuICBTaW5nbGVUYWJsZUNhcHRpb24gPSAnU2luZ2xlIHRhYmxlIGlkIHNlbnRpbmVsJyxcbn1cblxuLyoqXG4gKiBVc2VkIHRvIG9wdGltaXplIHRoZSBnZXRTdW1tYXJ5RGF0YS9nZXRVbmRlcmx5aW5nVGFibGVEYXRhIHJlc3VsdHNcbiAqIE1hcHBlZCBmcm9tIGV4dGVybmFsIEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIEFwaVNob3dEYXRhVGFibGVGb3JtYXQge1xuICBOYXRpdmVWYWx1ZXNPbmx5ID0gJ25hdGl2ZS12YWx1ZXMtb25seScsXG4gIEZvcm1hdHRlZFZhbHVlc09ubHkgPSAnZm9ybWF0dGVkLXZhbHVlcy1vbmx5JyxcbiAgTmF0aXZlQW5kRm9ybWF0dGVkVmFsdWVzID0gJ25hdGl2ZS1hbmQtZm9ybWF0dGVkLXZhbHVlcycsXG59XG5cbi8qKlxuICogVXNlZCB0byBkZW5vdGUgdGhlIHNlY3Rpb25zIG9mIGZvcm1hdHRpbmcgd2l0aGluIHRhYmxlYXVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQ2xhc3NOYW1lS2V5IHtcbiAgV29ya3NoZWV0VGl0bGUgPSAndGFibGVhdS13b3Jrc2hlZXQtdGl0bGUnLFxuICBXb3Jrc2hlZXQgPSAndGFibGVhdS13b3Jrc2hlZXQnLFxuICBUb29sdGlwID0gJ3RhYmxlYXUtdG9vbHRpcCcsXG4gIFN0b3J5VGl0bGUgPSAndGFibGVhdS1zdG9yeS10aXRsZScsXG4gIERhc2hib2FyZFRpdGxlID0gJ3RhYmxlYXUtZGFzaGJvYXJkLXRpdGxlJyxcbn1cblxuLyoqXG4gKiBVc2VkIHRvIHNldCBwYWdlIHNpemUgZm9yIGV4cG9ydCBsYXlvdXQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUGFnZVNpemVPcHRpb24ge1xuICBMZXR0ZXIgPSAnbGV0dGVyJyxcbiAgTGVnYWwgPSAnbGVnYWwnLFxuICBOb3RlID0gJ25vdGUnLFxuICBGb2xpbyA9ICdmb2xpbycsXG4gIFRhYmxvaWQgPSAndGFibG9pZCcsXG4gIExlZGdlciA9ICdsZWRnZXInLFxuICBTdGF0ZW1lbnQgPSAnc3RhdGVtZW50JyxcbiAgRXhlY3V0aXZlID0gJ2V4ZWN1dGl2ZScsXG4gIEEzID0gJ2EzJyxcbiAgQTQgPSAnYTQnLFxuICBBNSA9ICdhNScsXG4gIEI0ID0gJ2I0JyxcbiAgQjUgPSAnYjUnLFxuICBRdWFydG8gPSAncXVhcnRvJyxcbiAgVW5zcGVjaWZpZWQgPSAndW5zcGVjaWZpZWQnLFxufVxuXG4vKipcbiAqIFVzZWQgdG8gc2V0IHRoZSBwYWdlIG9yaWVudGF0aW9uIG1vZGUgZm9yIGV4cG9ydCBsYXlvdXQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUGFnZU9yaWVudGF0aW9uIHtcbiAgUHJpbnRlciA9ICdwcmludGVyJyxcbiAgUG9ydHJhaXQgPSAncG9ydHJhaXQnLFxuICBMYW5kc2NhcGUgPSAnbGFuZHNjYXBlJyxcbn1cblxuLyoqXG4gKiBVc2VkIHRvIHNldCBzY2FsZSBtb2RlIGZvciBleHBvcnQgbGF5b3V0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIFNjYWxlTW9kZSB7XG4gIFNjYWxlQXV0byA9ICdhdXRvJyxcbiAgU2NhbGVQZXJjZW50YWdlID0gJ3BlcmNlbnQnLFxuICBTY2FsZUZpdFBhZ2VzID0gJ2ZpdC1wYWdlcycsXG59XG5cbi8qKlxuICogVXNlZCBieSBzZXRGaXRBbmRTY2FsZVZhbHVlcyB0byBzY2FsZSBwZXJjZW50IHZhbHVlc1xuICovXG5leHBvcnQgZW51bSBQYWdlU2NhbGluZ09wdGlvbiB7XG4gIFNjYWxlUGN0QXV0byA9ICdhdXRvJyxcbiAgU2NhbGVQY3Q0MDAgPSAncGN0NDAwJyxcbiAgU2NhbGVQY3QyMDAgPSAncGN0MjAwJyxcbiAgU2NhbGVQY3QxMDAgPSAncGN0MTAwJyxcbiAgU2NhbGVQY3Q5MCA9ICdwY3Q5MCcsXG4gIFNjYWxlUGN0ODAgPSAncGN0ODAnLFxuICBTY2FsZVBjdDc1ID0gJ3BjdDc1JyxcbiAgU2NhbGVQY3Q2MCA9ICdwY3Q2MCcsXG4gIFNjYWxlUGN0NTAgPSAncGN0NTAnLFxuICBTY2FsZVBjdDI1ID0gJ3BjdDI1Jyxcbn1cblxuLyoqXG4gKiBVc2VkIGJ5IHNldEZpdEFuZFNjYWxlVmFsdWVzIHRvIHNjYWxlIGZpdCBwYWdlIHZhbHVlc1xuICovXG5leHBvcnQgZW51bSBGaXRQYWdlcyB7XG4gIEZpdE9uZUhpZ2ggPSAnZml0MHgxJyxcbiAgRml0VHdvSGlnaCA9ICdmaXQweDInLFxuICBGaXRPbmVXaWRlID0gJ2ZpdDF4MCcsXG4gIEZpdFR3b1dpZGUgPSAnZml0MngwJyxcbn1cblxuLyoqXG4gKiBVc2VkIGJ5IGdldFZpc3VhbFNwZWNpZmljYXRpb25Bc3luY1xuICovXG5leHBvcnQgZW51bSBFbmNvZGluZ1R5cGUge1xuICBDb2xvciA9ICdjb2xvcicsXG4gIFNpemUgPSAnc2l6ZScsXG4gIExhYmVsID0gJ2xhYmVsJyxcbiAgRGV0YWlsID0gJ2RldGFpbCcsXG4gIFRvb2x0aXAgPSAndG9vbHRpcCcsXG4gIFNoYXBlID0gJ3NoYXBlJyxcbiAgUGF0aCA9ICdwYXRoJyxcbiAgQW5nbGUgPSAnYW5nbGUnLFxuICBHZW9tZXRyeSA9ICdnZW9tZXRyeScsXG4gIEN1c3RvbSA9ICdjdXN0b20nLFxufVxuIiwiZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uSWQge1xuICBDdXN0b21NYXJrQ29udGV4dE1lbnVDbGlja2VkID0gJ2N1c3RvbS1tYXJrLWNvbnRleHQtbWVudS1jbGlja2VkJyxcbiAgQ29udGV4dE1lbnVDbGljayA9ICdjb250ZXh0LW1lbnUtY2xpY2snLFxuICBDdXN0b21WaWV3UmVtb3ZlZCA9ICdjdXN0b20tdmlldy1yZW1vdmVkJyxcbiAgQ3VzdG9tVmlld1NhdmVkID0gJ2N1c3RvbS12aWV3LXNhdmVkJyxcbiAgQ3VzdG9tVmlld1NldERlZmF1bHQgPSAnY3VzdG9tLXZpZXctc2V0LWRlZmF1bHQnLFxuICBDdXN0b21WaWV3c0xvYWRlZCA9ICdjdXN0b20tdmlld3MtbG9hZGVkJyxcbiAgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZCA9ICdkYXNoYm9hcmQtbGF5b3V0LWNoYW5nZWQnLFxuICBFZGl0QnV0dG9uQ2xpY2tlZCA9ICdlZGl0LWJ1dHRvbi1jbGlja2VkJyxcbiAgRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWQgPSAnZWRpdC1pbi1kZXNrdG9wLWJ1dHRvbi1jbGlja2VkJyxcbiAgRXh0ZW5zaW9uRGlhbG9nVXBkYXRlID0gJ2V4dGVuc2lvbi1kaWFsb2ctdXBkYXRlJyxcbiAgRmlsdGVyQ2hhbmdlZCA9ICdmaWx0ZXItY2hhbmdlZCcsXG4gIEZpcnN0Vml6U2l6ZUtub3duID0gJ2ZpcnN0LXZpei1zaXplLWtub3duJyxcbiAgUGFyYW1ldGVyQ2hhbmdlZCA9ICdwYXJhbWV0ZXItY2hhbmdlZCcsXG4gIFNlbGVjdGVkTWFya3NDaGFuZ2VkID0gJ3NlbGVjdGVkLW1hcmtzLWNoYW5nZWQnLFxuICBTZXR0aW5nc0NoYW5nZWQgPSAnc2V0dGluZ3MtY2hhbmdlZCcsXG4gIFN1bW1hcnlEYXRhQ2hhbmdlZCA9ICdzdW1tYXJ5LWRhdGEtY2hhbmdlZCcsXG4gIFRlc3RDb252ZXJzaW9uTm90aWZpY2F0aW9uID0gJ3Rlc3QtY29udmVyc2lvbi1ub3RpZmljYXRpb24nLFxuICBUb29sYmFyU3RhdGVDaGFuZ2VkID0gJ3Rvb2xiYXItc3RhdGUtY2hhbmdlZCcsXG4gIFZpekludGVyYWN0aXZlID0gJ3Zpei1pbnRlcmFjdGl2ZScsXG4gIEFza0RhdGFJbnRlcmFjdGl2ZSA9ICdhc2stZGF0YS1pbnRlcmFjdGl2ZScsXG4gIFdvcmtib29rUmVhZHlUb0Nsb3NlID0gJ3dvcmtib29rLXJlYWR5LXRvLWNsb3NlJyxcbiAgV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZCA9ICd3b3JrYm9vay1mb3JtYXR0aW5nLWNoYW5nZWQnLFxuICBXb3JrYm9va1B1Ymxpc2hlZCA9ICd3b3JrYm9vay1wdWJsaXNoZWQnLFxuICBXb3JrYm9va1B1Ymxpc2hlZEFzID0gJ3dvcmtib29rLXB1Ymxpc2hlZC1hcycsXG4gIFVybEFjdGlvbiA9ICd1cmwtYWN0aW9uJyxcbiAgVGFiU3dpdGNoZWQgPSAndGFiLXN3aXRjaGVkJyxcbiAgU3RvcnlQb2ludFN3aXRjaGVkID0gJ3N0b3J5LXBvaW50LXN3aXRjaGVkJyxcbiAgUmVhZHlUb1JlY2VpdmVBdXRoVG9rZW4gPSAncmVhZHktdG8tcmVjZWl2ZS1hdXRoLXRva2VuJyxcbn1cbiIsIi8vIFBMRUFTRSBLRUVQIElOIEFMUEhBQkVUSUNBTCBPUkRFUi4gVGhpcyBoZWxwcyB3aXRoIHZpc3VhbGx5IGZpbmRpbmcgZW50cmllcywga25vd2luZyB3aGVyZSB0byBwdXRcbi8vIG5ldyBvbmVzLCBhbmQgbWVyZ2UgY29uZmxpY3RzLlxuZXhwb3J0IGVudW0gUGFyYW1ldGVySWQge1xuICBBY3RpdmVUYWJsZXNJbmZvID0gJ2FjdGl2ZS10YWJsZXMtaW5mbycsXG4gIEFuY2hvckRhdGUgPSAnYW5jaG9yLWRhdGUnLFxuICBBbm5vdGF0ZUVudW0gPSAnYW5ub3RhdGUtZW51bScsXG4gIEFubm90YXRpb25MaXN0ID0gJ2Fubm90YXRpb24tbGlzdCcsXG5cbiAgQ2F0ZWdvcmljYWxEb21haW4gPSAnY2F0ZWdvcmljYWwtZG9tYWluJyxcbiAgQ2xpY2tUaHJvdWdoRW5hYmxlZCA9ICdjbGljay10aHJvdWdoLWVuYWJsZWQnLFxuICBDb2x1bW5zVG9JbmNsdWRlID0gJ2NvbHVtbnMtdG8taW5jbHVkZScsXG4gIENvbHVtbnNUb0luY2x1ZGVCeUlkID0gJ2NvbHVtbnMtdG8taW5jbHVkZS1ieS1pZCcsXG4gIENvbm5lY3Rpb25EZXNjcmlwdGlvblN1bW1hcmllcyA9ICdjb25uZWN0aW9uLWRlc2NyaXB0aW9uLXN1bW1hcmllcycsXG4gIEN1cnJlbnRTaGVldFR5cGUgPSAnY3VycmVudC1zaGVldC10eXBlJyxcbiAgQ3VzdG9tVmlldyA9ICdjdXN0b20tdmlldycsXG4gIEN1c3RvbVZpZXdJc0RlZmF1bHQgPSAnY3VzdG9tLXZpZXctaXMtZGVmYXVsdCcsXG4gIEN1c3RvbVZpZXdJc1B1YmxpYyA9ICdjdXN0b20tdmlldy1pcy1wdWJsaWMnLFxuICBDdXN0b21WaWV3THVpZCA9ICdjdXN0b20tdmlldy1sdWlkJyxcbiAgQ3VzdG9tVmlld05hbWUgPSAnY3VzdG9tLXZpZXctbmFtZScsXG4gIEN1c3RvbVZpZXdzID0gJ2N1c3RvbS12aWV3cycsXG5cbiAgRGFzaGJvYXJkID0gJ2Rhc2hib2FyZCcsXG4gIERhc2hib2FyZEZpbHRlcnMgPSAnZGFzaGJvYXJkLWZpbHRlcnMnLFxuICBEYXNoYm9hcmROYW1lID0gJ2Rhc2hib2FyZCcsXG4gIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSA9ICdkYXNoYm9hcmQtb2JqZWN0LXBvc2l0aW9uLWFuZC1zaXplLXVwZGF0ZScsXG4gIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUxpc3QgPSAnZGFzaGJvYXJkLW9iamVjdC1wb3NpdGlvbi1hbmQtc2l6ZS11cGRhdGUtbGlzdCcsXG4gIERhdGFSb3dJbmRleCA9ICdkYXRhLXJvdy1pbmRleCcsXG4gIERhdGFTY2hlbWEgPSAnZGF0YS1zY2hlbWEnLFxuICBEYXRhU291cmNlID0gJ2RhdGEtc291cmNlJyxcbiAgRGF0YVNvdXJjZURhdGFUYWJsZSA9ICdkYXRhLXNvdXJjZS1kYXRhLXRhYmxlJyxcbiAgRGF0YVNvdXJjZUlkID0gJ2RhdGEtc291cmNlLWlkJyxcbiAgRGF0YVNvdXJjZU5hbWUgPSAnZGF0YS1zb3VyY2UtbmFtZScsXG4gIERhdGFUYWJsZSA9ICdkYXRhLXRhYmxlJyxcbiAgRGF0YVRhYmxlUmVhZGVyID0gJ2RhdGEtdGFibGUtcmVhZGVyJyxcbiAgRGF0ZVJhbmdlVHlwZSA9ICdkYXRlLXJhbmdlLXR5cGUnLFxuICBEZWx0YVRpbWVNcyA9ICdkZWx0YS10aW1lLW1zJyxcbiAgRGltVmFsU2VsZWN0aW9uTW9kZWxzID0gJ2RpbWVuc2lvblZhbHVlU2VsZWN0aW9uTW9kZWxzJyxcbiAgRG9tYWluVHlwZSA9ICdkb21haW4tdHlwZScsXG5cbiAgRW1iZWRkaW5nQWJzdHJhY3RRdWVyeSA9ICdlbWJlZGRpbmctYWJzdHJhY3QtcXVlcnknLFxuICBFbWJlZGRpbmdCb290c3RyYXBJbmZvID0gJ2VtYmVkZGluZy1ib290c3RyYXAtaW5mbycsXG4gIEV4cG9ydENyb3NzdGFiU2hlZXRNYXAgPSAnZXhwb3J0LWNyb3NzdGFiLXNoZWV0LW1hcCcsXG4gIEV4cG9ydEZpbGUgPSAnZXhwb3J0LWZpbGUnLFxuICBFeHBvcnRPcmlnaW5VcmwgPSAnZXhwb3J0LW9yaWdpbi11cmwnLFxuICBFeHBvcnRQZGZPcHRpb25zID0gJ2V4cG9ydC1wZGYtb3B0aW9ucycsXG4gIEV4dGVuc2lvbkJvb3RzdHJhcEluZm8gPSAnZXh0ZW5zaW9uLWJvb3RzdHJhcC1pbmZvJyxcbiAgRXh0ZW5zaW9uQ29udGV4dE1lbnVJZHMgPSAnZXh0ZW5zaW9uLWNvbnRleHQtbWVudS1pZHMnLFxuICBFeHRlbnNpb25EaWFsb2dIID0gJ2V4dGVuc2lvbi1kaWFsb2ctaGVpZ2h0JyxcbiAgRXh0ZW5zaW9uRGlhbG9nUGF5bG9hZCA9ICdleHRlbnNpb24tZGlhbG9nLXBheWxvYWQnLFxuICBFeHRlbnNpb25EaWFsb2dSZXN1bHQgPSAnZXh0ZW5zaW9uLWRpYWxvZy1yZXN1bHQnLFxuICBFeHRlbnNpb25EaWFsb2dTdHlsZSA9ICdleHRlbnNpb24tZGlhbG9nLXN0eWxlJyxcbiAgRXh0ZW5zaW9uRGlhbG9nVXJsID0gJ2V4dGVuc2lvbi1kaWFsb2ctdXJsJyxcbiAgRXh0ZW5zaW9uRGlhbG9nVyA9ICdleHRlbnNpb24tZGlhbG9nLXdpZHRoJyxcbiAgRXh0ZW5zaW9uTG9jYXRvciA9ICdleHRlbnNpb24tbG9jYXRvcicsXG4gIEV4dGVuc2lvblNldHRpbmdzSW5mbyA9ICdleHRlbnNpb24tc2V0dGluZ3MtaW5mbycsXG4gIEV4dGVuc2lvblpvbmVJZCA9ICdleHRlbnNpb24tem9uZS1pZCcsXG4gIEV4dGVybmFsTWVudURlc2NyaXB0aW9uID0gJ2V4dGVybmFsLW1lbnUtZGVzY3JpcHRpb24nLFxuICBFeHRlcm5hbE1lbnVIZWFkZXIgPSAnZXh0ZXJuYWwtbWVudS1oZWFkZXInLFxuICBFeHRlcm5hbE1lbnVJdGVtRGlzcGxheU5hbWUgPSAnZXh0ZXJuYWwtbWVudS1pdGVtLWRpc3BsYXktbmFtZScsXG4gIEV4dGVybmFsTWVudUl0ZW1JZCA9ICdleHRlcm5hbC1tZW51LWl0ZW0taWQnLFxuXG4gIEZpZWxkID0gJ2ZpZWxkJyxcbiAgRmllbGRJZCA9ICdmaWVsZC1pZCcsXG4gIEZpZWxkTmFtZSA9ICdmaWVsZC1uYW1lJyxcbiAgRmlsdGVyTGV2ZWxzID0gJ2ZpbHRlci1sZXZlbHMnLFxuICBGaWx0ZXJSYW5nZU1heCA9ICdmaWx0ZXItcmFuZ2UtbWF4JyxcbiAgRmlsdGVyUmFuZ2VNaW4gPSAnZmlsdGVyLXJhbmdlLW1pbicsXG4gIEZpbHRlclJhbmdlTnVsbE9wdGlvbiA9ICdmaWx0ZXItcmFuZ2UtbnVsbC1vcHRpb24nLFxuICBGaWx0ZXJVcGRhdGVUeXBlID0gJ2ZpbHRlci11cGRhdGUtdHlwZScsXG4gIEZpbHRlclZhbHVlcyA9ICdmaWx0ZXItdmFsdWVzJyxcbiAgRm9udE5hbWVMaXN0SXRlbXMgPSAnZm9udC1uYW1lLWxpc3QtaXRlbXMnLFxuICBGb3JtYXR0ZWRUZXh0ID0gJ2Zvcm1hdHRlZC10ZXh0JyxcbiAgRnVuY3Rpb25OYW1lID0gJ2Z1bmN0aW9uLW5hbWUnLFxuXG4gIEhpZXJWYWxTZWxlY3Rpb25Nb2RlbHMgPSAnaGllcmFyY2hpY2FsVmFsdWVTZWxlY3Rpb25Nb2RlbHMnLFxuICBIaWdobGlnaHRlZERhdGEgPSAnaGlnaGxpZ2h0ZWQtZGF0YScsXG4gIEhvdmVyVHVwbGVJbnRlcmFjdGlvbiA9ICdob3Zlci10dXBsZS1pbnRlcmFjdGlvbicsXG5cbiAgSWdub3JlQWxpYXNlcyA9ICdpZ25vcmUtYWxpYXNlcycsXG4gIElnbm9yZVNlbGVjdGlvbiA9ICdpZ25vcmUtc2VsZWN0aW9uJyxcbiAgSW5jbHVkZUFsbENvbHVtbnMgPSAnaW5jbHVkZS1hbGwtY29sdW1ucycsXG4gIEludmFsaWRBZ2dGaWVsZE5hbWUgPSAnaW52YWxpZC1hZ2ctZmllbGQtbmFtZScsXG4gIEludmFsaWREYXRlcyA9ICdpbnZhbGlkLWRhdGVzJyxcbiAgSW52YWxpZEZpZWxkQ2FwdGlvbiA9ICdpbnZhbGlkLWZpZWxkLWNhcHRpb24nLFxuICBJbnZhbGlkRmllbGRzID0gJ2ludmFsaWQtZmllbGRzJyxcbiAgSW52YWxpZFZhbHVlcyA9ICdpbnZhbGlkLXZhbHVlcycsXG4gIElzRXhjbHVkZU1vZGUgPSAnaXMtZXhjbHVkZScsXG4gIElzRXh0ZW5zaW9uRGlhbG9nID0gJ2lzLWV4dGVuc2lvbi1kaWFsb2cnLFxuXG4gIEpvaW5EZXNjcmlwdGlvbiA9ICdqb2luLWRlc2NyaXB0aW9uJyxcblxuICBMb2dpY2FsVGFibGVJZCA9ICdsb2dpY2FsLXRhYmxlLWlkJyxcbiAgTG9naWNhbFRhYmxlSW5mb0xpc3QgPSAnbG9naWNhbC10YWJsZS1pbmZvLWxpc3QnLFxuXG4gIE1heEhlaWdodCA9ICdtYXgtaGVpZ2h0JyxcbiAgTWF4Um93cyA9ICdtYXgtcm93cycsXG4gIE1heFdpZHRoID0gJ21heC13aWR0aCcsXG4gIE1pbkhlaWdodCA9ICdtaW4taGVpZ2h0JyxcbiAgTWluV2lkdGggPSAnbWluLXdpZHRoJyxcblxuICBQYWdlUm93Q291bnQgPSAncGFnZS1yb3ctY291bnQnLFxuICBQYXJhbWV0ZXJDYXB0aW9uID0gJ3BhcmVtZXRlci1jYXB0aW9uJyxcbiAgUGFyYW1ldGVyRXJyb3IgPSAncGFyYW1ldGVyLWVycm9yJyxcbiAgUGFyYW1ldGVyRmllbGROYW1lID0gJ3BhcmFtZXRlci1maWVsZC1uYW1lJyxcbiAgUGFyYW1ldGVySW5mbyA9ICdwYXJhbWV0ZXItaW5mbycsXG4gIFBhcmFtZXRlckluZm9zID0gJ3BhcmFtZXRlci1pbmZvcycsXG4gIFBhcmFtZXRlclZhbHVlID0gJ3BhcmFtZXRlci12YWx1ZScsXG4gIFBlcmlvZFR5cGUgPSAncGVyaW9kLXR5cGUnLFxuXG4gIFF1YW50aXRhdGl2ZURvbWFpbiA9ICdxdWFudGl0YXRpdmUtZG1haW4nLFxuICBRdWFudFJhbmdlU2VsZWN0aW9uTW9kZWxzID0gJ3F1YW50YXRpdmVSYW5nZVNlbGVjdGlvbk1vZGVscycsXG5cbiAgUmFuZ2VOID0gJ3JhbmdlLW4nLFxuICBSZXBsYXlTcGVlZCA9ICdyZXBsYXktc3BlZWQnLFxuXG4gIFNlbGVjdGVkRGF0YSA9ICdzZWxlY3RlZC1kYXRhJyxcbiAgU2VsZWN0ZWRTaGVldE5hbWVzID0gJ3NlbGVjdGVkLXNoZWV0LW5hbWVzJyxcbiAgU2VsZWN0aW9uID0gJ3NlbGVjdGlvbicsXG4gIFNlbGVjdGlvbkxpc3QgPSAnc2VsZWN0aW9uLWxpc3QnLFxuICBTZWxlY3Rpb25VcGRhdGVUeXBlID0gJ3NlbGVjdGlvblVwZGF0ZVR5cGUnLFxuICBTZWxlY3RUdXBsZXNJbnRlcmFjdGlvbiA9ICdzZWxlY3QtdHVwbGVzLWludGVyYWN0aW9uJyxcbiAgU2VuZE5vdGlmaWNhdGlvbnMgPSAnc2VuZC1ub3RpZmljYXRpb25zJyxcbiAgU2V0dGluZ3NWYWx1ZXMgPSAnc2V0dGluZ3MtdmFsdWVzJyxcbiAgU2hhcmVkRmlsdGVyU2hlZXRzID0gJ3NoYXJlZC1maWx0ZXItc2hlZXRzJyxcbiAgU2hhcmVkRmlsdGVyc0luZm8gPSAnc2hhcmVkLWZpbHRlcnMtaW5mbycsXG4gIFNoZWV0SWRlbnRpZmllciA9ICdzaGVldC1pZGVudGlmaWVyJyxcbiAgU2hlZXROYW1lID0gJ3NoZWV0LW5hbWUnLFxuICBTaGVldFBhdGggPSAnc2hlZXQtcGF0aCcsXG4gIFNob3VsZFJlZnJlc2hEUyA9ICdzaG91bGQtcmVmcmVzaC1kcycsXG4gIFNob3dEYXRhVGFibGVGb3JtYXQgPSAnc2hvdy1kYXRhLXRhYmxlLWZvcm1hdCcsXG4gIFN0YXRlID0gJ3N0YXRlJyxcbiAgU3RvcnlQb2ludEluZGV4ID0gJ3N0b3J5LXBvaW50LWluZGV4JyxcbiAgU3RvcnlQb2ludEluZm8gPSAnc3RvcnktcG9pbnQtaW5mbycsXG4gIFN3aXRjaFRvU2hlZXROYW1lID0gJ3N3aXRjaC10by1zaGVldC1uYW1lJyxcblxuICBUYXJnZXRQb2ludCA9ICd0YXJnZXQtcG9pbnQnLFxuICBUZXN0Q29udmVyc2lvblBhcmFtZXRlciA9ICd0ZXN0LWNvbnZlcnNpb24tcGFyYW1ldGVyJyxcbiAgVGV4dCA9ICdmb3JtYXR0ZWQtdGV4dCcsXG4gIFRvb2x0aXBDb250ZXh0ID0gJ3Rvb2x0aXAtY29udGV4dCcsXG5cbiAgVW5kZXJseWluZ0RhdGFUYWJsZSA9ICd1bmRlcmx5aW5nLWRhdGEtdGFibGUnLFxuICBVbmRlcmx5aW5nU3VtbWFyeURhdGFUYWJsZSA9ICd1bmRlcmx5aW5nLXN1bW1hcnktZGF0YS10YWJsZScsXG4gIFVybCA9ICd1cmwnLFxuICBVc2VUYWJEZWxpbWl0ZXJzID0gJ3VzZS10YWItZGVsaW1pdGVycycsXG5cbiAgVmlld0RhdGFUYWJsZUNhY2hlSWQgPSAndmlldy1kYXRhLXRhYmxlLWNhY2hlLWlkJyxcbiAgVmlld0RhdGFUYWJsZUlkID0gJ3ZpZXctZGF0YS10YWJsZS1pZCcsXG4gIFZpc3VhbElkID0gJ3Zpc3VhbC1pZCcsXG4gIFZpc3VhbFNwZWNpZmljYXRpb24gPSAndmlzdWFsLXNwZWNpZmljYXRpb24nLFxuICBWaXpBUElJbnB1dEpzb24gPSAndml6YXBpLWlucHV0LWpzb24nLFxuICBWaXpBUElTdGF0ZVdpdGhEYXRhTW9kZWwgPSAndml6YXBpLXN0YXRlLXdpdGgtZGF0YS1tb2RlbCcsXG4gIFZpekFQSVN0YXRlV2FybmluZ01zZyA9ICd2aXphcGktc3RhdGUtd2FybmluZy1tc2cnLFxuICBWaXpBUElTVkcgPSAndml6YXBpLXN2ZycsXG5cbiAgV29ya3NoZWV0TmFtZSA9ICd3b3Jrc2hlZXQtbmFtZScsXG4gIFdvcmtzaGVldEZpbHRlcnMgPSAnd29ya3NoZWV0LWZpbHRlcnMnLFxuXG4gIFpvbmVJZHNWaXNpYmlsaXR5TWFwID0gJ3pvbmUtaWRzLXZpc2liaWxpdHktbWFwJyxcbn1cbiIsIi8vIERlY2xhcmUgdGhpcyBrZXkgdHlwZSBhbmQgZXhwb3J0IHRoZSBOb3RpZmljYXRpb25JZCB0byBtYWtlIHRoaXMgYmVoYXZlIGxpa2UgYSBzdHJpbmcgZW51bS5cbi8vXG4vLyBQTEVBU0UgS0VFUCBJTiBBTFBIQUJFVElDQUwgT1JERVIuIFRoaXMgaGVscHMgd2l0aCB2aXN1YWxseSBmaW5kaW5nIGVudHJpZXMsIGtub3dpbmcgd2hlcmUgdG8gcHV0XG4vLyBuZXcgb25lcywgYW5kIG1lcmdlIGNvbmZsaWN0cy5cbmV4cG9ydCBlbnVtIFZlcmJJZCB7XG4gIEFjdGl2YXRlTmV4dFN0b3J5UG9pbnQgPSAnYWN0aXZhdGUtbmV4dC1zdG9yeS1wb2ludCcsXG4gIEFjdGl2YXRlUHJldmlvdXNTdG9yeVBvaW50ID0gJ2FjdGl2YXRlLXByZXZpb3VzLXN0b3J5LXBvaW50JyxcbiAgQWN0aXZhdGVTaGVldCA9ICdhY3RpdmF0ZVNoZWV0JyxcbiAgQWN0aXZhdGVTdG9yeVBvaW50ID0gJ2FjdGl2YXRlLXN0b3J5LXBvaW50JyxcbiAgQXBwZW5kRXh0ZXJuYWxNZW51SXRlbSA9ICdhcHBlbmQtZXh0ZXJuYWwtbWVudS1pdGVtJyxcbiAgQXBwbHlDYXRlZ29yaWNhbEZpbHRlciA9ICdjYXRlZ29yaWNhbC1maWx0ZXInLFxuICBBcHBseVJhbmdlRmlsdGVyID0gJ3JhbmdlLWZpbHRlcicsXG4gIEFwcGx5UmVsYXRpdmVEYXRlRmlsdGVyID0gJ2FwcGx5LXJlbGF0aXZlLWRhdGUtRmlsdGVyJyxcbiAgQXV0aGVudGljYXRlID0gJ2F1dGhlbnRpY2F0ZScsXG5cbiAgQmxvY2tFeHRlbnNpb24gPSAnYmxvY2stZXh0ZW5zaW9uJyxcblxuICBDaGFuZ2VQYXJhbWV0ZXJWYWx1ZSA9ICdjaGFuZ2UtcGFyYW1ldGVyLXZhbHVlJyxcbiAgQ2hhbmdlU2hhcmVkRmlsdGVyID0gJ2NoYW5nZS1zaGFyZWQtZmlsdGVyJyxcbiAgQ2xlYXJGaWx0ZXIgPSAnY2xlYXItZmlsdGVyJyxcbiAgQ2xlYXJTZWxlY3RlZE1hcmtzID0gJ2NsZWFyLXNlbGVjdGVkLW1hcmtzJyxcbiAgQ2xvc2VEaWFsb2cgPSAnY2xvc2UtZGlhbG9nJyxcbiAgQ3JlYXRlQW5ub3RhdGlvbiA9ICdjcmVhdGUtYW5ub3RhdGlvbicsXG5cbiAgRGFzaGJvYXJkQ2F0ZWdvcmljYWxGaWx0ZXIgPSAnZGFzaGJvYXJkLWNhdGVnb3JpY2FsLWZpbHRlcicsXG4gIERpc3BsYXlEaWFsb2cgPSAnZGlzcGxheS1kaWFsb2cnLFxuICBEb3dubG9hZFdvcmtib29rID0gJ2Rvd25sb2FkLXdvcmtib29rJyxcblxuICBFeGVjdXRlRXh0ZXJuYWxNZW51SXRlbSA9ICdleGVjdXRlLWV4dGVybmFsLW1lbnUtaXRlbScsXG4gIEV4cG9ydENyb3NzdGFiID0gJ2V4cG9ydC1jcm9zc3RhYicsXG4gIEV4cG9ydENyb3NzdGFiQ3N2RG93bmxvYWQgPSAnZXhwb3J0LWNyb3NzdGFiLWNzdi1kb3dubG9hZCcsXG4gIEV4cG9ydENyb3NzdGFiRXhjZWxEb3dubG9hZCA9ICdleHBvcnQtY3Jvc3N0YWItZXhjZWwtZG93bmxvYWQnLFxuICBFeHBvcnREYXRhID0gJ2V4cG9ydC1kYXRhJyxcbiAgRXhwb3J0RGF0YURvd25sb2FkID0gJ2V4cG9ydC1kYXRhLWRvd25sb2FkJyxcbiAgRXhwb3J0SW1hZ2UgPSAnZXhwb3J0LWltYWdlJyxcbiAgRXhwb3J0UGRmID0gJ2V4cG9ydC1wZGYnLFxuICBFeHBvcnRQZGZEb3dubG9hZCA9ICdleHBvcnQtcGRmLWRvd25sb2FkJyxcbiAgRXhwb3J0UG93ZXJwb2ludCA9ICdleHBvcnQtcG93ZXJwb2ludCcsXG4gIEV4cG9ydFBvd2VycG9pbnREb3dubG9hZCA9ICdleHBvcnQtcG93ZXJwb2ludC1kb3dubG9hZCcsXG5cbiAgRmluZFBhcmFtZXRlciA9ICdmaW5kLXBhcmFtZXRlcicsXG5cbiAgR2V0QWN0aXZlVGFibGVzID0gJ2dldC1hY3RpdmUtdGFibGVzJyxcbiAgR2V0QWxsRGF0YVNvdXJjZXMgPSAnZ2V0LWFsbC1kYXRhLXNvdXJjZXMnLFxuICBHZXRBbm5vdGF0aW9ucyA9ICdnZXQtYW5ub3RhdGlvbnMnLFxuICBHZXRDYXRlZ29yaWNhbERvbWFpbiA9ICdnZXQtY2F0ZWdvcmljYWwtZG9tYWluJyxcbiAgR2V0Q29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyaWVzID0gJ2dldC1jb25uZWN0aW9uLWRlc2NyaXB0aW9uLXN1bW1hcmllcycsXG4gIEdldEN1cnJlbnRTcmMgPSAnZ2V0LWN1cnJlbnQtc3JjJyxcbiAgR2V0Q3VzdG9tVmlld3MgPSAnZ2V0LWN1c3RvbS12aWV3cycsXG4gIEdldERhc2hib2FyZEZpbHRlcnMgPSAnZ2V0LWRhc2hib2FyZC1maWx0ZXJzJyxcbiAgR2V0RGF0YVNvdXJjZSA9ICdnZXQtZGF0YXNvdXJjZScsXG4gIEdldERhdGFTb3VyY2VEYXRhID0gJ2dldC1kYXRhc291cmNlLWRhdGEnLFxuICBHZXREYXRhU291cmNlcyA9ICdnZXQtZGF0YS1zb3VyY2VzJyxcbiAgR2V0RGF0YVN1bW1hcnlEYXRhID0gJ2dldC1zdW1tYXJ5LWRhdGEnLFxuICBHZXREYXRhU3VtbWFyeURhdGFSZWFkZXIgPSAnZ2V0LXN1bW1hcnktZGF0YS1yZWFkZXInLFxuICBHZXREYXRhVGFibGVSZWFkZXJQYWdlID0gJ2dldC1kYXRhLXRhYmxlLXJlYWRlci1wYWdlJyxcbiAgR2V0RW1iZWRkaW5nQWJzdHJhY3RRdWVyeVdpdGhEYXRhTW9kZWwgPSAnZ2V0LWVtYmVkZGluZy1hYnN0cmFjdC1xdWVyeS13aXRoLWRhdGEtbW9kZWwnLFxuICBHZXRFbWJlZGRpbmdDbGllbnRJbmZvID0gJ2dldC1lbWJlZGRpbmctY2xpZW50LWluZm8nLFxuICBHZXRWaXpTdGF0ZVdpdGhEYXRhTW9kZWwgPSAnZ2V0LXZpei1zdGF0ZS13aXRoLWRhdGEtbW9kZWwnLFxuICBHZXRFeHBvcnRDcm9zc3RhYlNoZWV0TWFwID0gJ2dldC1leHBvcnQtY3Jvc3N0YWItc2hlZXQtbWFwJyxcbiAgR2V0RXhwb3J0UGRmT3B0aW9ucyA9ICdnZXQtZXhwb3J0LXBkZi1vcHRpb25zJyxcbiAgR2V0RmllbGQgPSAnZ2V0LWZpZWxkJyxcbiAgR2V0RmllbGRBbmREYXRhU291cmNlID0gJ2dldC1maWVsZC1hbmQtZGF0YXNvdXJjZScsXG4gIEdldFZpc3VhbFNwZWNpZmljYXRpb24gPSAnZ2V0LXZpc3VhbC1zcGVjaWZpY2F0aW9uJyxcbiAgR2V0RmlsdGVycyA9ICdnZXQtZmlsdGVycycsXG4gIEdldEZvbnRzID0gJ2dldC1mb250cycsXG4gIEdldEhpZ2hsaWdodGVkTWFya3MgPSAnZ2V0LWhpZ2hsaWdodGVkLW1hcmtzJyxcbiAgR2V0Sm9pbkRlc2NyaXB0aW9uID0gJ2dldC1qb2luLWRlc2NyaXB0aW9uJyxcbiAgR2V0TG9naWNhbFRhYmxlRGF0YSA9ICdnZXQtbG9naWNhbC10YWJsZS1kYXRhJyxcbiAgR2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlciA9ICdnZXQtbG9naWNhbC10YWJsZS1kYXRhLXJlYWRlcicsXG4gIEdldExvZ2ljYWxUYWJsZXMgPSAnZ2V0LWxvZ2ljYWwtdGFibGVzJyxcbiAgR2V0UGFyYW1ldGVyc0ZvclNoZWV0ID0gJ2dldC1wYXJhbWV0ZXJzLWZvci1zaGVldCcsXG4gIEdldFJhbmdlRG9tYWluID0gJ2dldC1yYW5nZS1kb21haW4nLFxuICBHZXRTZWxlY3RlZE1hcmtzID0gJ2dldC1zZWxlY3RlZC1tYXJrcycsXG4gIEdldFNoYXJlZEZpbHRlciA9ICdnZXQtc2hhcmVkLWZpbHRlcicsXG4gIEdldFVuZGVybHlpbmdEYXRhID0gJ2dldC11bmRlcmx5aW5nLWRhdGEnLFxuICBHZXRVbmRlcmx5aW5nVGFibGVEYXRhID0gJ2dldC11bmRlcmx5aW5nLXRhYmxlLWRhdGEnLFxuICBHZXRVbmRlcmx5aW5nVGFibGVEYXRhUmVhZGVyID0gJ2dldC11bmRlcmx5aW5nLXRhYmxlLWRhdGEtcmVhZGVyJyxcbiAgR2V0VW5kZXJseWluZ1RhYmxlcyA9ICdnZXQtdW5kZXJseWluZy10YWJsZXMnLFxuXG4gIEhpZXJhcmNoaWNhbEZpbHRlciA9ICdoaWVyYWNoaWNhbC1maWx0ZXInLFxuXG4gIEluaXRpYWxpemVFeHRlbnNpb24gPSAnaW5pdGlhbGl6ZS1leHRlbnNpb24nLFxuXG4gIE1vdmVBbmRSZXNpemVab25lcyA9ICdtb3ZlLWFuZC1yZXNpemUtem9uZXMnLFxuXG4gIFJhaXNlSG92ZXJUdXBsZU5vdGlmaWNhdGlvbiA9ICdyYWlzZS1ob3Zlci10dXBsZS1ub3RpZmljYXRpb24nLFxuICBSYWlzZVNlbGVjdFR1cGxlc05vdGlmaWNhdGlvbiA9ICdyYWlzZS1zZWxlY3QtdHVwbGVzLW5vdGlmaWNhdGlvbicsXG4gIFJlZG8gPSAncmVkbycsXG4gIFJlZnJlc2hEYXRhU291cmNlID0gJ3JlZnJlc2gtZGF0YS1zb3VyY2UnLFxuICBSZWxlYXNlRGF0YVRhYmxlUmVhZGVyID0gJ3JlbGVhc2UtZGF0YS10YWJsZS1yZWFkZXInLFxuICBSZW1vdmVBbm5vdGF0aW9uID0gJ3JlbW92ZS1hbm5vdGF0aW9uJyxcbiAgUmVtb3ZlQ3VzdG9tVmlldyA9ICdyZW1vdmUtY3VzdG9tLXZpZXcnLFxuICBSZW1vdmVFeHRlcm5hbE1lbnVJdGVtID0gJ3JlbW92ZS1leHRlcm5hbC1tZW51LWl0ZW0nLFxuICBSZW5hbWVFeHRlcm5hbE1lbnUgPSAncmVuYW1lLWV4dGVybmFsLW1lbnUnLFxuICBSZXBsYXlBbmltYXRpb24gPSAncmVwbGF5LWFuaW1hdGlvbicsXG4gIFJldmVydFN0b3J5UG9pbnQgPSAncmV2ZXJ0LXN0b3J5LXBvaW50JyxcbiAgUmV2ZXJ0V29ya2Jvb2sgPSAncmV2ZXJ0LXdvcmtib29rJyxcblxuICBTYXZlRXh0ZW5zaW9uU2V0dGluZ3MgPSAnc2F2ZS1leHRlbnNpb24tc2V0dGluZ3MnLFxuICBTYXZlV29ya2Jvb2tBc0N1c3RvbVZpZXcgPSAnc2F2ZS13b3JrYm9vay1hcy1jdXN0b20tdmlldycsXG4gIFNlbGVjdEJ5VmFsdWUgPSAnc2VsZWN0LWJ5LXZhbHVlJyxcbiAgU2V0QWN0aXZlQ3VzdG9tVmlld0FzRGVmYXVsdCA9ICdzZXQtYWN0aXZlLWN1c3RvbS12aWV3LWFzLWRlZmF1bHQnLFxuICBTZXRBdXRvVXBkYXRlID0gJ3NldC1hdXRvLXVwZGF0ZScsXG4gIFNldENsaWNrVGhyb3VnaCA9ICdzZXQtY2xpY2stdGhyb3VnaCcsXG4gIFNldFZpelN0YXRlV2l0aERhdGFNb2RlbCA9ICdzZXQtdml6LXN0YXRlLXdpdGgtZGF0YS1tb2RlbCcsXG4gIFNldFNoZWV0U2l6ZSA9ICdzZXQtc2hlZXQtc2l6ZScsXG4gIFNldFpvbmVWaXNpYmlsaXR5ID0gJ3NldC16b25lLXZpc2liaWxpdHknLFxuICBTaGFyZSA9ICdzaGFyZScsXG4gIFNob3dDdXN0b21WaWV3ID0gJ3Nob3ctY3VzdG9tLXZpZXcnLFxuXG4gIFRlc3RDb252ZXJzaW9uVmVyYiA9ICd0ZXN0LWNvbnZlcnNpb24tdmVyYicsXG5cbiAgVW5kbyA9ICd1bmRvJyxcbiAgVXBkYXRlQ3VzdG9tVmlldyA9ICd1cGRhdGUtY3VzdG9tLXZpZXcnLFxuXG4gIFZpekFQSSA9ICd2aXotYXBpJyxcbn1cbiIsImV4cG9ydCBlbnVtIEFza0RhdGFPcHRpb25OYW1lcyB7XG4gIHRva2VuID0gJ3Rva2VuJyxcbiAgb3JpZ2luID0gJ29yaWdpbicsXG4gIHNob3dFbWJlZCA9ICdzaG93RW1iZWQnLFxuICBzaG93UGluID0gJ3Nob3dQaW4nLFxuICBzaG93U2F2ZSA9ICdzaG93U2F2ZScsXG4gIHNob3dTaGFyZSA9ICdzaG93U2hhcmUnLFxuICBkZWJ1ZyA9ICc6anNkZWJ1ZycsXG4gIEFwaUlEID0gJzphcGlJRCcsXG4gIEFwaUV4dGVybmFsVmVyc2lvbiA9ICc6YXBpRXh0ZXJuYWxWZXJzaW9uJyxcbiAgQXBpSW50ZXJuYWxWZXJzaW9uID0gJzphcGlJbnRlcm5hbFZlcnNpb24nLFxuICBBc2tEYXRhV2ViQ29tcG9uZW50ID0gJzphc2tEYXRhV2ViQ29tcG9uZW50Jyxcbn1cbiIsImV4cG9ydCBlbnVtIFB1bHNlT3B0aW9uTmFtZXMge1xuICBlbWJlZCA9ICdlbWJlZCcsXG4gIHRva2VuID0gJ3Rva2VuJyxcbiAgZGlzYWJsZUV4cGxvcmVGaWx0ZXIgPSAnZGlzYWJsZUV4cGxvcmVGaWx0ZXInLFxuICBBcGlFeHRlcm5hbFZlcnNpb24gPSAnOmFwaUV4dGVybmFsVmVyc2lvbicsXG4gIEFwaUludGVybmFsVmVyc2lvbiA9ICc6YXBpSW50ZXJuYWxWZXJzaW9uJyxcbiAgUHVsc2VXZWJDb21wb25lbnQgPSAnOnB1bHNlV2ViQ29tcG9uZW50Jyxcbn1cbiIsIi8qKlxuICogVGhlc2Ugc3RyaW5ncyB3ZXJlICptYW51YWxseSBjb3BpZWQqIGZyb20gdGhlIHNlcnZlcixcbiAqIHdvcmtncm91cC9zcmMvc2lsb3MvdGFibGVhdS1zZXJ2ZXIvbGlicmFyaWVzL3RhYi1jb250cm9sbGVyLXZpenFsL3NyYy9jb20vdGFibGVhdXNvZnR3YXJlL1xuICogY29udHJvbGxlci92aXpxbC9jb25zdGFudHMvUGFyYW1ldGVyS2V5cy5qYXZhI0w5XG4gKiBzaG91bGQgYmUgZXhwb3J0ZWQgaW5zdGVhZFxuICogcGFyYW1ldGVycyB0aGF0IHZpenFsIHdpbGwgYWNjZXB0IGluIGFuIGVtYmVkZGluZyBVUkxcbiAqKi9cbmVudW0gVnFsUGFyYW1ldGVyTmFtZXMge1xuICBPTkUgPSAnMScsXG4gIEFMRVJUUyA9ICc6YWxlcnRzJyxcbiAgQUxJQVMgPSAnYWxpYXMnLFxuICBBTExPV19ERUZFUlJFRF9CT09UU1RSQVAgPSAnOmFsbG93RGVmZXJyZWRCb290c3RyYXAnLFxuICBBTExPV19BVVRPR0VOX1dPUktTSEVFVF9QSE9ORV9MQVlPVVRTID0gJ2FsbG93QXV0b2dlbldvcmtzaGVldFBob25lTGF5b3V0cycsXG4gIEFQSV9JRCA9ICc6YXBpSUQnLFxuICBBUFAgPSAnOmFwcCcsXG4gIEFUVEFDSE1FTlQgPSAnYXR0YWNobWVudCcsXG4gIElTX0lQQURfQVBQID0gJ2FwcCcsXG4gIEFOSU1BVEVfVFJBTlNJVElPTiA9ICc6YW5pbWF0ZV90cmFuc2l0aW9uJyxcbiAgQVNDRU5ESU5HID0gJ2FzY2VuZGluZycsXG4gIEFVVEhFTlRJQ0FUSU9OID0gJ2F1dGhlbnRpY2F0aW9uJyxcbiAgQVRUUklCVVRFUyA9ICdhdHRyaWJ1dGVzJyxcbiAgQVVUSE9SSU5HX1NIRUVUID0gJzphdXRoU2hlZXQnLFxuICBBWElTID0gJ2F4aXMnLFxuICBCT09UU1RSQVBfV0hFTl9OT1RJRklFRCA9ICc6Ym9vdHN0cmFwV2hlbk5vdGlmaWVkJyxcbiAgQlJPV1NFUl9CQUNLX0JVVFRPTl9VTkRPID0gJzpicm93c2VyQmFja0J1dHRvblVuZG8nLFxuICBCUk9XU0VSX1JFTkRFUklOR19PTiA9ICdpc0Jyb3dzZXJSZW5kZXJpbmcnLFxuICBCUk9XU0VSX1JFTkRFUklOR19USFJFU0hPTEQgPSAnYnJvd3NlclJlbmRlcmluZ1RocmVzaG9sZCcsXG4gIENIQVJTRVQgPSAnY2hhcnNldCcsXG4gIENMSUVOVF9ESU1FTlNJT04gPSAnY2xpZW50RGltZW5zaW9uJyxcbiAgQ0xJRU5UX0lQID0gJ2NsaWVudF9pcCcsXG4gIENMSUVOVF9OVU0gPSAnY2xpZW50TnVtJyxcbiAgQ09MT05fRU1CRURERUQgPSAnOmVtYmVkZGVkJyxcbiAgQ09MT05fTU9CSUxFID0gJzptb2JpbGUnLFxuICBDT0xPTl9ERUVQX0xJTktJTkdfRElTQUJMRUQgPSAnOmRlZXBMaW5raW5nRGlzYWJsZWQnLFxuICBDT0xPTl9XQVRFUk1BUksgPSAnOndhdGVybWFyaycsXG4gIENPTU1FTlRTID0gJzpjb21tZW50cycsXG4gIENPTU1FTlRJTkdfRU5BQkxFRCA9ICc6Y29tbWVudGluZ0VuYWJsZWQnLFxuICBDT01NRU5USU5HX01FTlRJT05TX0VOQUJMRUQgPSAnOmNvbW1lbnRpbmdNZW50aW9ucycsXG4gIENPTk5FQ1RJT04gPSAnY29ubmVjdGlvbicsXG4gIENSRUFURURfQllfRkVBVFVSRSA9ICdjcmVhdGVkQnlGZWF0dXJlJyxcbiAgQ1JZUFRFRF9QQVNTV09SRCA9ICdjcnlwdGVkJyxcbiAgQ1NTREVCVUcgPSAnOmNzc2RlYnVnJyxcbiAgQ1NWID0gJ2NzdicsXG4gIENVU1RPTV9WSUVXUyA9ICc6Y3VzdG9tVmlld3MnLFxuICBDViA9ICc6Y3YnLFxuICBDVl9JRCA9ICdjdklkJyxcbiAgREFTSEJPQVJEX1BPUlRfU0laRSA9ICdkYXNoYm9hcmRQb3J0U2l6ZScsXG4gIERBVEFfREVUQUlMUyA9ICc6ZGF0YURldGFpbHMnLFxuICBEQVRBU09VUkNFID0gJ2RhdGFzb3VyY2UnLFxuICBERUJVRyA9ICc6ZGVidWcnLFxuICBERUxBWSA9ICc6ZGVsYXknLFxuICBERVBUSCA9ICdkZXB0aCcsXG4gIERFVklDRV9UWVBFID0gJzpkZXZpY2UnLFxuICBERVZJQ0VfUElYRUxfUkFUSU8gPSAnZGV2aWNlUGl4ZWxSYXRpbycsXG4gIERFVklDRV9QUkVWSUVXX01PREUgPSAnOmRldmljZXByZXZpZXdtb2RlJyxcbiAgRElNRU5TSU9OUyA9ICc6ZGltZW5zaW9ucycsXG4gIERJU0FCTEVfU0hBUkVEX1NFU1NJT05TID0gJzpkaXNhYmxlX3NoYXJlZF9zZXNzaW9ucycsXG4gIERJU0FCTEVfVVJMX0FDVElPTlNfUE9QVVBTID0gJzpkaXNhYmxlVXJsQWN0aW9uc1BvcHVwcycsXG4gIERJUkVDVElPTiA9ICdkaXJlY3Rpb24nLFxuICBESVNQTEFZX09WRVJMQVkgPSAnOmRpc3BsYXlfb3ZlcmxheScsXG4gIERJU1BMQVlfU0hBUkUgPSAnOmRpc3BsYXlfc2hhcmUnLFxuICBESVNQTEFZX1NQSU5ORVIgPSAnOmRpc3BsYXlfc3Bpbm5lcicsXG4gIERJU1BMQVlfU1RBVElDX0lNQUdFID0gJzpkaXNwbGF5X3N0YXRpY19pbWFnZScsXG4gIERJU1BMQVlfVEFCUyA9ICdkaXNwbGF5X3RhYnMnLFxuICBESVNQTEFZX1ZJRVdfQ09VTlQgPSAnOmRpc3BsYXlfY291bnQnLFxuICBJR05PUkVfU1RJQ0tZX1NFU1NJT04gPSAnOmlnbm9yZV9zdGlja3lfc2Vzc2lvbicsXG4gIElOQ1JFTUVOVF9WSUVXX0NPVU5UID0gJzppbmNyZW1lbnRfdmlld19jb3VudCcsXG4gIERPQ01PREUgPSAnZG9jbW9kZScsXG4gIERPTUFJTiA9ICdkb21haW4nLFxuICBET19XT1JLID0gJ2RvX3dvcmsnLFxuICBEWCA9ICdkeCcsXG4gIERZID0gJ2R5JyxcbiAgRURJVF9EQVRBX0FMRVJUID0gJzplZGl0RGF0YUFsZXJ0JyxcbiAgRU1CRUQgPSAnOmVtYmVkJyxcbiAgRU1CRURERUQgPSAnZW1iZWRkZWQnLFxuICBFTkNSWVBURUQgPSAnZW5jcnlwdGVkJyxcbiAgQVBJX0VYVEVSTkFMX1ZFUlNJT04gPSAnOmFwaUV4dGVybmFsVmVyc2lvbicsXG4gIEFQSV9JTlRFUk5BTF9WRVJTSU9OID0gJzphcGlJbnRlcm5hbFZlcnNpb24nLFxuICBFWENMVURFID0gJ2V4Y2x1ZGUnLFxuICBFWFBPUlRfRk9STUFUID0gJzpleHBvcnRfZm9ybWF0JyxcbiAgRklFTEROQU1FID0gJ2ZpZWxkbmFtZScsXG4gIEZJRUxEX05BTUUgPSAnZmllbGRfbmFtZScsXG4gIEZJRUxEX1NFUCA9ICdmaWVsZF9zZXAnLFxuICBGSUxFID0gJ2ZpbGUnLFxuICBGSUxURVJfVElMRV9TSVpFID0gJ2ZpbHRlclRpbGVTaXplJyxcbiAgRk4gPSAnZm4nLFxuICBGT0NVUyA9ICdmb2N1cycsXG4gIEZPUkNFX0NBQ0hFID0gJ2ZvcmNlX2NhY2hlJyxcbiAgRk9STUFUID0gJ2Zvcm1hdCcsXG4gIEZPUk1BVF9EQVRBX1ZBTFVFX0xPQ0FMTFkgPSAnZm9ybWF0RGF0YVZhbHVlTG9jYWxseScsXG4gIEZST01fV0cgPSAnOmZyb21fd2cnLFxuICBHUkFQSFFMX0RBVEFCQVNFX0lEID0gJzpncmFwaFFMRGF0YWJhc2VJZCcsXG4gIEdSQVBIUUxfVEFCTEVfSUQgPSAnOmdyYXBoUUxUYWJsZUlkJyxcbiAgR1VJRCA9ICc6Z3VpZCcsXG4gIEggPSAnaCcsXG4gIEhJRERFTiA9ICdoaWRkZW4nLFxuICBISURFX0NMT1NFX0JVVFRPTiA9ICc6aGlkZUNsb3NlQnV0dG9uJyxcbiAgSElERV9FRElUX0JVVFRPTiA9ICc6aGlkZUVkaXRCdXR0b24nLFxuICBISURFX0VESVRfSU5fREVTS1RPUF9CVVRUT04gPSAnOmhpZGVFZGl0SW5EZXNrdG9wQnV0dG9uJyxcbiAgSElHSF9EUEkgPSAnOmhpZ2hkcGknLFxuICBJTUFHRV9TSVpFX0xJTUlUID0gJ2ltYWdlU2l6ZUxpbWl0JyxcbiAgVFJBTlNQQVJFTlRfTElORV9NQVJLU19MSU1JVCA9ICd0cmFuc3BhcmVudExpbmVNYXJrTGltaXQnLFxuICBDTElFTlRfUkVOREVSX1BJWEVMX0xJTUlUID0gJ2NsaWVudFJlbmRlclBpeGVsTGltaXQnLFxuICBJTiA9ICdpbicsXG4gIElOU1RBTkNFX0lEID0gJzppaWQnLFxuICBJU19HVUVTVF9SRURJUkVDVF9GUk9NX1ZJWlBPUlRBTCA9ICc6aXNHdWVzdFJlZGlyZWN0RnJvbVZpenBvcnRhbCcsXG4gIElTX01BUktfQU5JTUFUSU9OX0VOQUJMRUQgPSAnaXNNYXJrQW5pbWF0aW9uRW5hYmxlZCcsXG4gIElTX1ZJWlBPUlRBTCA9ICc6aXNWaXpQb3J0YWwnLFxuICBJTlBVVF8gPSAnaW5wdXRfc3RyaW5nJyxcbiAgSlNERUJVRyA9ICc6anNkZWJ1ZycsXG4gIEpTT04gPSAnanNvbicsXG4gIEpTT05fT05MWSA9ICc6anNvbk9ubHknLFxuICBLRUVQRklMRSA9ICdrZWVwZmlsZScsXG4gIEtFWSA9ICdrZXknLFxuICBMQU5HVUFHRSA9ICdsYW5ndWFnZScsXG4gIExBTkdVQUdFX1JFUVVFU1RFRCA9ICc6bGFuZ3VhZ2UnLFxuICBMSU5LVEFSR0VUID0gJzpsaW5rdGFyZ2V0JyxcbiAgTE9BRF9PUkRFUl9JRCA9ICc6bG9hZE9yZGVySUQnLCAvLyB1c2VkIGZvciBQdWJsaWNcbiAgTE9BRF9ORVdFU1RfUkVWSVNJT04gPSAnOmxvYWROZXdlc3RSZXZpc2lvbicsXG4gIExPQ0FMX1BBVEhTID0gJzpsb2NhbFBhdGhzJyxcbiAgTE9DQUxFID0gJ2xvY2FsZScsXG4gIExPQ0FUSU9OX0lEID0gJ2xvY2F0aW9uaWQnLFxuICBMT0NBVElPTl9UWVBFID0gJ2xvY2F0aW9udHlwZScsXG4gIFdPUktCT09LX0xPQ0FMRSA9ICd3b3JrYm9va0xvY2FsZScsXG4gIE1BWFJPV1MgPSAnbWF4cm93cycsXG4gIE1BWF9BR0UgPSAnbWF4QWdlJyxcbiAgTUFYX1JPV1MgPSAnbWF4Um93cycsXG4gIE1FVEhPRCA9ICdtZXRob2QnLFxuICBNT0JJTEUgPSAnbW9iaWxlJyxcbiAgTU9ESUZJRVIgPSAnbW9kaWZpZXInLFxuICBOQU1FID0gJ25hbWUnLFxuICBOQVZfVFlQRSA9ICduYXZUeXBlJyxcbiAgTkFWX1NSQyA9ICduYXZTcmMnLFxuICBOT0FUVEFDSE1FTlQgPSAnbm8tYXR0YWNobWVudCcsXG4gIE5PX09WRVJXUklURSA9ICdub19vdmVyd3JpdGUnLFxuICBPUEVOX0FVVEhPUklOR19JTl9UT1BfV0lORE9XID0gJzpvcGVuQXV0aG9yaW5nSW5Ub3BXaW5kb3cnLFxuICBPUEVOSURfSEQgPSAnOm9wZW5pZF9oZCcsXG4gIE9QRU5JRF9MT0dJTl9ISU5UID0gJzpvcGVuaWRfbG9naW5faGludCcsXG4gIE9BVVRIUkVRVUVTVCA9ICdvYXV0aHJlcXVlc3QnLFxuICBPQVVUSF9DUkVERU5USUFMX0lEUyA9ICdvYXV0aF9jcmVkZW50aWFsX2lkcycsXG4gIE9GRkxJTkVfTU9ERSA9ICc6b2ZmbGluZW1vZGUnLFxuICBPUklHSU4gPSAnOm9yaWdpbicsXG4gIE9WRVJMQVkgPSAnOm92ZXJsYXknLFxuICBQID0gJ3AnLFxuICBQQVRIID0gJ3BhdGgnLFxuICBQQU5FX1JFU09MVkVSX1ggPSAncGFuZVJlc29sdmVyWCcsXG4gIFBBTkVfUkVTT0xWRVJfWSA9ICdwYW5lUmVzb2x2ZXJZJyxcbiAgUEFSQU0gPSAncGFyYW0nLFxuICBQQVJFTlRfSUQgPSAncGFyZW50X2lkJyxcbiAgUEFTU1dPUkQgPSAncGFzc3dvcmQnLFxuICBQQVRURVJOID0gJ3BhdHRlcm4nLFxuICBQSVhFTF9SQVRJTyA9ICc6cGl4ZWxyYXRpbycsXG4gIFBSRUZJWCA9ICc6cHJlZml4JyxcbiAgUFJFVklFVyA9ICc6cHJldmlldycsXG4gIFBSSU1BUllfQ09OVEVOVF9VUkwgPSAncHJpbWFyeV9jb250ZW50X3VybCcsXG4gIFBST0pFQ1QgPSAncHJvamVjdCcsXG4gIFBST1RPQ09MID0gJ3Byb3RvY29sJyxcbiAgUFNFVURPID0gJzpwc2V1ZG8nLFxuICBRVUVSWSA9ICdxdWVyeScsXG4gIFIgPSAncicsXG4gIFJBTkdFX1RZUEUgPSAncmFuZ2VfdHlwZScsXG4gIFJFQ09SRF9TRVAgPSAncmVjb3JkX3NlcCcsXG4gIFJFQ09SRF9DTElFTlRfUEVSRk9STUFOQ0UgPSAnOnJlY29yZF9jbGllbnRfcGVyZm9ybWFuY2UnLFxuICBSRUNPUkRfUEVSRk9STUFOQ0UgPSAnOnJlY29yZF9wZXJmb3JtYW5jZScsXG4gIFJFQ09WRVJfT0xEX1NFU1NJT05fSUQgPSAnOnJlY292ZXJfb2xkX3Nlc3Npb25faWQnLFxuICBSRUNPVkVSX1NFU1NJT05fU1RBVEVfVElDS0VUUyA9ICc6cmVjb3Zlcl9zZXNzaW9uX3N0YXRlX3RpY2tldHMnLFxuICBSRUZSRVNIID0gJzpyZWZyZXNoJyxcbiAgUkVGUkVTSFVOTU9ESUZJRUQgPSAnOnJlZnJlc2h1bm1vZGlmaWVkJyxcbiAgUkVHSU9OID0gJ3JlZ2lvbicsXG4gIFJFTE9BRF9PTl9DVVNUT01fVklFV19TQVZFID0gJzpyZWxvYWRPbkN1c3RvbVZpZXdTYXZlJyxcbiAgUkVOREVSID0gJzpyZW5kZXInLFxuICBSRU5ERVJfTUFQU19DTElFTlRfU0lERSA9ICdyZW5kZXJNYXBzQ2xpZW50U2lkZScsXG4gIFJFVFJZID0gJzpyZXRyeScsXG4gIFJFVVNFID0gJ3JldXNlJyxcbiAgUkVVU0VfRk9SRVZFUiA9ICdyZXVzZV9mb3JldmVyJyxcbiAgUkVWRVJUID0gJzpyZXZlcnQnLFxuICBTQVZFX0RCX1BBU1NXT1JEUyA9ICdzYXZlX2RiX3Bhc3N3b3JkcycsXG4gIFNFTEVDVF9YID0gJ3NlbGVjdF94JyxcbiAgU0VMRUNUX1kgPSAnc2VsZWN0X3knLFxuICBTRVNTSU9OX0ZFQVRVUkVfUFJFRklYID0gJzpmZl8nLFxuICBTRVNTSU9OX0ZMQUdTID0gJzpzZXNzaW9uX2ZlYXR1cmVfZmxhZ3MnLFxuICBTSEFSRV9CVVRUT04gPSAnc2hhcmVfYnV0dG9uJyxcbiAgU0hFRVRfSUQgPSAnc2hlZXRfaWQnLFxuICBTSEFSRUQgPSAnc2hhcmVkJyxcbiAgU0hPV0FMTCA9ICdzaG93YWxsJyxcbiAgU0hPV19BUFBfQkFOTkVSID0gJzpzaG93QXBwQmFubmVyJyxcbiAgU0hPV19BU0tfREFUQSA9ICc6c2hvd0Fza0RhdGEnLFxuICBTSE9XX1BBUkFNUyA9ICdzaG93UGFyYW1zJyxcbiAgU0hPV19TSEFSRV9PUFRJT05TID0gJzpzaG93U2hhcmVPcHRpb25zJyxcbiAgU0laRSA9ICc6c2l6ZScsXG4gIFNPVVJDRSA9ICdzb3VyY2UnLFxuICBTVEFURSA9ICdzdGF0ZScsXG4gIFNUSUNLWV9TRVNTSU9OX0tFWSA9ICdzdGlja3lTZXNzaW9uS2V5JyxcbiAgU1VCU0NSSVBUSU9OUyA9ICc6c3Vic2NyaXB0aW9ucycsXG4gIFNVTU1BUlkgPSAnc3VtbWFyeScsXG4gIFNVUFBSRVNTX0RFRkFVTFRfRURJVF9CRUhBVklPUiA9ICc6c3VwcHJlc3NEZWZhdWx0RWRpdEJlaGF2aW9yJyxcbiAgU1lOQ19TRVNTSU9OID0gJzpzeW5jX3Nlc3Npb24nLFxuICBTWU5DX1NFU1NJT05fU1RBVEUgPSAnc3luY19zZXNzaW9uX3N0YXRlJyxcbiAgVEFCUyA9ICc6dGFicycsXG4gIFRBUkdFVCA9ICd0YXJnZXQnLFxuICBUQVJHRVRfU0lURSA9ICd0YXJnZXRfc2l0ZScsXG4gIFRPT0xCQVIgPSAnOnRvb2xiYXInLFxuICBUT09MVElQID0gJzp0b29sdGlwJyxcbiAgVFMgPSAndHMnLFxuICBVTkRFUkxZSU5HX1RBQkxFX0lEID0gJ3VuZGVybHlpbmdfdGFibGVfaWQnLFxuICBVTkRFUkxZSU5HX1RBQkxFX0NBUFRJT04gPSAndW5kZXJseWluZ190YWJsZV9jYXB0aW9uJyxcbiAgVVBEQVRFX1RZUEUgPSAndXBkYXRlX3R5cGUnLFxuICBVU0VfR1VFU1QgPSAnOnVzZUd1ZXN0JyxcbiAgVVNFX0lOTElORV9JTUFHRVMgPSAndXNlX2lubGluZV9pbWFnZXMnLFxuICBVU0VSQUdFTlQgPSAndXNlcmFnZW50JyxcbiAgVVNFUk5BTUUgPSAndXNlcm5hbWUnLFxuICBWQUxVRSA9ICd2YWx1ZScsXG4gIFZFUkJPU0VfTU9ERSA9ICd2ZXJib3NlTW9kZScsXG4gIFZJRVdfSUQgPSAndmlld3NfaWQnLFxuICBWSVpfU05BUFNIT1RfSUQgPSAndml6X3NuYXBzaG90X2lkJyxcbiAgVlcgPSAnOnZ3JyxcbiAgVyA9ICd3JyxcbiAgV09SS1NIRUVUX1BPUlRfU0laRSA9ICd3b3Jrc2hlZXRQb3J0U2l6ZScsXG4gIFdBVEVSTUFSSyA9ICd3YXRlcm1hcmsnLFxuICBXQVRFUk1BUktfTUFSR0lOID0gJzp3YXRlcm1hcmtfbWFyZ2luJyxcbiAgV0IgPSAnOndiJyxcbiAgV0hJQ0ggPSAnd2hpY2gnLFxuICBYID0gJ3gnLFxuICBZID0gJ3knLFxuICBaSUQgPSAnemlkJyxcbiAgWk9ORV9JRCA9ICd6b25lX2lkJyxcbiAgS0VZQ0hBSU5fVkVSU0lPTiA9ICdrZXljaGFpbl92ZXJzaW9uJyxcbiAgREFUQVNPVVJDRV9JRCA9ICdkYXRhc291cmNlX2lkJyxcbiAgREFUQVNPVVJDRV9OQU1FID0gJ2RhdGFzb3VyY2VfbmFtZScsXG4gIExFTlNfSUQgPSAnbGVuc19pZCcsXG4gIFdJRFRIID0gJ3dpZHRoJyxcbiAgSEVJR0hUID0gJ2hlaWdodCcsXG5cbiAgLy8gRGVmYXVsdCBMYXlvdXQgcGFyYW1zXG4gIExBWU9VVF9WSUVXUyA9ICd2aWV3cycsXG4gIExBWU9VVF9NRU5VUyA9ICdtZW51cycsXG4gIExBWU9VVF9HRU9NRVRSWSA9ICdnZW9tZXRyeScsXG4gIExBWU9VVF9QQUdFUyA9ICdwYWdlcycsXG4gIExBWU9VVF9DQUNIRVVSTCA9ICdjYWNoZXVybCcsXG4gIExBWU9VVF9TSEVFVCA9ICdzaGVldCcsXG4gIExBWU9VVF9ERVBUSCA9ICdkZXB0aCcsXG59XG5cbi8qKlxuICogcGFyYW1ldGVycyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gd29ya2luZyB3aXRoIFRhYmxlYXUgUHVibGljXG4gKiBtYXliZSBub3QgcmVhbGx5IG5lY2Vzc3J5IHRvIHNwbGl0IHRoZW0gb3V0XG4gKi9cbmVudW0gUHVibGljUGFyYW1ldGVyTmFtZXMge1xuICBTSE9XX1ZJWl9IT01FID0gJzpzaG93Vml6SG9tZScsXG4gIC8vIGRpc3BsYXkgdmlldyBjb3VudFxufVxuXG4vKipcbiAqIE1hcCB0aGUgcGFyYW1ldGVyIG5hbWVzIGFzIHVzZWQgaW4gdGhlIHVybCB0byB3aGF0IHdlIGNhbGwgdGhlbSBwdWJsaWNseSBpbiB0aGUgZW1iZWRkaW5nIGxpYnJhcnkuXG4gKiBUaGUgb25seSBwYXJhbWV0ZXJzIGxpc3RlZCBoZXJlIHNob3VsZCBiZSB0aGUgb25lcyB0aGF0IGdldCBzZW50IHRvIHZpenFsXG4gKiAgLSB0aGlzIHNob3VsZCBtYXRjaCB0aGUgaW50ZXJmYWNlIGF0IGV4dGVybmFsLWNvbnRyYWN0OlZpekludGVyZmFjZXM6Vml6U2V0dGluZ3NcbiAqL1xuZXhwb3J0IGVudW0gVml6T3B0aW9uTmFtZXMge1xuICAvLyBwdWJsaWNOYW1lID0gaW50ZXJuYWxTdHJpbmdWYWx1ZVxuICBTaXplID0gVnFsUGFyYW1ldGVyTmFtZXMuU0laRSxcbiAgRW1iZWQgPSBWcWxQYXJhbWV0ZXJOYW1lcy5FTUJFRCxcbiAgQXBpSW50ZXJuYWxWZXJzaW9uID0gVnFsUGFyYW1ldGVyTmFtZXMuQVBJX0lOVEVSTkFMX1ZFUlNJT04sXG4gIEFwaUV4dGVybmFsVmVyc2lvbiA9IFZxbFBhcmFtZXRlck5hbWVzLkFQSV9FWFRFUk5BTF9WRVJTSU9OLFxuICBTaG93Vml6SG9tZSA9IFB1YmxpY1BhcmFtZXRlck5hbWVzLlNIT1dfVklaX0hPTUUsXG4gIEpzZGVidWcgPSBWcWxQYXJhbWV0ZXJOYW1lcy5KU0RFQlVHLFxuICBCb290c3RyYXBXaGVuTm90aWZpZWQgPSBWcWxQYXJhbWV0ZXJOYW1lcy5CT09UU1RSQVBfV0hFTl9OT1RJRklFRCxcbiAgTmF2VHlwZSA9IFZxbFBhcmFtZXRlck5hbWVzLk5BVl9UWVBFLFxuICBOYXZTcmMgPSBWcWxQYXJhbWV0ZXJOYW1lcy5OQVZfU1JDLFxuICBkZWJ1ZyA9IFZxbFBhcmFtZXRlck5hbWVzLkpTREVCVUcsXG4gIEFwaUlEID0gVnFsUGFyYW1ldGVyTmFtZXMuQVBJX0lELFxuXG4gIGRpc2FibGVVcmxBY3Rpb25zUG9wdXBzID0gVnFsUGFyYW1ldGVyTmFtZXMuRElTQUJMRV9VUkxfQUNUSU9OU19QT1BVUFMsXG4gIGhpZGVUYWJzID0gVnFsUGFyYW1ldGVyTmFtZXMuVEFCUyxcbiAgdG9vbGJhciA9IFZxbFBhcmFtZXRlck5hbWVzLlRPT0xCQVIsXG4gIGRldmljZSA9IFZxbFBhcmFtZXRlck5hbWVzLkRFVklDRV9UWVBFLFxuICBpbnN0YW5jZUlkVG9DbG9uZSA9IFZxbFBhcmFtZXRlck5hbWVzLklOU1RBTkNFX0lELFxuICB0b3VjaE9wdGltaXplID0gVnFsUGFyYW1ldGVyTmFtZXMuTU9CSUxFLFxuICBoaWRlRWRpdEJ1dHRvbiA9IFZxbFBhcmFtZXRlck5hbWVzLkhJREVfRURJVF9CVVRUT04sXG4gIGhpZGVFZGl0SW5EZXNrdG9wQnV0dG9uID0gVnFsUGFyYW1ldGVyTmFtZXMuSElERV9FRElUX0lOX0RFU0tUT1BfQlVUVE9OLFxuICBzdXBwcmVzc0RlZmF1bHRFZGl0QmVoYXZpb3IgPSBWcWxQYXJhbWV0ZXJOYW1lcy5TVVBQUkVTU19ERUZBVUxUX0VESVRfQkVIQVZJT1IsXG4gIGhpZGVDbG9zZUJ1dHRvbiA9IFZxbFBhcmFtZXRlck5hbWVzLkhJREVfQ0xPU0VfQlVUVE9OLFxufVxuIiwiaW1wb3J0ICogYXMgZ3VpZCBmcm9tICdndWlkJztcbmltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBJTlRFUk5BTF9DT05UUkFDVF9WRVJTSU9OLCBNb2RlbCwgTm90aWZpY2F0aW9uSWQsIFZlcmJJZCwgVmVyc2lvbk51bWJlciB9IGZyb20gJy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2UvSW5pdGlhbGl6YXRpb25PcHRpb25zJztcbmltcG9ydCB7IENyb3NzRnJhbWVQcmVwYXJlZE1lc3NhZ2UgfSBmcm9tICcuL0Nyb3NzRnJhbWVQcmVwYXJlZE1lc3NhZ2UnO1xuaW1wb3J0IHtcbiAgaXNDb21tYW5kTWVzc2FnZSxcbiAgaXNDb21tYW5kUmVzcG9uc2VNZXNzYWdlLFxuICBpc0hhbmRzaGFrZU1lc3NhZ2UsXG4gIGlzSW5pdE1lc3NhZ2UsXG4gIGlzTWVzc2FnZSxcbiAgaXNOb3RpZmljYXRpb25NZXNzYWdlLFxufSBmcm9tICcuL01lc3NhZ2VUeXBlQ2hlY2tzJztcbmltcG9ydCB7XG4gIENvbW1hbmRNZXNzYWdlSGFuZGxlcixcbiAgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXIsXG4gIEhhbmRzaGFrZU1lc3NhZ2VIYW5kbGVyLFxuICBJbml0aWFsaXplTWVzc2FnZUhhbmRsZXIsXG4gIE5vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyLFxufSBmcm9tICcuL2ludGVyZmFjZS9NZXNzYWdlTGlzdGVuZXInO1xuaW1wb3J0IHtcbiAgQ29tbWFuZE1lc3NhZ2UsXG4gIENvbW1hbmRSZXNwb25zZU1lc3NhZ2UsXG4gIEhhbmRzaGFrZU1lc3NhZ2UsXG4gIEluaXRpYWxpemVNZXNzYWdlLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlVHlwZSxcbiAgTm90aWZpY2F0aW9uTWVzc2FnZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2UvTWVzc2FnZVR5cGVzJztcbmltcG9ydCB7IE1lc3NlbmdlciB9IGZyb20gJy4vaW50ZXJmYWNlL01lc3Nlbmdlcic7XG5pbXBvcnQgeyBQcmVwYXJlZE1lc3NhZ2UgfSBmcm9tICcuL2ludGVyZmFjZS9QcmVwYXJlZE1lc3NhZ2UnO1xuXG4vKipcbiAqIFRoZSBDcm9zc0ZyYW1lTWVzc2VuZ2VyIGlzIHRoZSBwcmltYXJ5IGV4cG9ydCBmcm9tIHRoZSBhcGktbWVzc2FnaW5nIG1vZHVsZS4gQW4gaW5zdGFuY2Ugb2ZcbiAqIHRoaXMgY2xhc3MgY2FuIGJlIGluc3RhbnRpYXRlZCBvbiBib3RoIHNpZGVzIG9mIGEgZnJhbWUgYm91bmRhcnkgdG8gZmFjaWxpdGF0ZSBjb21tdW5pY2F0aW9uXG4gKiBpbiBib3RoIGRpcmVjdGlvbnMgYmV0d2VlbiB0aGUgZnJhbWVzLiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYm90aCB0aGUgZGlzcGF0Y2hlciBhbmQgdGhlIGxpc3RlbmVyXG4gKiBwb3J0aW9ucywgYnV0IGRvZXNuJ3QgcmVxdWlyZSBjYWxsZXJzIHRvIGNhcmUgYWJvdXQgYm90aC5cbiAqL1xuZXhwb3J0IGNsYXNzIENyb3NzRnJhbWVNZXNzZW5nZXIgaW1wbGVtZW50cyBNZXNzZW5nZXIge1xuICBwcml2YXRlIHVucmVnaXN0ZXJGdW5jdGlvbj86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaW5pdGlhbGl6ZU1lc3NhZ2VIYW5kbGVyPzogSW5pdGlhbGl6ZU1lc3NhZ2VIYW5kbGVyO1xuICBwcml2YXRlIGNvbW1hbmRSZXNwb25zZU1lc3NhZ2VIYW5kbGVyPzogQ29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXI7XG4gIHByaXZhdGUgY29tbWFuZE1lc3NhZ2VIYW5kbGVyPzogQ29tbWFuZE1lc3NhZ2VIYW5kbGVyO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyPzogTm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXI7XG4gIHByaXZhdGUgaGFuZHNoYWtlTWVzc2FnZUhhbmRsZXI/OiBIYW5kc2hha2VNZXNzYWdlSGFuZGxlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDcm9zc0ZyYW1lTWVzc2VuZ2VyLiBJZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhlIENyb3NzRnJhbWVNZXNzZW5nZXIgYXMgYSBNZXNzYWdlTGlzdGVuZXIsXG4gICAqIGJlIHN1cmUgdG8gY2FsbCBTdGFydExpc3RlbmluZyBhbmQgcmVnaXN0ZXIgbWVzc2FnZSBoYW5kbGVycy5cbiAgICogQHBhcmFtIHRoaXNXaW5kb3cgVGhlIHdpbmRvdyBvYmplY3Qgd2hpY2ggdGhlIENyb3NzRnJhbWVNZXNzZW5nZXIgbGl2ZXMuIEFuIG9uTWVzc2FnZSBsaXN0ZW5lciB3aWxsIGJlIGFkZGVkIGhlcmUuXG4gICAqIEBwYXJhbSBbb3RoZXJXaW5kb3ddIE9wdGlvbmFsIG90aGVyV2luZG93IHdoaWNoIG1lc3NhZ2VzIHdpbGwgYmUgcG9zdGVkIHRvLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBkZWZpbmVkLCBpbmNvbWluZyBtZXNzYWdlcyBtdXN0IG9yaWdpbmF0ZSBmcm9tIG90aGVyV2luZG93IHRvIGJlIHBhc3NlZCBvblxuICAgKiBAcGFyYW0gW290aGVyV2luZG93T3JpZ2luXSBUaGUgdGFyZ2V0IG9yaWdpbiB3aGljaCBvdGhlcldpbmRvdyBtdXN0IGhhdmUgaW4gb3JkZXIgdG8gcmVjZWl2ZSBkaXNwYXRjaGVkIG1lc3NhZ2VzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIHdpbGwgYmUgc2VudCBhcyB0aGUgdGFyZ2V0T3JpZ2luIG9mIGEgcG9zdE1lc3NhZ2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvcG9zdE1lc3NhZ2UpXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSB0aGlzV2luZG93OiBXaW5kb3csIHByaXZhdGUgb3RoZXJXaW5kb3c/OiBXaW5kb3csIHByaXZhdGUgb3RoZXJXaW5kb3dPcmlnaW4/OiBzdHJpbmcpIHtcbiAgICAvLyBNYWtlIHN1cmUgdG8gY2FsbCBTdGFydExpc3RlbmluZ1xuICB9XG5cbiAgLy8vLy8gTWVzc2FnZUxpc3RlbmVyIEltcGxlbWVudGF0aW9uXG5cbiAgcHVibGljIHN0YXJ0TGlzdGVuaW5nKCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgYXJlIGxpc3RlbmluZywgaWYgbm90LCBob29rIHVwIGEgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGlmICghdGhpcy51bnJlZ2lzdGVyRnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IGJvdW5kSGFuZGxlciA9IHRoaXMub25NZXNzYWdlUmVjZWl2ZWQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudGhpc1dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgYm91bmRIYW5kbGVyLCB0cnVlKTtcbiAgICAgIHRoaXMudW5yZWdpc3RlckZ1bmN0aW9uID0gKCkgPT4gdGhpcy50aGlzV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBib3VuZEhhbmRsZXIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdG9wTGlzdGVuaW5nKCk6IHZvaWQge1xuICAgIC8vIFN0b3AgbGlzdGVuaW5nIGlmIHdlIGhhdmUgc3RhcnRlZCBsaXN0ZW5pbmdcbiAgICBpZiAodGhpcy51bnJlZ2lzdGVyRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMudW5yZWdpc3RlckZ1bmN0aW9uKCk7XG4gICAgICB0aGlzLnVucmVnaXN0ZXJGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0SW5pdGlhbGl6ZU1lc3NhZ2VIYW5kbGVyKGhhbmRsZXI/OiBJbml0aWFsaXplTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVNZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXIoaGFuZGxlcj86IENvbW1hbmRSZXNwb25zZU1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG4gICAgdGhpcy5jb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tbWFuZE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXI/OiBDb21tYW5kTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRNZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0Tm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIoaGFuZGxlcj86IE5vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0SGFuZHNoYWtlTWVzc2FnZUhhbmRsZXIoaGFuZGxlcj86IEhhbmRzaGFrZU1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kc2hha2VNZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICAvLy8vLyBNZXNzYWdlRGlzcGF0Y2hlciBJbXBsZW1lbnRhdGlvblxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYXBpVmVyc2lvbiBhcGktaW50ZXJuYWwtY29udHJhY3QtanMgdmVyc2lvbiAoZXhwb3J0ZWQgaW4gSnNBcGlJbnRlcm5hbENvbm50cmFjdClcbiAgICogQHBhcmFtIGNyb3NzRnJhbWVWZXJzaW9uIGNyb3NzZnJhbWUgbWVzc2FnaW5nIHZlcnNpb24gKGV4cG9ydGVkIGluIEpzQXBpSW50ZXJuYWxDb25udHJhY3QpXG4gICAqIEBwYXJhbSBvcHRpb25zIGFkZGl0aW9uYWwgb3B0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgYXQgaW5pdGlhbGl6YXRpb24gKGluZm9ybWF0aW9uIGFib3V0IHRoZSB2ZXJzaW9uIG9mXG4gICAqICAgICAgICAgICAgICAgIGV4dGVybmFsIGJlaW5nIHVzZWQgZm9yIGV4YW1wbGUpXG4gICAqL1xuICBwdWJsaWMgcHJlcGFyZUluaXRpYWxpemF0aW9uTWVzc2FnZShcbiAgICBhcGlWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICAgIGNyb3NzRnJhbWVWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICAgIG9wdGlvbnM/OiBJbml0aWFsaXphdGlvbk9wdGlvbnMsXG4gICk6IFByZXBhcmVkTWVzc2FnZSB7XG4gICAgY29uc3QgbWVzc2FnZTogSW5pdGlhbGl6ZU1lc3NhZ2UgPSB7XG4gICAgICBtc2dHdWlkOiBndWlkLnJhdygpLFxuICAgICAgbXNnVHlwZTogTWVzc2FnZVR5cGUuSW5pdGlhbGl6ZSxcbiAgICAgIGNyb3NzRnJhbWVWZXJzaW9uOiBjcm9zc0ZyYW1lVmVyc2lvbixcbiAgICAgIGFwaVZlcnNpb246IGFwaVZlcnNpb24sXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVwYXJlQ29tbWFuZE1lc3NhZ2UodmVyYklkOiBWZXJiSWQsIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogUHJlcGFyZWRNZXNzYWdlIHtcbiAgICBjb25zdCBtZXNzYWdlOiBDb21tYW5kTWVzc2FnZSA9IHtcbiAgICAgIG1zZ0d1aWQ6IGd1aWQucmF3KCksXG4gICAgICBtc2dUeXBlOiBNZXNzYWdlVHlwZS5Db21tYW5kLFxuICAgICAgdmVyYklkOiB2ZXJiSWQsXG4gICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVwYXJlQ29tbWFuZFJlc3BvbnNlTWVzc2FnZShjb21tYW5kR3VpZDogc3RyaW5nLCBkYXRhOiBNb2RlbCB8IHVuZGVmaW5lZCwgZXJyb3I6IE1vZGVsIHwgdW5kZWZpbmVkKTogUHJlcGFyZWRNZXNzYWdlIHtcbiAgICBjb25zdCBtZXNzYWdlOiBDb21tYW5kUmVzcG9uc2VNZXNzYWdlID0ge1xuICAgICAgbXNnR3VpZDogZ3VpZC5yYXcoKSxcbiAgICAgIG1zZ1R5cGU6IE1lc3NhZ2VUeXBlLkNvbW1hbmRSZXNwb25zZSxcbiAgICAgIGNvbW1hbmRHdWlkOiBjb21tYW5kR3VpZCxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgLy8gc3RyaW5naWZ5IGVycm9yIG9iamVjdCB0byByZW1vdmUgdW5zZXJpYWxpemFibGUgZmllbGRzIGxpa2UgZnVuY3Rpb25zIGFuZCBwcmV2ZW50IHNlcmlhbGl6YXRpb24gZXJyb3JzXG4gICAgICBtZXNzYWdlLmVycm9yID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByZXBhcmVNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG5cbiAgcHVibGljIHByZXBhcmVOb3RpZmljYXRpb25NZXNzYWdlKG5vdGlmaWNhdGlvbklkOiBOb3RpZmljYXRpb25JZCwgZGF0YTogTW9kZWwpOiBQcmVwYXJlZE1lc3NhZ2Uge1xuICAgIGNvbnN0IG1lc3NhZ2U6IE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSB7XG4gICAgICBtc2dHdWlkOiBndWlkLnJhdygpLFxuICAgICAgbXNnVHlwZTogTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uLFxuICAgICAgbm90aWZpY2F0aW9uSWQ6IG5vdGlmaWNhdGlvbklkLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZUFja01lc3NhZ2UoKTogUHJlcGFyZWRNZXNzYWdlIHtcbiAgICBjb25zdCBtZXNzYWdlOiBIYW5kc2hha2VNZXNzYWdlID0ge1xuICAgICAgbXNnR3VpZDogZ3VpZC5yYXcoKSxcbiAgICAgIG1zZ1R5cGU6IE1lc3NhZ2VUeXBlLkFjayxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbjogSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTixcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBwZW5kaW5nIG1lc3NhZ2UgZm9yIHNlbmRpbmcgYW5kIHJldHVybnMgdGhlIHByZXBhcmVkIG1lc3NhZ2VcbiAgICpcbiAgICogQHBhcmFtIG1zZyBUaGUgbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoaXMub3RoZXJXaW5kb3dcbiAgICogQHJldHVybnMgVGhlIHByZXBhcmVkIG1lc3NhZ2VcbiAgICovXG4gIHByaXZhdGUgcHJlcGFyZU1lc3NhZ2UobXNnOiBNZXNzYWdlKTogUHJlcGFyZWRNZXNzYWdlIHtcbiAgICBpZiAoIXRoaXMub3RoZXJXaW5kb3cgfHwgIXRoaXMub3RoZXJXaW5kb3dPcmlnaW4pIHtcbiAgICAgIHRocm93ICdPdGhlciB3aW5kb3cgbm90IGluaXRpYWxpemVkLCBjYW5ub3QgZGlzcGF0Y2ggbWVzc2FnZXMnO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXBhcmVkTWVzc2FnZSA9IG5ldyBDcm9zc0ZyYW1lUHJlcGFyZWRNZXNzYWdlKG1zZywgdGhpcy5vdGhlcldpbmRvdywgdGhpcy5vdGhlcldpbmRvd09yaWdpbik7XG4gICAgcmV0dXJuIHByZXBhcmVkTWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuIERvZXMgc29tZSB2YWxpZGF0aW9uIG9mIHRoZSBtZXNzYWdlLCBhbmQgdGhlblxuICAgKiBjYWxscyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlIGhhbmRsZXIgaWYgb25lIGlzIGRlZmluZWRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbmNvbWluZyBNZXNzYWdlRXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25NZXNzYWdlUmVjZWl2ZWQoZXZlbnQ6IE1lc3NhZ2VFdmVudCk6IHZvaWQge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gb3RoZXJXaW5kb3cgZGVmaW5lZCwgbWFrZSBzdXJlIHRoZSBtZXNzYWdlIGlzIGNvbWluZyBmcm9tIHRoZXJlXG4gICAgaWYgKHRoaXMub3RoZXJXaW5kb3cgJiYgZXZlbnQuc291cmNlICE9PSB0aGlzLm90aGVyV2luZG93KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG8gc29tZSB2YWxpZGF0aW9uIG9uIGV2ZW50LmRhdGEgdG8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSByZWNlaXZlZCBhIHJlYWwgbWVzc2FnZVxuICAgIGlmICghZXZlbnQuZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5kYXRhO1xuICAgIGlmICghaXNNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgdGhlIGRlY2xhcmVkIG1lc3NhZ2UgdHlwZSwgdmFsaWRhdGUgdGhlIG1lc3NhZ2UsIGFuZCBjYWxsIGFuIGFwcHJvcHJpYXRlIGhhbmRlciBpZiBvbmUgZXhpc3RzXG4gICAgc3dpdGNoIChtZXNzYWdlLm1zZ1R5cGUpIHtcbiAgICAgIGNhc2UgTWVzc2FnZVR5cGUuSW5pdGlhbGl6ZToge1xuICAgICAgICBpZiAoIWlzSW5pdE1lc3NhZ2UobWVzc2FnZSkgfHwgIXRoaXMuaW5pdGlhbGl6ZU1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplTWVzc2FnZUhhbmRsZXIobWVzc2FnZSwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE1lc3NhZ2VUeXBlLkNvbW1hbmRSZXNwb25zZToge1xuICAgICAgICBpZiAoIWlzQ29tbWFuZFJlc3BvbnNlTWVzc2FnZShtZXNzYWdlKSB8fCAhdGhpcy5jb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXIobWVzc2FnZSwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE1lc3NhZ2VUeXBlLkNvbW1hbmQ6IHtcbiAgICAgICAgaWYgKCFpc0NvbW1hbmRNZXNzYWdlKG1lc3NhZ2UpIHx8ICF0aGlzLmNvbW1hbmRNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tbWFuZE1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2UsIGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb246IHtcbiAgICAgICAgaWYgKCFpc05vdGlmaWNhdGlvbk1lc3NhZ2UobWVzc2FnZSkgfHwgIXRoaXMubm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2UsIGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBNZXNzYWdlVHlwZS5IYW5kc2hha2U6IHtcbiAgICAgICAgaWYgKCFpc0hhbmRzaGFrZU1lc3NhZ2UobWVzc2FnZSkgfHwgIXRoaXMuaGFuZHNoYWtlTWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRzaGFrZU1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2UsIGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIEp1c3QgaWdub3JlIHRoaXMgc2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoZSBtZXNzYWdlIHR5cGVcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0T3RoZXJXaW5kb3cob3RoZXJXaW5kb3c6IFdpbmRvdyk6IHZvaWQge1xuICAgIHRoaXMub3RoZXJXaW5kb3cgPSBvdGhlcldpbmRvdztcbiAgfVxuXG4gIHB1YmxpYyBzZXRPdGhlcldpbmRvd09yaWdpbihvcmlnaW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub3RoZXJXaW5kb3dPcmlnaW4gPSBvcmlnaW47XG4gIH1cbn1cbiIsImltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL2ludGVyZmFjZS9NZXNzYWdlVHlwZXMnO1xuaW1wb3J0IHsgUHJlcGFyZWRNZXNzYWdlIH0gZnJvbSAnLi9pbnRlcmZhY2UvUHJlcGFyZWRNZXNzYWdlJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHJlcGFyZWRNZXNzYWdlIGludGVyZmFjZSB1c2VkIHRvIHBvc3QgbWVzc2FnZXMgYmV0d2VlblxuICogdHdvIGZyYW1lcyB1c2luZyB3aW5kb3cucG9zdE1lc3NhZ2VcbiAqL1xuZXhwb3J0IGNsYXNzIENyb3NzRnJhbWVQcmVwYXJlZE1lc3NhZ2UgaW1wbGVtZW50cyBQcmVwYXJlZE1lc3NhZ2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDcm9zc0ZyYW1lUHJlcGFyZWRNZXNzYWdlLlxuICAgKiBAcGFyYW0gX21lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgc2VudFxuICAgKiBAcGFyYW0gX3RhcmdldCBUaGUgdGFyZ2V0IHdpbmRvdyB3aGVyZSB0aGUgbWVzc2FnZSB3aWxsIGJlIHNlbnRcbiAgICogQHBhcmFtIF9vcmlnaW4gVGhlIHRhcmdldE9yaWdpbiB3aGVyZSB0aGlzIG1lc3NhZ2UgY2FuIGJlIHJlY2VpdmVkXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfbWVzc2FnZTogTWVzc2FnZSwgcHJpdmF0ZSBfdGFyZ2V0OiBXaW5kb3csIHByaXZhdGUgX29yaWdpbjogc3RyaW5nKSB7fVxuXG4gIHB1YmxpYyBnZXQgbWVzc2FnZUd1aWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZS5tc2dHdWlkO1xuICB9XG5cbiAgcHVibGljIHNlbmQoKTogUHJlcGFyZWRNZXNzYWdlIHtcbiAgICB0aGlzLl90YXJnZXQucG9zdE1lc3NhZ2UodGhpcy5fbWVzc2FnZSwgdGhpcy5fb3JpZ2luKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgZ3VpZCBmcm9tICdndWlkJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbklkIH0gZnJvbSAnLi4vY29udHJhY3QvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlL1ZlcnNpb25OdW1iZXInO1xuaW1wb3J0IHtcbiAgQ29tbWFuZE1lc3NhZ2UsXG4gIENvbW1hbmRSZXNwb25zZU1lc3NhZ2UsXG4gIEhhbmRzaGFrZU1lc3NhZ2UsXG4gIEluaXRpYWxpemVNZXNzYWdlLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlVHlwZSxcbiAgTm90aWZpY2F0aW9uTWVzc2FnZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2UvTWVzc2FnZVR5cGVzJztcblxuY29uc3QgZXhwZWN0ZWRFbXB0eU5vdGlmaWNhdGlvbnMgPSBuZXcgU2V0KFtcbiAgTm90aWZpY2F0aW9uSWQuRWRpdEJ1dHRvbkNsaWNrZWQsXG4gIE5vdGlmaWNhdGlvbklkLkVkaXRJbkRlc2t0b3BCdXR0b25DbGlja2VkLFxuICBOb3RpZmljYXRpb25JZC5Xb3JrYm9va1B1Ymxpc2hlZCxcbiAgTm90aWZpY2F0aW9uSWQuV29ya2Jvb2tSZWFkeVRvQ2xvc2UsXG4gIE5vdGlmaWNhdGlvbklkLlJlYWR5VG9SZWNlaXZlQXV0aFRva2VuLFxuXSk7XG5cbi8qIHRzbGludDpkaXNhYmxlIG5vLWFueSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWVzc2FnZShkYXRhOiBNZXNzYWdlIHwgYW55KTogZGF0YSBpcyBNZXNzYWdlIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGRhdGEgYXMgTWVzc2FnZTtcbiAgaWYgKCFtZXNzYWdlIHx8ICFtZXNzYWdlLm1zZ0d1aWQgfHwgIW1lc3NhZ2UubXNnVHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZ3VpZC5pc0d1aWQobWVzc2FnZS5tc2dHdWlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWVzc2FnZS5tc2dUeXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VUeXBlczogQXJyYXk8c3RyaW5nPiA9IFtcbiAgICBNZXNzYWdlVHlwZS5Db21tYW5kLFxuICAgIE1lc3NhZ2VUeXBlLkNvbW1hbmRSZXNwb25zZSxcbiAgICBNZXNzYWdlVHlwZS5Jbml0aWFsaXplLFxuICAgIE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbixcbiAgICBNZXNzYWdlVHlwZS5IYW5kc2hha2UsXG4gIF07XG5cbiAgaWYgKG1lc3NhZ2VUeXBlcy5pbmRleE9mKG1lc3NhZ2UubXNnVHlwZSkgPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcnNpb24odmVyc2lvbk51bWJlcjogVmVyc2lvbk51bWJlciB8IGFueSk6IHZlcnNpb25OdW1iZXIgaXMgVmVyc2lvbk51bWJlciB7XG4gIGlmICghdmVyc2lvbk51bWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHYgPSB2ZXJzaW9uTnVtYmVyIGFzIFZlcnNpb25OdW1iZXI7XG5cbiAgaWYgKHR5cGVvZiB2ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygdi5maXggIT09ICdudW1iZXInIHx8IHR5cGVvZiB2Lm1pbm9yICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygdi5tYWpvciAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5pdE1lc3NhZ2UobWVzc2FnZTogSW5pdGlhbGl6ZU1lc3NhZ2UgfCBhbnkpOiBtZXNzYWdlIGlzIEluaXRpYWxpemVNZXNzYWdlIHtcbiAgaWYgKCFpc01lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpbml0TWVzc2FnZSA9IG1lc3NhZ2UgYXMgSW5pdGlhbGl6ZU1lc3NhZ2U7XG4gIGlmIChpbml0TWVzc2FnZS5tc2dUeXBlICE9PSBNZXNzYWdlVHlwZS5Jbml0aWFsaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpbml0TWVzc2FnZS5hcGlWZXJzaW9uIHx8ICFpc1ZlcnNpb24oaW5pdE1lc3NhZ2UuYXBpVmVyc2lvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWluaXRNZXNzYWdlLmNyb3NzRnJhbWVWZXJzaW9uIHx8ICFpc1ZlcnNpb24oaW5pdE1lc3NhZ2UuY3Jvc3NGcmFtZVZlcnNpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRSZXNwb25zZU1lc3NhZ2UobWVzc2FnZTogQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSB8IGFueSk6IG1lc3NhZ2UgaXMgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSB7XG4gIGlmICghaXNNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY3JNZXNzYWdlID0gbWVzc2FnZSBhcyBDb21tYW5kUmVzcG9uc2VNZXNzYWdlO1xuICBpZiAoY3JNZXNzYWdlLm1zZ1R5cGUgIT09IE1lc3NhZ2VUeXBlLkNvbW1hbmRSZXNwb25zZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZ3VpZC5pc0d1aWQoY3JNZXNzYWdlLmNvbW1hbmRHdWlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghY3JNZXNzYWdlLmRhdGEgJiYgIWNyTWVzc2FnZS5lcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kTWVzc2FnZShtZXNzYWdlOiBDb21tYW5kTWVzc2FnZSB8IGFueSk6IG1lc3NhZ2UgaXMgQ29tbWFuZE1lc3NhZ2Uge1xuICBpZiAoIWlzTWVzc2FnZShtZXNzYWdlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmRNZXNzYWdlID0gbWVzc2FnZSBhcyBDb21tYW5kTWVzc2FnZTtcbiAgaWYgKGNvbW1hbmRNZXNzYWdlLm1zZ1R5cGUgIT09IE1lc3NhZ2VUeXBlLkNvbW1hbmQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWNvbW1hbmRNZXNzYWdlLnBhcmFtZXRlcnMgfHwgdHlwZW9mIGNvbW1hbmRNZXNzYWdlLnBhcmFtZXRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFjb21tYW5kTWVzc2FnZS52ZXJiSWQgfHwgdHlwZW9mIGNvbW1hbmRNZXNzYWdlLnZlcmJJZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90aWZpY2F0aW9uTWVzc2FnZShtZXNzYWdlOiBOb3RpZmljYXRpb25NZXNzYWdlIHwgYW55KTogbWVzc2FnZSBpcyBOb3RpZmljYXRpb25NZXNzYWdlIHtcbiAgaWYgKCFpc01lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBub3RpZmljYXRpb25NZXNzYWdlID0gbWVzc2FnZSBhcyBOb3RpZmljYXRpb25NZXNzYWdlO1xuICBpZiAobm90aWZpY2F0aW9uTWVzc2FnZS5tc2dUeXBlICE9PSBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIW5vdGlmaWNhdGlvbk1lc3NhZ2UuZGF0YSAmJiAhZXhwZWN0ZWRFbXB0eU5vdGlmaWNhdGlvbnMuaGFzKG5vdGlmaWNhdGlvbk1lc3NhZ2Uubm90aWZpY2F0aW9uSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFub3RpZmljYXRpb25NZXNzYWdlLm5vdGlmaWNhdGlvbklkIHx8IHR5cGVvZiBub3RpZmljYXRpb25NZXNzYWdlLm5vdGlmaWNhdGlvbklkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIYW5kc2hha2VNZXNzYWdlKG1lc3NhZ2U6IEhhbmRzaGFrZU1lc3NhZ2UgfCBhbnkpOiBtZXNzYWdlIGlzIEhhbmRzaGFrZU1lc3NhZ2Uge1xuICBpZiAoIWlzTWVzc2FnZShtZXNzYWdlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGhhbmRzaGFrZU1lc3NhZ2UgPSBtZXNzYWdlIGFzIEhhbmRzaGFrZU1lc3NhZ2U7XG4gIGlmIChoYW5kc2hha2VNZXNzYWdlLm1zZ1R5cGUgIT09IE1lc3NhZ2VUeXBlLkhhbmRzaGFrZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIE1vZGVsLCBOb3RpZmljYXRpb25JZCwgVmVyYklkLCBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9Jbml0aWFsaXphdGlvbk9wdGlvbnMnO1xuXG4vKipcbiAqIEVudW0gZGVmaW5pbmcgdGhlIDQgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzIHdlIGhhdmUgZGVmaW5lZFxuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIEluaXRpYWxpemUgPSAnaW5pdGlhbGl6ZScsXG4gIE5vdGlmaWNhdGlvbiA9ICdub3RpZmljYXRpb24nLFxuICBDb21tYW5kID0gJ2NvbW1hbmQnLFxuICBDb21tYW5kUmVzcG9uc2UgPSAnY29tbWFuZC1yZXNwb25zZScsXG4gIEhhbmRzaGFrZSA9ICd2LWhhbmRzaGFrZScsXG4gIEFjayA9ICd2LWFjaycsXG59XG5cbi8qKlxuICogVGhlIE1lc3NhZ2UgaW50ZXJmYWNlIGlzIHRoZSBiYXNlIGludGVyZmFjZSBmb3IgYWxsIHRoZSBvdGhlclxuICogbWVzc2FnZSB0eXBlIGludGVyZmFjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZCBmb3IgdGhpcyBtZXNzYWdlXG4gICAqL1xuICBtc2dHdWlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoaXMgbWVzc2FnZVxuICAgKi9cbiAgbXNnVHlwZTogTWVzc2FnZVR5cGU7XG59XG5cbi8qKlxuICogVGhlIGluaXRpYWxpemUgbWVzc2FnZSBpcyB0aGUgZmlyc3QgbWVzc2FnZSB3aGljaCB3aWxsIGJlIHNlbnRcbiAqIGZyb20gdGhlIGphdmFzY3JpcHQgdG8gc2V0IHVwIGNvbW11bmljYXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZU1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBhcGkgd2hpY2ggdGhlIHNlbmRlciB3YW50cyB0byB1c2VcbiAgICovXG4gIGFwaVZlcnNpb246IFZlcnNpb25OdW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoaXMgbWVzc2FnaW5nIGNvbnRyYWN0IHRvIGJlIHVzZWQuIEZvciBub3csIHRoZXJlXG4gICAqIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHZlcnNpb24gYnV0IHNlbmRpbmcgdGhpcyBhbG9uZyBzaG91bGQgaGVscFxuICAgKiBpZiB3ZSBuZWVkIHRvIGFkZCBhIG5ldyB2ZXJzaW9uIGluIGEgZnV0dXJlIHJlbGVhc2VcbiAgICovXG4gIGNyb3NzRnJhbWVWZXJzaW9uOiBWZXJzaW9uTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIGF0IHRoZSB0aW1lIG9mIGluaXRpYWxpemF0aW9uXG4gICAqL1xuICBvcHRpb25zPzogSW5pdGlhbGl6YXRpb25PcHRpb25zO1xufVxuXG4vKipcbiAqIFRoaXMgbWVzc2FnZSBpcyBzZW50IHdoZW4gYSBub3RpZmljYXRpb24gb2NjdXJzIGZyb20gdGhlIHByZXNsYXllclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbk1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBmb3IgdGhpcyB0eXBlIG9mIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgbm90aWZpY2F0aW9uSWQ6IE5vdGlmaWNhdGlvbklkO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSB3aGljaCBjYW1lIGFsb25nIHdpdGggdGhlIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgZGF0YTogTW9kZWw7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBjYWxsaW5nIGFuIGludGVybmFsIGNvbnRyYWN0IGNvbW1hbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjb21tYW5kIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZFxuICAgKi9cbiAgdmVyYklkOiBWZXJiSWQ7XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY29tbWFuZFxuICAgKi9cbiAgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXNzYWdlIGlzIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBDb21tYW5kTWVzc2FnZSB3aXRoIHRoZVxuICogcmVzdWx0IG9mIHRoYXQgY29tbWFuZHMgaW52b2NhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRSZXNwb25zZU1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIEd1aWQgb2YgdGhlIENvbW1hbmRNZXNzYWdlIHdoaWNoIHRoaXMgaXMgaW4gcmVzcG9uc2UgdG9cbiAgICovXG4gIGNvbW1hbmRHdWlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoZXJlIHdhcyBhbiBlcnJvciByZXR1cm5lZCBmcm9tIHRoZSBjb21tYW5kLCB0aGlzIHdpbGwgYmUgZGVmaW5lZFxuICAgKiBhbmQgY29udGFpbiB0aGUgZXJyb3JcbiAgICovXG4gIGVycm9yPzogTW9kZWw7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBjb21tYW5kIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGNvbW1hbmQgcmVzdWx0XG4gICAqL1xuICBkYXRhPzogTW9kZWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZHNoYWtlTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2Uge1xuICAvKipcbiAgICogSW50ZXJuYWwgQVBJIGNvbnRyYWN0IHZlcnNpb25cbiAgICovXG4gIHBsYXRmb3JtVmVyc2lvbjogVmVyc2lvbk51bWJlcjtcbn1cbiIsImltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBFeGVjdXRlUmVzcG9uc2UsIE5vdGlmaWNhdGlvbiwgVmVyYklkIH0gZnJvbSAnLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIH0gZnJvbSAnLi9JbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcic7XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFueVxuXG4vKipcbiAqIFRoaXMgdmVyc2lvbiBjb252ZXJ0ZXIgZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBidXQgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIG9yIHdoZW4gd2UgaGF2ZVxuICogYSBtYXRjaGluZyBwbGF0Zm9ybSBhbmQgaW50ZXJuYWwgdmVyc2lvbiBudW1iZXJcbiAqL1xuZXhwb3J0IGNsYXNzIElkZW50aXR5VmVyc2lvbkNvbnZlcnRlciBpbXBsZW1lbnRzIEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIHtcbiAgcHVibGljIHVwZ3JhZGVFeGVjdXRlQ2FsbCh2ZXJiOiBhbnksIHBhcmFtZXRlcnM6IGFueSk6IHsgdmVyYjogVmVyYklkOyBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyYjogdmVyYiBhcyBWZXJiSWQsXG4gICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIGFzIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZG93bmdyYWRlRXhlY3V0ZVJldHVybihleGVjdXRlUmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSk6IEV4ZWN1dGVSZXNwb25zZSB7XG4gICAgcmV0dXJuIGV4ZWN1dGVSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBkb3duZ3JhZGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiBOb3RpZmljYXRpb24ge1xuICAgIHJldHVybiBub3RpZmljYXRpb247XG4gIH1cbn1cbiIsImltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBFeGVjdXRlUmVzcG9uc2UsIE5vdGlmaWNhdGlvbiwgVmVyYklkLCBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIH0gZnJvbSAnLi9JbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcic7XG5pbXBvcnQgKiBhcyBUcmFuc2xhdGlvbnMgZnJvbSAnLi9WZXJzaW9uVHJhbnNsYXRpb25zJztcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55XG5cbi8qKlxuICogVGhlIHZlcnNpb24gY29udmVydGVyIGlzIGRlc2lnbmVkIHRvIGFsbG93IHRoZSBwbGF0Zm9ybSBhbmQgZXh0ZXJuYWwgbW9kdWxlc1xuICogdG8gc2VlbWxlc3NseSBjb21tdW5pY2F0ZSBvdmVyIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGludGVybmFsIEFQSS4gVGhlIG9ubHlcbiAqIG1vZGUgaXQgc3VwcG9ydHMgaXMgZXh0ZXJuYWwncyB2ZXJzaW9uIDw9IHBsYXRmb3JtJ3MgdmVyc2lvbi4gV2hlbiBleGVjdXRpbmdcbiAqIGNvbW1hbmRzLCBpdCBpcyB1c2VkIHRvIHVwZ3JhZGUgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIHRvIHdoYXQgcGxhdGZvcm0ga25vd3Mgb24gdGhlIHdheSBpblxuICogYW5kIGRvd25ncmFkZSB0aGUgcmVwcmVzZW50YXRpb25zIG9uIHRoZSB3YXkgb3V0LiBTaW1pbGFybHkgZm9yIG5vdGlmaWNhdGlvbnMsIGl0IGNhblxuICogZG93bmdyYWRlIHRob3NlIG9uIHRoZSB3YXkgZnJvbSBwbGF0Zm9ybSB0byBleHRlcm5hbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlciBpbXBsZW1lbnRzIEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlclxuICAgKlxuICAgKiBAcGFyYW0gX2V4dGVybmFsVmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3QgYXBpLWV4dGVybmFsLWpzIGlzIHVzaW5nXG4gICAqIEBwYXJhbSBfcGxhdGZvcm1WZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCB0aGUgYXBpLXBsYXRmb3JtLWpzIGlzIHVzaW5nXG4gICAqIEBwYXJhbSBfdXBncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIHRoZSB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIHVwZ3JhZGluZyBjbWQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gX2Rvd25ncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIGRvd25ncmFkZSB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSBhZnRlciBhIGNtZFxuICAgKiBAcGFyYW0gX2Rvd25ncmFkZU5vdGlmaWNhdGlvblRyYW5zbGF0aW9ucyBPcmRlcmVkIGxpc3Qgb2YgZG93bmdyYWRlIHRyYW5zbGF0aW9ucyB0byBwZXJmb3JtIG9uIGEgbm90aWZpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EYXRhKFxuICAgIGV4dGVybmFsVmVyc2lvbjogVmVyc2lvbk51bWJlcixcbiAgICBwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gICAgdXBncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5VcGdyYWRlRXhlY3V0ZUNhbGw+LFxuICAgIGRvd25ncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVFeGVjdXRlUmV0dXJuPixcbiAgICBkb3duZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVOb3RpZmljYXRpb24+LFxuICApOiBTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXIge1xuICAgIHJldHVybiBuZXcgdGhpcyhcbiAgICAgIGV4dGVybmFsVmVyc2lvbi5tYWpvcixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbi5tYWpvcixcbiAgICAgIHVwZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zLFxuICAgICAgZG93bmdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9ucyxcbiAgICAgIGRvd25ncmFkZU5vdGlmaWNhdGlvblRyYW5zbGF0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlclxuICAgKlxuICAgKiBAcGFyYW0gX2V4dGVybmFsTWFqb3JWZXJzaW9uIFRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCBhcGktZXh0ZXJuYWwtanMgaXMgdXNpbmdcbiAgICogQHBhcmFtIF9wbGF0Zm9ybU1ham9yVmVyc2lvbiBUaGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3QgdGhlIGFwaS1wbGF0Zm9ybS1qcyBpcyB1c2luZ1xuICAgKiBAcGFyYW0gX3VwZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zIE9yZGVyZWQgbGlzdCBvZiB0aGUgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gd2hlbiB1cGdyYWRpbmcgY21kIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIF9kb3duZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zIE9yZGVyZWQgbGlzdCBvZiBkb3duZ3JhZGUgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gYWZ0ZXIgYSBjbWRcbiAgICogQHBhcmFtIF9kb3duZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIGRvd25ncmFkZSB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSBvbiBhIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2V4dGVybmFsTWFqb3JWZXJzaW9uOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm1NYWpvclZlcnNpb246IG51bWJlcixcbiAgICBwcml2YXRlIF91cGdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9uczogQXJyYXk8VHJhbnNsYXRpb25zLlVwZ3JhZGVFeGVjdXRlQ2FsbD4sXG4gICAgcHJpdmF0ZSBfZG93bmdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9uczogQXJyYXk8VHJhbnNsYXRpb25zLkRvd25ncmFkZUV4ZWN1dGVSZXR1cm4+LFxuICAgIHByaXZhdGUgX2Rvd25ncmFkZU5vdGlmaWNhdGlvblRyYW5zbGF0aW9uczogQXJyYXk8VHJhbnNsYXRpb25zLkRvd25ncmFkZU5vdGlmaWNhdGlvbj4sXG4gICkge1xuICAgIGlmICh0aGlzLl9leHRlcm5hbE1ham9yVmVyc2lvbiA+IHRoaXMuX3BsYXRmb3JtTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0IGJldHdlZW4gZXh0ZXJuYWwgdmVyc2lvbiAke3RoaXMuX2V4dGVybmFsTWFqb3JWZXJzaW9ufSBhbmQgJHt0aGlzLl9wbGF0Zm9ybU1ham9yVmVyc2lvbn1gKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBncmFkZUV4ZWN1dGVDYWxsKHZlcmI6IGFueSwgcGFyYW1ldGVyczogYW55KTogeyB2ZXJiOiBWZXJiSWQ7IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzIH0ge1xuICAgIC8vIFBlcmZvcm0gdGhlIHVwZ3JhZGUgb2YgdGhlIHZlcmIgYW5kIHBhcmFtZXRlcnMgdG8gdGhlIGxldmVsIHRoYXQgcGxhdGZvcm0gaXMgdXNpbmdcbiAgICBsZXQgdXBncmFkZWQgPSB7IHZlcmI6IHZlcmIsIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgfTtcbiAgICBmb3IgKGNvbnN0IHVwZ3JhZGVUcmFuc2xhdGlvbiBvZiB0aGlzLl91cGdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9ucykge1xuICAgICAgdXBncmFkZWQgPSB1cGdyYWRlVHJhbnNsYXRpb24odXBncmFkZWQudmVyYiwgdXBncmFkZWQucGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZ3JhZGVkO1xuICB9XG5cbiAgcHVibGljIGRvd25ncmFkZUV4ZWN1dGVSZXR1cm4oZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICAgIC8vIERvd25ncmFkZSB0aGUgcmVzcG9uc2UgdG8gd2hhdCB0aGUgZXh0ZXJuYWwgbW9kdWxlIGlzIGV4cGVjdGluZ1xuICAgIGxldCBkb3duZ3JhZGVkID0gZXhlY3V0ZVJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgZG93bmdyYWRlVHJhbnNsYXRpb24gb2YgdGhpcy5fZG93bmdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9ucykge1xuICAgICAgZG93bmdyYWRlZCA9IGRvd25ncmFkZVRyYW5zbGF0aW9uKGRvd25ncmFkZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBkb3duZ3JhZGVkO1xuICB9XG5cbiAgcHVibGljIGRvd25ncmFkZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbik6IE5vdGlmaWNhdGlvbiB7XG4gICAgLy8gRG93bmdyYWRlIHRoZSBub3RpZmljYXRpb24gdG8gd2hhdCB0aGUgZXh0ZXJuYWwgbW9kdWxlIGlzIGV4cGVjdGluZ1xuICAgIGxldCBkb3duZ3JhZGVkID0gbm90aWZpY2F0aW9uO1xuICAgIGZvciAoY29uc3QgZG93bmdyYWRlVHJhbnNsYXRpb24gb2YgdGhpcy5fZG93bmdyYWRlTm90aWZpY2F0aW9uVHJhbnNsYXRpb25zKSB7XG4gICAgICBkb3duZ3JhZGVkID0gZG93bmdyYWRlVHJhbnNsYXRpb24oZG93bmdyYWRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvd25ncmFkZWQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFZlcnNpb25OdW1iZXIgfSBmcm9tICcuLi9Kc0FwaUludGVybmFsQ29udHJhY3QnO1xuaW1wb3J0IHsgSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyIH0gZnJvbSAnLi9JZGVudGl0eVZlcnNpb25Db252ZXJ0ZXInO1xuaW1wb3J0IHsgSW50ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIgfSBmcm9tICcuL0ludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyJztcbmltcG9ydCB7IFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyJztcbmltcG9ydCAqIGFzIFRyYW5zbGF0aW9ucyBmcm9tICcuL1ZlcnNpb25UcmFuc2xhdGlvbnMnO1xuaW1wb3J0IHsgRG93bmdyYWRlRmxpcGJvYXJkWm9uZUlELCBEb3duZ3JhZGVXb3Jrc2hlZXROYW1lcyB9IGZyb20gJy4vVmVyc2lvblRyYW5zbGF0aW9ucyc7XG5cbi8qKlxuICogQHJldHVybnMgdHJ1ZSBpZiBsaHMgPCByaHMgKGlnbm9yaW5nIGZpeCBudW1iZXIpXG4gKiBAcGFyYW0gbGhzXG4gKiBAcGFyYW0gcmhzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWZXJzaW9uTGVzc1RoYW4obGhzOiBWZXJzaW9uTnVtYmVyLCByaHM6IFZlcnNpb25OdW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKGxocy5tYWpvciA+IHJocy5tYWpvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGhzLm1ham9yIDwgcmhzLm1ham9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGxocy5taW5vciA8IHJocy5taW5vcjtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGxocyA9PSByaHMgKGlnbm9yaW5nIGZpeCBudW1iZXIpXG4gKiBAcGFyYW0gbGhzXG4gKiBAcGFyYW0gcmhzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWZXJzaW9uRXF1YWxUbyhsaHM6IFZlcnNpb25OdW1iZXIsIHJoczogVmVyc2lvbk51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGhzLm1ham9yID09PSByaHMubWFqb3IgJiYgbGhzLm1pbm9yID09PSByaHMubWlub3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFqb3JNaW5vclRyYW5zbGF0b3JzPFQ+IHtcbiAgW21ham9yOiBudW1iZXJdOiB7IFttaW5vcjogbnVtYmVyXTogQXJyYXk8VD4gfTtcbn1cblxuLy8gQSBtYXBwaW5nIGZyb20gYW4gb2xkZXIgY2xpZW50IHZlcnNpb24gb2YgaW50ZXJuYWwtY29udHJhY3QgdG8gdGhlIGN1cnJlbnQgcGxhdGZvcm0gdmVyc2lvbiBvZiB0aGlzIGNvbnRyYWN0LlxuLy8gRWFjaCB2ZXJzaW9uIGJ1bXAgY2FuIGhhdmUgYW4gYXJyYXkgb2YgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gaW4gb3JkZXIuIE5vdGljZSB0aGF0IHRoaXMgaXNcbi8vIGRpZmZlcmVudCB0aGFuIHRoZSBtYWpvciB1cGdyYWRlcy9kb3duZ3JhZGVzIGFib3ZlIGJlY2F1c2UgaXQgaGFuZGxlcyBib3RoIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIGNoYW5nZXMuXG4vLyBBbHNvIHBsZWFzZSBub3RlOiBkb3duZ3JhZGVFeGVjdXRlQ2FsbCBpcyBoYW5kbGVkIG9uIHRoZSBjbGllbnQvZXh0ZXJuYWwgc2lkZSByYXRoZXIgdGhhbiBwbGF0Zm9ybSBzaWRlLlxuLy8gV2hlbiB1cGRhdGluZyB0aGUgbWFqb3Igb3IgbWlub3IgdmVyc2lvbiBvZiBvdXIgaW50ZXJuYWwtY29udHJhY3QsIHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIHRoZXNlIGRhdGEgc3RydWN0dXJlcy5cbi8vICogSWYgdGhlcmUgYXJlIHRyYW5zbGF0aW9ucyB0byBhZGQsIGFkZCB0aGVtIHRvIHRoZSB2ZXJzaW9uIHRvIFwidXBncmFkZSBmcm9tXCIgb3IgXCJkb3duZ3JhZGUgdG9cIi5cbmV4cG9ydCBjb25zdCBFeGVjdXRlTWlub3JVcGdyYWRlczogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9ucy5VcGdyYWRlRXhlY3V0ZUNhbGw+ID0ge1xuICAxOiB7XG4gICAgOTogW10sIC8vIE5vdGUgdGhhdCB3ZSBwdXQgdXBncmFkZXMgZnJvbSAxLjkgdG8gMS4xMCBpbiB0aGUgWzFdWzldIGJ1Y2tldFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEV4ZWN1dGVNaW5vckRvd25ncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnMuRG93bmdyYWRlRXhlY3V0ZVJldHVybj4gPSB7XG4gIDE6IHtcbiAgICA1OiBbRG93bmdyYWRlV29ya3NoZWV0TmFtZXNdLFxuICAgIDk6IFtdLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE5vdGlmaWNhdGlvbk1pbm9yRG93bmdyYWRlczogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVOb3RpZmljYXRpb24+ID0ge1xuICAxOiB7XG4gICAgOTogW10sXG4gICAgMTA6IFtEb3duZ3JhZGVGbGlwYm9hcmRab25lSURdLFxuICB9LFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byB1cGdyYWRlIGFuZCBkb3duZ3JhZGUgdGhlIGNvbnRyYWN0XG4gKiBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMsIHdoaWNoIGFyZSBzcGVjaWZpZWQuIElmIGV4dGVybmFsTWFqb3JWZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBwbGF0Zm9ybU1ham9yVmVyc2lvbixcbiAqIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGJlY2F1c2Ugd2Ugd29uJ3Qga25vdyBob3cgdG8gZG8gdGhvc2UgY29udmVyc2lvbnMuXG4gKiBUaGlzIGNvbnZlcnRlciBjYW4gaGFuZGxlIGJvdGggbWFqb3IgYW5kIG1pbm9yIHVwZGF0ZXMgd2hlbiB0aGUgcGxhdGZvcm0gdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gZXh0ZXJuYWwgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gZXh0ZXJuYWxWZXJzaW9uIFZlcnNpb25OdW1iZXIgb2YgdGhlIGludGVybmFsIGFwaSB3aGljaCB0aGUgZXh0ZXJuYWwgbW9kdWxlIGlzIHVzaW5nXG4gKiBAcGFyYW0gcGxhdGZvcm1WZXJzaW9uIFZlcnNpb25OdW1iZXIgb2YgdGhlIGludGVybmFsIGFwaSB3aGljaCB0aGUgcGxhdGZvcm0gaXMgdXNpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZVZlcnNpb25Db252ZXJ0ZXIoZXh0ZXJuYWxWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLCBwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIpOiBJbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB7XG4gIHJldHVybiBDcmVhdGVWZXJzaW9uQ29udmVydGVyV2l0aFRyYW5zbGF0b3JzKFxuICAgIGV4dGVybmFsVmVyc2lvbixcbiAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgRXhlY3V0ZU1pbm9yVXBncmFkZXMsXG4gICAgRXhlY3V0ZU1pbm9yRG93bmdyYWRlcyxcbiAgICBOb3RpZmljYXRpb25NaW5vckRvd25ncmFkZXMsXG4gICk7XG59XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgQ3JlYXRlVmVyc2lvbkNvbnZlcnRlci4gVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgdXBncmFkZSwgZG93bmdyYWRlLCBhbmRcbiAqIG5vdGlmaWNhdGlvbiBhcnJheXMgc28gdGhhdCBhbGwgdGhlIGxvZ2ljIGNhbiBiZSB0ZXN0ZWQuXG4gKlxuICogQHBhcmFtIGV4dGVybmFsVmVyc2lvbiBWZXJzaW9uTnVtYmVyIG9mIHRoZSBpbnRlcm5hbCBhcGkgd2hpY2ggdGhlIGV4dGVybmFsIG1vZHVsZSBpcyB1c2luZ1xuICogQHBhcmFtIHBsYXRmb3JtVmVyc2lvbiBWZXJzaW9uTnVtYmVyIG9mIHRoZSBpbnRlcm5hbCBhcGkgd2hpY2ggdGhlIHBsYXRmb3JtIGlzIHVzaW5nXG4gKiBAcGFyYW0gdXBncmFkZXMgTWFqb3JNaW5vclRyYW5zbGF0b3JzIGZvciB1cGdyYWRlc1xuICogQHBhcmFtIGRvd25ncmFkZXMgTWFqb3JNaW5vclRyYW5zbGF0b3JzIGZvciBkb3duZ3JhZGVzXG4gKiBAcGFyYW0gbm90aWZpY2F0aW9uRG93bmdyYWRlcyBNYWpvck1pbm9yVHJhbnNsYXRvcnMgZm9yIG5vdGlmaWNhdGlvbiBkb3duZ3JhZGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVWZXJzaW9uQ29udmVydGVyV2l0aFRyYW5zbGF0b3JzKFxuICBleHRlcm5hbFZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gIHBsYXRmb3JtVmVyc2lvbjogVmVyc2lvbk51bWJlcixcbiAgdXBncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnMuVXBncmFkZUV4ZWN1dGVDYWxsPixcbiAgZG93bmdyYWRlczogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVFeGVjdXRlUmV0dXJuPixcbiAgbm90aWZpY2F0aW9uRG93bmdyYWRlczogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVOb3RpZmljYXRpb24+LFxuKTogSW50ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIge1xuICBjb25zdCBleHRlcm5hbE1ham9yVmVyc2lvbjogbnVtYmVyID0gZXh0ZXJuYWxWZXJzaW9uLm1ham9yO1xuICBjb25zdCBleHRlcm5hbE1pbm9yVmVyc2lvbjogbnVtYmVyID0gZXh0ZXJuYWxWZXJzaW9uLm1pbm9yO1xuICBjb25zdCBwbGF0Zm9ybU1ham9yVmVyc2lvbjogbnVtYmVyID0gcGxhdGZvcm1WZXJzaW9uLm1ham9yO1xuXG4gIGlmIChleHRlcm5hbE1ham9yVmVyc2lvbiA+IHBsYXRmb3JtTWFqb3JWZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRlcm5hbCB2ZXJzaW9uIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHBsYXRmb3JtIHZlcnNpb24uXG4gICAgZXh0ZXJuYWxNYWpvclZlcnNpb249JHtleHRlcm5hbE1ham9yVmVyc2lvbn0gcGxhdGZvcm1NYWpvclZlcnNpb249JHtwbGF0Zm9ybU1ham9yVmVyc2lvbn1gKTtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1c2luZyB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9ucyAobWFqb3IubWlub3IpLCBqdXN0IHVzZSB0aGUgaWRlbnRpdHkgY29udmVydGVyXG4gIGlmIChWZXJzaW9uRXF1YWxUbyhleHRlcm5hbFZlcnNpb24sIHBsYXRmb3JtVmVyc2lvbikpIHtcbiAgICByZXR1cm4gbmV3IElkZW50aXR5VmVyc2lvbkNvbnZlcnRlcigpO1xuICB9XG5cbiAgLy8gV2FsayB0aGUgc3BhbiBiZXR3ZWVuIHRoZSB2ZXJzaW9ucyB3ZSBoYXZlIGhlcmUgYW5kIGNvbGxlY3QgdGhlIHVwZ3JhZGUgYW5kIGRvd25ncmFkZXMgbmVjZXNzYXJ5XG4gIGNvbnN0IG5lZWRlZEV4ZWN1dGVVcGdyYWRlczogQXJyYXk8VHJhbnNsYXRpb25zLlVwZ3JhZGVFeGVjdXRlQ2FsbD4gPSBHZXROZWVkZWRUcmFuc2xhdGlvbnMoXG4gICAgZXh0ZXJuYWxNYWpvclZlcnNpb24sXG4gICAgcGxhdGZvcm1NYWpvclZlcnNpb24sXG4gICAgZXh0ZXJuYWxNaW5vclZlcnNpb24sXG4gICAgdXBncmFkZXMsXG4gICk7XG5cbiAgY29uc3QgbmVlZGVkRXhlY3V0ZURvd25ncmFkZXM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVFeGVjdXRlUmV0dXJuPiA9IEdldE5lZWRlZFRyYW5zbGF0aW9ucyhcbiAgICBleHRlcm5hbE1ham9yVmVyc2lvbixcbiAgICBwbGF0Zm9ybU1ham9yVmVyc2lvbixcbiAgICBleHRlcm5hbE1pbm9yVmVyc2lvbixcbiAgICBkb3duZ3JhZGVzLFxuICApO1xuXG4gIGNvbnN0IG5lZWRlZE5vdGlmaWNhdGlvbkRvd25ncmFkZXM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVOb3RpZmljYXRpb24+ID0gR2V0TmVlZGVkVHJhbnNsYXRpb25zKFxuICAgIGV4dGVybmFsTWFqb3JWZXJzaW9uLFxuICAgIHBsYXRmb3JtTWFqb3JWZXJzaW9uLFxuICAgIGV4dGVybmFsTWlub3JWZXJzaW9uLFxuICAgIG5vdGlmaWNhdGlvbkRvd25ncmFkZXMsXG4gICk7XG5cbiAgLy8gV2Ugd2FudCB0byBhcHBseSB0aGUgZG93bmdyYWRlcyBpbiByZXZlcnNlIG9yZGVyIGluIGNhc2Ugb2YgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlbVxuICBuZWVkZWRFeGVjdXRlRG93bmdyYWRlcy5yZXZlcnNlKCk7XG4gIG5lZWRlZE5vdGlmaWNhdGlvbkRvd25ncmFkZXMucmV2ZXJzZSgpO1xuXG4gIHJldHVybiBTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXIuZnJvbURhdGEoXG4gICAgZXh0ZXJuYWxWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICBuZWVkZWRFeGVjdXRlVXBncmFkZXMsXG4gICAgbmVlZGVkRXhlY3V0ZURvd25ncmFkZXMsXG4gICAgbmVlZGVkTm90aWZpY2F0aW9uRG93bmdyYWRlcyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gR2V0TmVlZGVkVHJhbnNsYXRpb25zPFQ+KFxuICBleHRlcm5hbE1ham9yVmVyc2lvbjogbnVtYmVyLFxuICBwbGF0Zm9ybU1ham9yVmVyc2lvbjogbnVtYmVyLFxuICBleHRlcm5hbE1pbm9yVmVyc2lvbjogbnVtYmVyLFxuICBtYWpvck1pbm9yVHJhbnNsYXRvcnM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUPixcbik6IEFycmF5PFQ+IHtcbiAgY29uc3QgbmVlZGVkVHJhbnNsYXRpb25zOiBBcnJheTxUPiA9IFtdO1xuXG4gIGZvciAobGV0IG1ham9yID0gZXh0ZXJuYWxNYWpvclZlcnNpb247IG1ham9yIDw9IHBsYXRmb3JtTWFqb3JWZXJzaW9uOyBtYWpvcisrKSB7XG4gICAgaWYgKG1ham9yIGluIG1ham9yTWlub3JUcmFuc2xhdG9ycykge1xuICAgICAgY29uc3Qgc3RhcnQgPSBtYWpvciA9PT0gZXh0ZXJuYWxNYWpvclZlcnNpb24gPyBleHRlcm5hbE1pbm9yVmVyc2lvbiA6IDA7XG4gICAgICBjb25zdCBtYXhpbXVtTWlub3JWZXJzaW9uID0gR2V0TWF4aW11bU1pbm9ySW5kZXgoT2JqZWN0LmtleXMobWFqb3JNaW5vclRyYW5zbGF0b3JzW21ham9yXSkpO1xuICAgICAgZm9yIChsZXQgbWlub3IgPSBzdGFydDsgbWlub3IgPD0gbWF4aW11bU1pbm9yVmVyc2lvbjsgbWlub3IrKykge1xuICAgICAgICBpZiAobWlub3IgaW4gbWFqb3JNaW5vclRyYW5zbGF0b3JzW21ham9yXSkge1xuICAgICAgICAgIG5lZWRlZFRyYW5zbGF0aW9ucy5wdXNoKC4uLm1ham9yTWlub3JUcmFuc2xhdG9yc1ttYWpvcl1bbWlub3JdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkZWRUcmFuc2xhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHZXRNYXhpbXVtTWlub3JJbmRleChtaW5vclZlcnNpb25zOiBBcnJheTxzdHJpbmc+KTogbnVtYmVyIHtcbiAgcmV0dXJuIG1pbm9yVmVyc2lvbnMubWFwKChhKSA9PiBOdW1iZXIoYSkpLnJlZHVjZSgoYSwgYikgPT4gKGEgPiBiID8gYSA6IGIpKTtcbn1cbiIsImltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBFeGVjdXRlUmVzcG9uc2UsIEV4dGVuc2lvbkJvb3RzdHJhcEluZm8sIE5vdGlmaWNhdGlvbiwgVmVyYklkIH0gZnJvbSAnLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IFZpc3VhbElkIH0gZnJvbSAnLi4vY29udHJhY3QvTW9kZWxzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbklkIH0gZnJvbSAnLi4vY29udHJhY3QvTm90aWZpY2F0aW9ucyc7XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFueVxuXG4vKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIG9sZCB2ZXJzIGFuZCBwYXJhbWV0ZXJzIGZyb20gdGhlIGV4dGVybmFsIGJlZm9yZSB3ZSBzZW5kIGl0IHRvIHBsYXRmb3JtICovXG5leHBvcnQgdHlwZSBVcGdyYWRlRXhlY3V0ZUNhbGwgPSAodmVyYjogVmVyYklkLCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycykgPT4geyB2ZXJiOiBWZXJiSWQ7IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzIH07XG5cbi8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmVkIGEgcmVzcG9uc2UgYmFjayBmcm9tIHBsYXRmb3JtIGFuZCB3ZSBuZWVkIHRvIGRvd25ncmFkZSBpdCB0byBleHRlcm5hbCdzIHZlcnNpb24gKi9cbmV4cG9ydCB0eXBlIERvd25ncmFkZUV4ZWN1dGVSZXR1cm4gPSAoZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UpID0+IEV4ZWN1dGVSZXNwb25zZTtcblxuLyoqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gd2UgcmVjZWl2ZSBhIG5vdGlmaWNhdGlvbiBmcm9tIHBsYXRmb3JtIGFuZCB3ZSBuZWVkIHRvIGRvd25ncmFkZSBpdCB0byBleHRlcm5hbCdzIHZlcnNpb24gKi9cbmV4cG9ydCB0eXBlIERvd25ncmFkZU5vdGlmaWNhdGlvbiA9IChub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikgPT4gTm90aWZpY2F0aW9uO1xuXG4vLyBUaGlzIGlzIHdoZXJlIHdlIHdpbGwgc3RhcnQgdG8gZGVmaW5lIHNvbWUgb2YgdGhlc2UgdHJhbnNsYXRpb25zLlxuLy8gV2hlbiBtb2RpZnlpbmcgZXhpc3RpbmcgbW9kZWxzLCBhZGQgdGhlIHJlcXVpc2l0ZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBoZXJlLCB0aGVuIHVzZSB0aGVtXG4vLyBpbiB0aGUgVmVyc2lvbkNvbnZlcnRlckZhY3RvcnkgaW1wbGVtZW50YXRpb24uIEltcG9ydCBvbGQgdmVyc2lvbnMgYXMgeW91IHdvdWxkIGFueSBvdGhlciBtb2R1bGVcblxuLy8gMCA8LT4gVHJhbnNsYXRpb25zXG4vLyBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGltcG9ydCBmcm9tIHRoZSBWMCBkZWZpbml0aW9uIG9mIHRoZSBBUElcbi8vIGltcG9ydCAqIGFzIFYwIGZyb20gJ0B0YWJsZWF1LWFwaS1pbnRlcm5hbC1jb250cmFjdC1qc192MCc7XG5cbi8vIDEgPC0+IDIgVHJhbnNsYXRpb25zXG4vLyBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGltcG9ydCBmcm9tIHRoZSBWMSBkZWZpbml0aW9uIG9mIHRoZSBBUElcbi8vIGltcG9ydCAqIGFzIFYxIGZyb20gJ0B0YWJsZWF1LWFwaS1pbnRlcm5hbC1jb250cmFjdC1qc192MSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBEb3duZ3JhZGVXb3Jrc2hlZXROYW1lcyhleGVjdXRlUmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSk6IEV4ZWN1dGVSZXNwb25zZSB7XG4gIC8vIEZpeCB0aGUgZGFzaGJvYXJkIGZyaWVuZGx5IG5hbWUgaXNzdWUuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBjb21wYXRpYmxlLFxuICAvLyBzbyB3ZSBzdGlsbCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlcGx5LCBidXQgd2UgY29weSB0aGUgU2hlZXRJbmZvLm5hbWVcbiAgLy8gaW50byB0aGUgRGFzaGJvYXJkWm9uZS5uYW1lLCB3aGVyZSB2MSB3YW50cyB0byBmaW5kIGl0LlxuXG4gIGNvbnN0IGJvb3RzdHJhcEluZm8gPSBleGVjdXRlUmVzcG9uc2UucmVzdWx0IGFzIEV4dGVuc2lvbkJvb3RzdHJhcEluZm87XG4gIGlmIChib290c3RyYXBJbmZvLmV4dGVuc2lvbkRhc2hib2FyZEluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGJvb3RzdHJhcEluZm8uZXh0ZW5zaW9uRGFzaGJvYXJkSW5mby56b25lcy5mb3JFYWNoKCh6b25lKSA9PiB7XG4gICAgICBpZiAoem9uZS5zaGVldEluZm8pIHtcbiAgICAgICAgem9uZS5uYW1lID0gem9uZS5zaGVldEluZm8ubmFtZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEb3duZ3JhZGVGbGlwYm9hcmRab25lSUQobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiBOb3RpZmljYXRpb24ge1xuICAvLyBGaXggdGhlIEZsaXBib2FyZFpvbmVJZCBpc3N1ZS4gT2xkZXIgZXh0ZXJuYWwgdmVyc2lvbnMgc3RpbGwgY2hlY2sgZm9yIGZsaXBib2FyZFpvbmVJRHMuXG4gIC8vIFdoZW4gcnVubmluZyBhZ2FpbnN0IGEgbmV3ZXIgc2VydmVyLCBpZiBmbGlwYm9hcmRab25lSWQgaXMgYWJzZW50LCBzZXQgaXQgdG8gZGVmYXVsdCgwKS5cblxuICBpZiAobm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkID09PSBOb3RpZmljYXRpb25JZC5TZWxlY3RlZE1hcmtzQ2hhbmdlZCkge1xuICAgIGNvbnN0IHZpc3VhbE1vZGVsID0gbm90aWZpY2F0aW9uLmRhdGEgYXMgVmlzdWFsSWQ7XG4gICAgaWYgKHZpc3VhbE1vZGVsLmZsaXBib2FyZFpvbmVJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2aXN1YWxNb2RlbC5mbGlwYm9hcmRab25lSUQgPSAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3RpZmljYXRpb247XG59XG4iLCJpbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXhlY3V0ZVJlc3BvbnNlLCBOb3RpZmljYXRpb24sIFZlcmJJZCB9IGZyb20gJy4uLy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXInO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hbnlcblxuLyoqXG4gKiBUaGlzIHZlcnNpb24gY29udmVydGVyIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYnV0IGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBvciB3aGVuIHdlIGhhdmVcbiAqIGEgbWF0Y2hpbmcgcGxhdGZvcm0gYW5kIGV4dGVybmFsIHZlcnNpb24gbnVtYmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbElkZW50aXR5VmVyc2lvbkNvbnZlcnRlciBpbXBsZW1lbnRzIEV4dGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIHtcbiAgcHVibGljIGRvd25ncmFkZUV4ZWN1dGVDYWxsKHZlcmI6IGFueSwgcGFyYW1ldGVyczogYW55KTogeyB2ZXJiOiBWZXJiSWQ7IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzIH0ge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJiOiB2ZXJiIGFzIFZlcmJJZCxcbiAgICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgYXMgRXhlY3V0ZVBhcmFtZXRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB1cGdyYWRlRXhlY3V0ZVJldHVybihleGVjdXRlUmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSwgdmVyYjogVmVyYklkLCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyk6IEV4ZWN1dGVSZXNwb25zZSB7XG4gICAgcmV0dXJuIGV4ZWN1dGVSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGdyYWRlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogTm90aWZpY2F0aW9uIHtcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXhlY3V0ZVJlc3BvbnNlLCBOb3RpZmljYXRpb24sIFZlcmJJZCwgVmVyc2lvbk51bWJlciB9IGZyb20gJy4uLy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXInO1xuaW1wb3J0ICogYXMgVHJhbnNsYXRpb25zIGZyb20gJy4vRXh0ZXJuYWxWZXJzaW9uVHJhbnNsYXRpb25zJztcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55XG4vKipcbiAqIFRoZSB2ZXJzaW9uIGNvbnZlcnRlciBpcyBkZXNpZ25lZCB0byBhbGxvdyB0aGUgcGxhdGZvcm0gYW5kIGV4dGVybmFsIG1vZHVsZXNcbiAqIHRvIHNlZW1sZXNzbHkgY29tbXVuaWNhdGUgb3ZlciB0d28gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBpbnRlcm5hbCBBUEkuIFRoaXMgY29udmVydGVyXG4gKiBzdXBwb3J0cyBleHRlcm5hbCdzIHZlcnNpb24obWlub3IpID49IHBsYXRmb3JtJ3MgdmVyc2lvbihtaW5vcikuIFdoZW4gZXhlY3V0aW5nXG4gKiBjb21tYW5kcywgaXQgaXMgdXNlZCB0byBkb3duZ3JhZGUgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIHRvIHdoYXQgcGxhdGZvcm0ga25vd3Mgb24gdGhlIHdheSBpblxuICogYW5kIHVwZ3JhZGUgdGhlIHJlcHJlc2VudGF0aW9ucyBvbiB0aGUgd2F5IG91dC5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4dGVybmFsU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyIGltcGxlbWVudHMgRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyXG4gICAqXG4gICAqIEBwYXJhbSBfZXh0ZXJuYWxWZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCBhcGktZXh0ZXJuYWwtanMgaXMgdXNpbmdcbiAgICogQHBhcmFtIF9wbGF0Zm9ybVZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIGludGVybmFsIGNvbnRyYWN0IHRoZSBhcGktcGxhdGZvcm0tanMgaXMgdXNpbmdcbiAgICogQHBhcmFtIF9kb3duZ3JhZGVFeGVjdXRlQ2FsbFRyYW5zbGF0aW9ucyBPcmRlcmVkIGxpc3Qgb2YgdGhlIHRyYW5zbGF0aW9ucyB0byBwZXJmb3JtIHdoZW4gZG93bmdyYWRpbmcgY21kIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIF91cGdyYWRlRXhlY3V0ZVJldHVyblRyYW5zbGF0aW9ucyBPcmRlcmVkIGxpc3Qgb2YgdXBncmFkZSB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSBhZnRlciBhIGNtZCBpcyBleGVjdXRlZFxuICAgKiBAcGFyYW0gX3VwZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIHVwZ3JhZGUgbm90ZmljYXRpb25zIHRvIHBlcmZvcm0gb24gZXZlbnRzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZXh0ZXJuYWxWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICAgIHByaXZhdGUgX3BsYXRmb3JtVmVyc2lvbjogVmVyc2lvbk51bWJlcixcbiAgICBwcml2YXRlIF9kb3duZ3JhZGVFeGVjdXRlQ2FsbFRyYW5zbGF0aW9uczogQXJyYXk8VHJhbnNsYXRpb25zLkRvd25ncmFkZUV4ZWN1dGVDYWxsPixcbiAgICBwcml2YXRlIF91cGdyYWRlRXhlY3V0ZVJldHVyblRyYW5zbGF0aW9uczogQXJyYXk8VHJhbnNsYXRpb25zLlVwZ3JhZGVFeGVjdXRlUmV0dXJuPixcbiAgICBwcml2YXRlIF91cGdyYWRlTm90aWZpY2F0aW9uVHJhbnNsYXRpb25zOiBBcnJheTxUcmFuc2xhdGlvbnMuVXBncmFkZU5vdGlmaWNhdGlvbj4sXG4gICkge1xuICAgIGlmICh0aGlzLl9leHRlcm5hbFZlcnNpb24ubWFqb3IgPiB0aGlzLl9wbGF0Zm9ybVZlcnNpb24ubWFqb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgYmV0d2VlbiBleHRlcm5hbCB2ZXJzaW9uICR7dGhpcy5fZXh0ZXJuYWxWZXJzaW9uLm1ham9yfVxuICAgICAgYW5kICR7dGhpcy5fcGxhdGZvcm1WZXJzaW9uLm1ham9yfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkb3duZ3JhZGVFeGVjdXRlQ2FsbCh2ZXJiOiBhbnksIHBhcmFtZXRlcnM6IGFueSk6IHsgdmVyYjogVmVyYklkOyBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyB9IHtcbiAgICAvLyBQZXJmb3JtIHRoZSBkb3duZ3JhZGUgb2YgdGhlIHZlcmIgYW5kIHBhcmFtZXRlcnMgdG8gdGhlIGxldmVsIHRoYXQgcGxhdGZvcm0gaXMgdXNpbmdcbiAgICBsZXQgZG93bmdyYWRlZCA9IHsgdmVyYjogdmVyYiwgcGFyYW1ldGVyczogcGFyYW1ldGVycyB9O1xuICAgIGZvciAoY29uc3QgZG93bmdyYWRlVHJhbnNsYXRpb24gb2YgdGhpcy5fZG93bmdyYWRlRXhlY3V0ZUNhbGxUcmFuc2xhdGlvbnMpIHtcbiAgICAgIGRvd25ncmFkZWQgPSBkb3duZ3JhZGVUcmFuc2xhdGlvbihkb3duZ3JhZGVkLnZlcmIsIGRvd25ncmFkZWQucGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvd25ncmFkZWQ7XG4gIH1cblxuICBwdWJsaWMgdXBncmFkZUV4ZWN1dGVSZXR1cm4oZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UsIHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICAgIC8vIFBlcmZvcm0gdGhlIHVwZ3JhZGUgb2YgdGhlIHJlc3BvbnNlIHRvIHdoYXQgdGhlIGV4dGVybmFsIG1vZHVsZSBpcyBleHBlY3RpbmdcbiAgICBsZXQgdXBncmFkZWQgPSBleGVjdXRlUmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCB1cGdyYWRlVHJhbnNsYXRpb24gb2YgdGhpcy5fdXBncmFkZUV4ZWN1dGVSZXR1cm5UcmFuc2xhdGlvbnMpIHtcbiAgICAgIHVwZ3JhZGVkID0gdXBncmFkZVRyYW5zbGF0aW9uKHVwZ3JhZGVkLCB2ZXJiLCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBncmFkZWQ7XG4gIH1cblxuICBwdWJsaWMgdXBncmFkZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbik6IE5vdGlmaWNhdGlvbiB7XG4gICAgLy8gUGVyZm9ybSB0aGUgdXBncmFkZSBvZiBub3RpZmljYXRpb24gdG8gd2hhdCB0aGUgZXh0ZXJuYWwgbW9kdWxlIGlzIGV4cGVjdGluZ1xuICAgIGxldCB1cGdyYWRlZCA9IG5vdGlmaWNhdGlvbjtcbiAgICBmb3IgKGNvbnN0IHVwZ3JhZGVOb3RpZmljYXRpb24gb2YgdGhpcy5fdXBncmFkZU5vdGlmaWNhdGlvblRyYW5zbGF0aW9ucykge1xuICAgICAgdXBncmFkZWQgPSB1cGdyYWRlTm90aWZpY2F0aW9uKHVwZ3JhZGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBncmFkZWQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFZlcnNpb25OdW1iZXIgfSBmcm9tICcuLi8uLi9Kc0FwaUludGVybmFsQ29udHJhY3QnO1xuaW1wb3J0IHsgR2V0TWF4aW11bU1pbm9ySW5kZXgsIE1ham9yTWlub3JUcmFuc2xhdG9ycywgVmVyc2lvbkVxdWFsVG8gfSBmcm9tICcuLi9WZXJzaW9uQ29udmVydGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXInO1xuaW1wb3J0IHsgRXh0ZXJuYWxJZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIgfSBmcm9tICcuL0V4dGVybmFsSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyJztcbmltcG9ydCB7IEV4dGVybmFsU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyIH0gZnJvbSAnLi9FeHRlcm5hbFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlcic7XG5pbXBvcnQgKiBhcyBUcmFuc2xhdGlvbnNFeHRlcm5hbCBmcm9tICcuL0V4dGVybmFsVmVyc2lvblRyYW5zbGF0aW9ucyc7XG5pbXBvcnQge1xuICBEb3duZ3JhZGVMb2dpY2FsVGFibGVEYXRhQXN5bmMsXG4gIERvd25ncmFkZVVuZGVybHlpbmdUYWJsZURhdGFBc3luYyxcbiAgVXBncmFkZURhdGFUYWJsZVJvd3NBbmRDb2x1bW5zLFxuICBVcGdyYWRlRGF0YVRhYmxlVHlwZXMsXG59IGZyb20gJy4vRXh0ZXJuYWxWZXJzaW9uVHJhbnNsYXRpb25zJztcblxuLy8gQSBtYXBwaW5nIGZyb20gdGhlIGN1cnJlbnQgY2xpZW50IHZlcnNpb24gb2YgaW50ZXJuYWwtY29udHJhY3QgdG8gYW4gb2xkZXIgcGxhdGZvcm0gdmVyc2lvbiBvZiB0aGUgY29udHJhY3QuXG4vLyBFYWNoIHZlcnNpb24gYnVtcCBjYW4gaGF2ZSBhbiBhcnJheSBvZiB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSBpbiBvcmRlci5cbi8vIFRoZXNlIHRyYW5zbGF0aW9ucyBoYW5kbGUgZG93bmdyYWRlRXhlY3V0ZUNhbGwgYW5kIHVwZ3JhZGVFeGVjdXRlUmV0dXJuIGFuZCBhcmUgbWVhbnQgdG8gYmUgY2FsbGVkIG9uIHRoZVxuLy8gY2xpZW50L2V4dGVybmFsIHNpZGUuXG4vLyBXaGVuIHVwZGF0aW5nIHRoZSBtYWpvciBvciBtaW5vciB2ZXJzaW9uIG9mIG91ciBpbnRlcm5hbC1jb250cmFjdCwgeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLlxuLy8gKiBJZiB0aGVyZSBhcmUgdHJhbnNsYXRpb25zIHRvIGFkZCwgYWRkIHRoZW0gdG8gdGhlIHZlcnNpb24gdG8gJ3VwZ3JhZGUgZnJvbScgb3IgJ2Rvd25ncmFkZSB0bycuXG5leHBvcnQgY29uc3QgRXhlY3V0ZU1pbm9yRG93bmdyYWRlQ2FsbEV4dGVybmFsOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zRXh0ZXJuYWwuRG93bmdyYWRlRXhlY3V0ZUNhbGw+ID0ge1xuICAxOiB7XG4gICAgOTogW10sIC8vIE5vdGUgdGhhdCB3ZSBwdXQgZG93bmdyYWRlcyBmcm9tIDEuMTAgdG8gMS45IGluIHRoZSBbMV1bOV0gYnVja2V0XG4gICAgMTM6IFtEb3duZ3JhZGVVbmRlcmx5aW5nVGFibGVEYXRhQXN5bmMsIERvd25ncmFkZUxvZ2ljYWxUYWJsZURhdGFBc3luY10sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgRXhlY3V0ZU1pbm9yVXBncmFkZVJldHVybkV4dGVybmFsOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zRXh0ZXJuYWwuVXBncmFkZUV4ZWN1dGVSZXR1cm4+ID0ge1xuICAxOiB7XG4gICAgOTogW1VwZ3JhZGVEYXRhVGFibGVUeXBlc10sIC8vIE5vdGUgdGhhdCB3ZSBwdXQgdXBncmFkZXMgZnJvbSAxLjkgdG8gMS4xMCBpbiB0aGUgWzFdWzldIGJ1Y2tldFxuICAgIDI5OiBbVXBncmFkZURhdGFUYWJsZVJvd3NBbmRDb2x1bW5zXSwgLy8gMjAyMS4xIHdhcyByZWxlYXNlZCB3aXRoIDEuMjkuIFVwZ3JhZGUgZnJvbSAxLjI5IGluIHRoZSBbMV1bMjldIGJ1Y2tldFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEV4ZWN1dGVNaW5vclVwZ3JhZGVOb3RpZmljYXRpb246IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnNFeHRlcm5hbC5VcGdyYWRlTm90aWZpY2F0aW9uPiA9IHtcbiAgMToge1xuICAgIDk6IFtdLCAvLyBOb3RlIHRoYXQgd2UgcHV0IHVwZ3JhZGVzIGZyb20gMS45IHRvIDEuMTAgaW4gdGhlIFsxXVs5XSBidWNrZXRcbiAgfSxcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gdXBncmFkZSBhbmQgZG93bmdyYWRlXG4gKiB0aGUgY29udHJhY3QgYmV0d2VlbiB0aGUgdHdvIHZlcnNpb25zIHdoaWNoIGFyZSBzcGVjaWZpZWQuIElmIGV4dGVybmFsTWFqb3JWZXJzaW9uIGlzIGxlc3MgdGhhblxuICogcGxhdGZvcm1NYWpvclZlcnNpb24sIGFuIEV4dGVybmFsSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBIYW5kbGVzIHVwZ3JhZGUvZG93bmdyYWRlIGZvciBib3RoIG1ham9yIGFuZCBtaW5vciB1cGRhdGVzLlxuICpcbiAqIEBwYXJhbSBleHRlcm5hbFZlcnNpb24gVmVyc2lvbk51bWJlciBvZiB0aGUgaW50ZXJuYWwgYXBpIHdoaWNoIHRoZSBleHRlcm5hbCBtb2R1bGUgaXMgdXNpbmdcbiAqIEBwYXJhbSBwbGF0Zm9ybVZlcnNpb24gVmVyc2lvbk51bWJlciBvZiB0aGUgaW50ZXJuYWwgYXBpIHdoaWNoIHRoZSBwbGF0Zm9ybSBpcyB1c2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlRXh0ZXJuYWxDb21wYXRpYmxlVmVyc2lvbkNvbnZlcnRlcihcbiAgZXh0ZXJuYWxWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICBwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4pOiBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB7XG4gIHJldHVybiBDcmVhdGVFeHRlcm5hbENvbXBhdGlibGVWZXJzaW9uQ29udmVydGVyV2l0aFRyYW5zbGF0b3JzKFxuICAgIGV4dGVybmFsVmVyc2lvbixcbiAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgRXhlY3V0ZU1pbm9yRG93bmdyYWRlQ2FsbEV4dGVybmFsLFxuICAgIEV4ZWN1dGVNaW5vclVwZ3JhZGVSZXR1cm5FeHRlcm5hbCxcbiAgICBFeGVjdXRlTWlub3JVcGdyYWRlTm90aWZpY2F0aW9uLFxuICApO1xufVxuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIENyZWF0ZUV4dGVybmFsQ29tcGF0aWJsZVZlcnNpb25Db252ZXJ0ZXJXaXRoVHJhbnNsYXRvcnMuXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSB1cGdyYWRlLCBkb3duZ3JhZGUgYXJyYXlzIHNvIHRoYXQgYWxsIHRoZSBsb2dpYyBjYW4gYmUgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSBleHRlcm5hbFZlcnNpb24gVmVyc2lvbk51bWJlciBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3Qgd2hpY2ggdGhlIGV4dGVybmFsIG1vZHVsZSBpcyB1c2luZ1xuICogQHBhcmFtIHBsYXRmb3JtVmVyc2lvbiBWZXJzaW9uTnVtYmVyIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCB3aGljaCB0aGUgcGxhdGZvcm0gaXMgdXNpbmdcbiAqIEBwYXJhbSB1cGdyYWRlcyBNYWpvck1pbm9yVHJhbnNsYXRvcnMgZm9yIHJlc3BvbnNlIHVwZ3JhZGVzXG4gKiBAcGFyYW0gZG93bmdyYWRlcyBNYWpvck1pbm9yVHJhbnNsYXRvcnMgZm9yIGV4ZWN1dGUgY2FsbCBkb3duZ3JhZGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVFeHRlcm5hbENvbXBhdGlibGVWZXJzaW9uQ29udmVydGVyV2l0aFRyYW5zbGF0b3JzKFxuICBleHRlcm5hbFZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gIHBsYXRmb3JtVmVyc2lvbjogVmVyc2lvbk51bWJlcixcbiAgZG93bmdyYWRlczogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9uc0V4dGVybmFsLkRvd25ncmFkZUV4ZWN1dGVDYWxsPixcbiAgdXBncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnNFeHRlcm5hbC5VcGdyYWRlRXhlY3V0ZVJldHVybj4sXG4gIHVwZ3JhZGVOb3RpZmljYXRpb25zOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zRXh0ZXJuYWwuVXBncmFkZU5vdGlmaWNhdGlvbj4sXG4pOiBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB7XG4gIGNvbnN0IGV4dGVybmFsTWFqb3JWZXJzaW9uOiBudW1iZXIgPSBleHRlcm5hbFZlcnNpb24ubWFqb3I7XG4gIGNvbnN0IHBsYXRmb3JtTWFqb3JWZXJzaW9uOiBudW1iZXIgPSBwbGF0Zm9ybVZlcnNpb24ubWFqb3I7XG4gIGNvbnN0IHBsYXRmb3JtTWlub3JWZXJzaW9uOiBudW1iZXIgPSBwbGF0Zm9ybVZlcnNpb24ubWlub3I7XG5cbiAgLy8gVGhpcyBjaGVjayBpcyBwcmVzZW50IGluIFZlcnNpb25Db252ZXJ0ZXJGYWN0b3J5LiBXZSB0aHJvdyB0aGUgc2FtZSBlcnJvciBoZXJlIGFzIHdlbGwuXG4gIC8vIEhlbmNlIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgbWlub3IgdmVyc2lvbnMgZm9yIHRyYW5zbGF0aW9ucy5cbiAgaWYgKGV4dGVybmFsTWFqb3JWZXJzaW9uID4gcGxhdGZvcm1NYWpvclZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dGVybmFsIHZlcnNpb24gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcGxhdGZvcm0gdmVyc2lvbi5cbiAgICBleHRlcm5hbE1ham9yVmVyc2lvbj0ke2V4dGVybmFsTWFqb3JWZXJzaW9ufSBwbGF0Zm9ybU1ham9yVmVyc2lvbj0ke3BsYXRmb3JtTWFqb3JWZXJzaW9ufWApO1xuICB9XG5cbiAgaWYgKGV4dGVybmFsTWFqb3JWZXJzaW9uIDwgcGxhdGZvcm1NYWpvclZlcnNpb24gfHwgVmVyc2lvbkVxdWFsVG8oZXh0ZXJuYWxWZXJzaW9uLCBwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgcmV0dXJuIG5ldyBFeHRlcm5hbElkZW50aXR5VmVyc2lvbkNvbnZlcnRlcigpO1xuICB9XG5cbiAgLy8gV2FsayB0aGUgc3BhbiBiZXR3ZWVuIHRoZSB2ZXJzaW9ucyB3ZSBoYXZlIGhlcmUgYW5kIGNvbGxlY3QgdGhlIHVwZ3JhZGUgYW5kIGRvd25ncmFkZXMgbmVjZXNzYXJ5XG4gIGNvbnN0IG5lZWRlZEV4ZWN1dGVDYWxsRG93bmdyYWRlOiBBcnJheTxUcmFuc2xhdGlvbnNFeHRlcm5hbC5Eb3duZ3JhZGVFeGVjdXRlQ2FsbD4gPSBHZXROZWVkZWRFeHRlcm5hbFRyYW5zbGF0aW9ucyhcbiAgICBwbGF0Zm9ybU1ham9yVmVyc2lvbixcbiAgICBwbGF0Zm9ybU1pbm9yVmVyc2lvbixcbiAgICBkb3duZ3JhZGVzLFxuICApO1xuXG4gIGNvbnN0IG5lZWRlZEV4ZWN1dGVSZXR1cm5VcGdyYWRlczogQXJyYXk8VHJhbnNsYXRpb25zRXh0ZXJuYWwuVXBncmFkZUV4ZWN1dGVSZXR1cm4+ID0gR2V0TmVlZGVkRXh0ZXJuYWxUcmFuc2xhdGlvbnMoXG4gICAgcGxhdGZvcm1NYWpvclZlcnNpb24sXG4gICAgcGxhdGZvcm1NaW5vclZlcnNpb24sXG4gICAgdXBncmFkZXMsXG4gICk7XG5cbiAgY29uc3QgbmVlZGVkTm90aWZpY2F0aW9uVXBncmFkZXM6IEFycmF5PFRyYW5zbGF0aW9uc0V4dGVybmFsLlVwZ3JhZGVOb3RpZmljYXRpb24+ID0gR2V0TmVlZGVkRXh0ZXJuYWxUcmFuc2xhdGlvbnMoXG4gICAgcGxhdGZvcm1NYWpvclZlcnNpb24sXG4gICAgcGxhdGZvcm1NaW5vclZlcnNpb24sXG4gICAgdXBncmFkZU5vdGlmaWNhdGlvbnMsXG4gICk7XG5cbiAgLy8gUmV2ZXJzZSB0aGUgZG93bmdyYWRlIGNhbGxzLCBzbyB0aGF0IHdlIHN0YXJ0IHRoZSBkb3duZ3JhZGUgZnJvbSB0aGUgZXh0ZXJuYWwgdmVyc2lvbiB0byB0aGUgcGxhdGZvcm0gdmVyc2lvblxuICBuZWVkZWRFeGVjdXRlQ2FsbERvd25ncmFkZS5yZXZlcnNlKCk7XG4gIHJldHVybiBuZXcgRXh0ZXJuYWxTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXIoXG4gICAgZXh0ZXJuYWxWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICBuZWVkZWRFeGVjdXRlQ2FsbERvd25ncmFkZSxcbiAgICBuZWVkZWRFeGVjdXRlUmV0dXJuVXBncmFkZXMsXG4gICAgbmVlZGVkTm90aWZpY2F0aW9uVXBncmFkZXMsXG4gICk7XG59XG5cbmZ1bmN0aW9uIEdldE5lZWRlZEV4dGVybmFsVHJhbnNsYXRpb25zPFQ+KFxuICBwbGF0Zm9ybU1ham9yVmVyc2lvbjogbnVtYmVyLFxuICBwbGF0Zm9ybU1pbm9yVmVyc2lvbjogbnVtYmVyLFxuICBtYWpvck1pbm9yVHJhbnNsYXRvcnM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUPixcbik6IEFycmF5PFQ+IHtcbiAgY29uc3QgbmVlZGVkVHJhbnNsYXRpb25zOiBBcnJheTxUPiA9IFtdO1xuXG4gIGlmIChwbGF0Zm9ybU1ham9yVmVyc2lvbiBpbiBtYWpvck1pbm9yVHJhbnNsYXRvcnMpIHtcbiAgICBjb25zdCBzdGFydCA9IHBsYXRmb3JtTWlub3JWZXJzaW9uO1xuICAgIGNvbnN0IG1heGltdW1NaW5vclZlcnNpb24gPSBHZXRNYXhpbXVtTWlub3JJbmRleChPYmplY3Qua2V5cyhtYWpvck1pbm9yVHJhbnNsYXRvcnNbcGxhdGZvcm1NYWpvclZlcnNpb25dKSk7XG4gICAgZm9yIChsZXQgbWlub3IgPSBzdGFydDsgbWlub3IgPD0gbWF4aW11bU1pbm9yVmVyc2lvbjsgbWlub3IrKykge1xuICAgICAgaWYgKG1pbm9yIGluIG1ham9yTWlub3JUcmFuc2xhdG9yc1twbGF0Zm9ybU1ham9yVmVyc2lvbl0pIHtcbiAgICAgICAgbmVlZGVkVHJhbnNsYXRpb25zLnB1c2goLi4ubWFqb3JNaW5vclRyYW5zbGF0b3JzW3BsYXRmb3JtTWFqb3JWZXJzaW9uXVttaW5vcl0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkZWRUcmFuc2xhdGlvbnM7XG59XG4iLCJpbXBvcnQge1xuICBBcGlTaG93RGF0YVRhYmxlU2VudGluZWwsXG4gIERhdGFIZWFkZXIsXG4gIERhdGFUYWJsZSxcbiAgRGF0YVR5cGVDb252ZXJ0ZXIsXG4gIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICBFeGVjdXRlUmVzcG9uc2UsXG4gIEludGVybmFsVGFibGVhdUVycm9yLFxuICBOb3RpZmljYXRpb24sXG4gIFBhcmFtZXRlcklkLFxuICBTZWxlY3RlZE1hcmtzVGFibGUsXG4gIFVuZGVybHlpbmdEYXRhVGFibGUsXG4gIFZlcmJJZCxcbn0gZnJvbSAnLi4vLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55XG5cbi8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgbmV3ZXIgdmVyc2lvbiBhbmQgcGFyYW1ldGVycyBmcm9tIHRoZSBleHRlcm5hbCBiZWZvcmUgd2Ugc2VuZCBpdCB0byBwbGF0Zm9ybSAqL1xuZXhwb3J0IHR5cGUgRG93bmdyYWRlRXhlY3V0ZUNhbGwgPSAodmVyYjogVmVyYklkLCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycykgPT4geyB2ZXJiOiBWZXJiSWQ7IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzIH07XG5cbi8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYSByZXNwb25zZSBiYWNrIGZyb20gcGxhdGZvcm0gYW5kIHdlIG5lZWQgdG8gdXBncmFkZSBpdCB0byBleHRlcm5hbCdzIHZlcnNpb25cbiAqICBUaGUgdmVyYiBhbmQgcGFyYW1ldGVycyBwcm92aWRlIGEgY29udGV4dCB0byBkZWNpZGUgaG93IHRvIGhhbmRsZSB0aGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZ3JhZGVFeGVjdXRlUmV0dXJuID0gKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlLCB2ZXJiOiBWZXJiSWQsIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKSA9PiBFeGVjdXRlUmVzcG9uc2U7XG5cbi8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYSBub3RpZmljYXRpb24gZnJvbSBwbGF0Zm9ybSBhbmQgd2UgbmVlZCB0byB1cGdyYWRlIGl0IHRvIGV4dGVybmFsJ3MgdmVyc2lvbiAqL1xuZXhwb3J0IHR5cGUgVXBncmFkZU5vdGlmaWNhdGlvbiA9IChub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikgPT4gTm90aWZpY2F0aW9uO1xuXG4vLyAxLjIgLT4gMS4wIFRyYW5zbGF0aW9uc1xuLy8gVW5jb21tZW50IHRoaXMgbGluZSB0byBpbXBvcnQgZnJvbSB0aGUgVjEgZGVmaW5pdGlvbiBvZiB0aGUgQVBJXG4vLyBpbXBvcnQgKiBhcyBWMSBmcm9tICdAdGFibGVhdS1hcGktaW50ZXJuYWwtY29udHJhY3QtanNfdjEnO1xuXG4vKipcbiAqIFByaW9yIHRvIDIwMTkuMiAoaW50ZXJuYWwtY29udHJhY3QgdjEuOSksIERhdGFWYWx1ZS52YWx1ZSB3ZXJlIGFsbCBzdHJpbmdzLlxuICogR28gdGhyb3VnaCBhbGwgRGF0YVZhbHVlIG9iamVjdHMuIElmIHdlIGhhdmUgYSBzdHJpbmcsIGJ1dCB0aGUgdHlwZSBzaG91bGQgbm90IGJlIGEgc3RyaW5nLFxuICogY29udmVydCBpdCB0byB0aGUgY29ycmVjdCB0eXBlLiBUaGUgdHlwZSBvZiBEYXRhVmFsdWUudmFsdWUgaXMgJ2FueScgaW4gdGhlIGNvbnRyYWN0LCBzb1xuICogdGhpcyBjaGFuZ2UgZG9lc24ndCBuZWVkIGFueSB1cGRhdGVzIHRvIGNsYXNzZXMgb3IgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBVcGdyYWRlRGF0YVRhYmxlVHlwZXMoZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UsIHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICBpZiAoIWV4ZWN1dGVSZXNwb25zZSkge1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICBjb25zdCBvbGRVbmRlcmx5aW5nRGF0YVRhYmxlID0gZXhlY3V0ZVJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICBpZiAob2xkVW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhICE9PSB1bmRlZmluZWQgJiYgb2xkVW5kZXJseWluZ0RhdGFUYWJsZS5pc1N1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnZlcnREYXRhVmFsdWVzKG9sZFVuZGVybHlpbmdEYXRhVGFibGUuZGF0YSk7XG4gICAgcmV0dXJuIGV4ZWN1dGVSZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IG9sZFNlbGVjdGVkTWFya3NUYWJsZSA9IGV4ZWN1dGVSZXNwb25zZS5yZXN1bHQgYXMgU2VsZWN0ZWRNYXJrc1RhYmxlO1xuICBpZiAob2xkU2VsZWN0ZWRNYXJrc1RhYmxlLmRhdGEgIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KG9sZFNlbGVjdGVkTWFya3NUYWJsZS5kYXRhKSkge1xuICAgIG9sZFNlbGVjdGVkTWFya3NUYWJsZS5kYXRhLmZvckVhY2goKG1hcmtzVGFibGUpID0+IHtcbiAgICAgIGNvbnZlcnREYXRhVmFsdWVzKG1hcmtzVGFibGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xufVxuXG4vKipcbiAqIFByaW9yIHRvIDIwMjAuMiAoaW50ZXJuYWwtY29udHJhY3QgdjEuMTMgYW5kIG9sZGVyKSwgd29ya3NoZWV0LmdldFVuZGVybHlpbmdUYWJsZURhdGFBc3luYyBkb2Vzbid0IGV4aXN0LlxuICogTWFwIGl0IHRvIHRoZSBvbGRlciBHZXRVbmRlcmx5aW5nRGF0YSB2ZXJiIGFuZCB2YWxpZGF0ZSB0aGUgdGhlIGxvZ2ljYWwgdGFibGUgSWQuXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gRG93bmdyYWRlVW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKFxuICB2ZXJiOiBWZXJiSWQsXG4gIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzLFxuKToge1xuICB2ZXJiOiBWZXJiSWQ7XG4gIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzO1xufSB7XG4gIGlmICh2ZXJiID09PSBWZXJiSWQuR2V0VW5kZXJseWluZ1RhYmxlRGF0YSkge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyc0Zvck9iamVjdE1vZGVsKHZlcmIsIHBhcmFtZXRlcnMpO1xuICAgIHZlcmIgPSBWZXJiSWQuR2V0VW5kZXJseWluZ0RhdGE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2ZXJiOiB2ZXJiLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG4gIH07XG59XG5cbi8qKlxuICogUHJpb3IgdG8gMjAyMC4yIChpbnRlcm5hbC1jb250cmFjdCB2MS4xMyBhbmQgb2xkZXIpLCBkYXRhc291cmNlLmdldExvZ2ljYWxUYWJsZURhdGFBc3luYyBkb2Vzbid0IGV4aXN0LlxuICogTWFwIGl0IHRvIHRoZSBvbGRlciBHZXREYXRhU291cmNlRGF0YSB2ZXJiIGFuZCB2YWxpZGF0ZSB0aGUgdGhlIGxvZ2ljYWwgdGFibGUgSWQuXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gRG93bmdyYWRlTG9naWNhbFRhYmxlRGF0YUFzeW5jKFxuICB2ZXJiOiBWZXJiSWQsXG4gIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzLFxuKToge1xuICB2ZXJiOiBWZXJiSWQ7XG4gIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzO1xufSB7XG4gIGlmICh2ZXJiID09PSBWZXJiSWQuR2V0TG9naWNhbFRhYmxlRGF0YSkge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyc0Zvck9iamVjdE1vZGVsKHZlcmIsIHBhcmFtZXRlcnMpO1xuICAgIHZlcmIgPSBWZXJiSWQuR2V0RGF0YVNvdXJjZURhdGE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2ZXJiOiB2ZXJiLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREYXRhVmFsdWVzKHRhYmxlOiBEYXRhVGFibGUpOiB2b2lkIHtcbiAgLy8gZGF0YVRhYmxlIGlzIGEgdHdvLWRpbWVuc2lvbmFsIGFycmF5IG9mIGRhdGEuIEZpcnN0IGluZGV4IGlzIHRoZSByb3csIHNlY29uZCBpcyB0aGUgY29sdW1uLlxuICBpZiAodGFibGUgPT09IHVuZGVmaW5lZCB8fCB0YWJsZS5kYXRhVGFibGUgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheSh0YWJsZS5kYXRhVGFibGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGFibGUuZGF0YVRhYmxlLmZvckVhY2goKHJvdykgPT4ge1xuICAgIHJvdy5mb3JFYWNoKChkYXRhVmFsdWUsIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRhdGFWYWx1ZS52YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBkYXRhVmFsdWUudmFsdWUgPSBEYXRhVHlwZUNvbnZlcnRlci5jb252ZXJ0VmFsdWVBc1N0cmluZ1RvVmFsdWUodmFsdWUsIHRhYmxlLmhlYWRlcnNbY29sdW1uSW5kZXhdLmRhdGFUeXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIFRvRG86IFRGUzEwNjkwMjcgUmVmYWN0b3IgaW5wdXQgdmVyYnMgJiBwYXJhbWV0ZXJzIGluIGFwaS1pbnRlcm5hbC1jb250cmFjdCBVcGdyYWRlL0Rvd25ncmFkZSBmcmFtZXdvcmtcbmZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1ldGVyc0Zvck9iamVjdE1vZGVsKHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiB2b2lkIHtcbiAgaWYgKHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuTG9naWNhbFRhYmxlSWRdICE9PSBBcGlTaG93RGF0YVRhYmxlU2VudGluZWwuU2luZ2xlVGFibGVJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsb2dpY2FsIHRhYmxlIGlkIHBhc3NlZCB0byAke3ZlcmJ9LmApIGFzIEludGVybmFsVGFibGVhdUVycm9yO1xuICB9XG59XG5cbi8qKlxuICogUHJpb3IgdG8gMjAyMS4yIChpbnRlcm5hbC1jb250cmFjdCB2MS4yOSBhbmQgYmVsb3cpLCBnZXRTdW1tYXJ5RGF0YUFzeW5jIGRpZCBub3Qgc3VwcG9ydCBtYXhSb3dzLFxuICogYW5kIGFueSBnZXQuLi5EYXRhQXN5bmMgZGlkIG5vdCBzdXBwb3J0IGNvbHVtbnNUb0luY2x1ZGVCeUlkLlxuICogVHJpbSByZXN1bHQgdG8gbWF4Um93cyBpZiBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgcGFyYW1ldGVycyBmb3IgZ2V0U3VtbWFyeURhdGFBc3luY1xuICogVHJpbSBjb2x1bW5zIHRvIGNvbHVtbnNUb0luY2x1ZGUgaWYgaW5jbHVkZWQgaW4gdGhlIHBhcmFtZXRlcnMgZm9yIGFueSBnZXQuLi5EYXRhQXN5bmNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFVwZ3JhZGVEYXRhVGFibGVSb3dzQW5kQ29sdW1ucyhcbiAgZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UsXG4gIHZlcmI6IFZlcmJJZCxcbiAgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMsXG4pOiBFeGVjdXRlUmVzcG9uc2Uge1xuICBpZiAoaXNHZXRTdW1tYXJ5RGF0YVZlcmIodmVyYikgJiYgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5NYXhSb3dzXSkge1xuICAgIGV4ZWN1dGVSZXNwb25zZSA9IGFkanVzdERhdGFSb3dMZW5ndGgoZXhlY3V0ZVJlc3BvbnNlLCBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLk1heFJvd3NdIGFzIG51bWJlcik7XG4gIH1cblxuICBpZiAoaXNHZXRUYWJsZURhdGFWZXJiKHZlcmIpICYmIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZUJ5SWRdKSB7XG4gICAgZXhlY3V0ZVJlc3BvbnNlID0gYWRqdXN0RGF0YUNvbHVtbnMoZXhlY3V0ZVJlc3BvbnNlLCBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXSBhcyBzdHJpbmdbXSk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xufVxuXG5mdW5jdGlvbiBpc0dldFN1bW1hcnlEYXRhVmVyYih2ZXJiOiBWZXJiSWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZlcmIgPT09IFZlcmJJZC5HZXREYXRhU3VtbWFyeURhdGE7XG59XG5cbmZ1bmN0aW9uIGlzR2V0VGFibGVEYXRhVmVyYih2ZXJiOiBWZXJiSWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2ZXJiID09PSBWZXJiSWQuR2V0RGF0YVN1bW1hcnlEYXRhIHx8XG4gICAgdmVyYiA9PT0gVmVyYklkLkdldFVuZGVybHlpbmdUYWJsZURhdGEgfHxcbiAgICB2ZXJiID09PSBWZXJiSWQuR2V0TG9naWNhbFRhYmxlRGF0YSB8fFxuICAgIHZlcmIgPT09IFZlcmJJZC5HZXREYXRhU291cmNlRGF0YSB8fFxuICAgIHZlcmIgPT09IFZlcmJJZC5HZXRVbmRlcmx5aW5nRGF0YVxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3REYXRhUm93TGVuZ3RoKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlLCBtYXhSb3dzOiBudW1iZXIpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICBjb25zdCB1bmRlcmx5aW5nRGF0YVRhYmxlID0gZXhlY3V0ZVJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICBpZiAoIXVuZGVybHlpbmdEYXRhVGFibGUuZGF0YSB8fCAhQXJyYXkuaXNBcnJheSh1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuZGF0YVRhYmxlKSkge1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICBpZiAobWF4Um93cyA+IDAgJiYgbWF4Um93cyA8IHVuZGVybHlpbmdEYXRhVGFibGUuZGF0YS5kYXRhVGFibGUubGVuZ3RoKSB7XG4gICAgdW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmRhdGFUYWJsZS5sZW5ndGggPSBtYXhSb3dzO1xuICB9XG4gIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIGFkanVzdERhdGFDb2x1bW5zKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlLCBjb2x1bW5zVG9JbmNsdWRlOiBzdHJpbmdbXSk6IEV4ZWN1dGVSZXNwb25zZSB7XG4gIGlmIChjb2x1bW5zVG9JbmNsdWRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICAvLyB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgVW5kZXJseWluZ0RhdGFUYWJsZVxuICBjb25zdCB1bmRlcmx5aW5nRGF0YVRhYmxlID0gZXhlY3V0ZVJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICBpZiAoIXVuZGVybHlpbmdEYXRhVGFibGUuZGF0YSB8fCAhQXJyYXkuaXNBcnJheSh1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuZGF0YVRhYmxlKSB8fCAhQXJyYXkuaXNBcnJheSh1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuaGVhZGVycykpIHtcbiAgICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xuICB9XG5cbiAgLy8gMS4gZmlsdGVyIHRoZSBoZWFkZXJzIHRvIG9ubHkgY29sdW1uc1RvSW5jbHVkZVxuICAvLyAyLiB1c2UgdGhlIG5ldyBoZWFkZXJzIHRvIGZpbHRlciBhbGwgcm93c1xuICAvLyAzLiB1cGRhdGUgdGhlIGluZGljZXMgaW4gb3VyIG5ldyBoZWFkZXJzXG4gIGNvbnN0IG5ld0hlYWRlcnM6IERhdGFIZWFkZXJbXSA9IHVuZGVybHlpbmdEYXRhVGFibGUuZGF0YS5oZWFkZXJzLmZpbHRlcigoaGVhZGVyLCBpbmRleCkgPT5cbiAgICBjb2x1bW5zVG9JbmNsdWRlLmZpbmQoKG5hbWUpID0+IG5hbWUgPT09IGhlYWRlci5maWVsZE5hbWUpLFxuICApO1xuICB1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuZGF0YVRhYmxlLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcbiAgICB1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuZGF0YVRhYmxlW2luZGV4XSA9IHJvdy5maWx0ZXIoXG4gICAgICAodmFsdWUsIHZhbHVlSW5kZXgpID0+IG5ld0hlYWRlcnMuZmluZEluZGV4KChoZWFkZXIpID0+IGhlYWRlci5pbmRleCA9PT0gdmFsdWVJbmRleCkgIT09IC0xLFxuICAgICk7XG4gIH0pO1xuICBsZXQgbmV3SW5kZXggPSAwO1xuICB1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuaGVhZGVycyA9IG5ld0hlYWRlcnMubWFwKChoZWFkZXIpID0+IHtcbiAgICBoZWFkZXIuaW5kZXggPSBuZXdJbmRleCsrO1xuICAgIHJldHVybiBoZWFkZXI7XG4gIH0pO1xuXG4gIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG59XG4iLCIvLyBFeHBvcnQgZXZlcnl0aGluZyB3aGljaCBoYWQgYmVlbiBwcmV2aW91c2x5IGluIHRoZSBhcGktc2hhcmVkIG1vZHVsZVxuXG5leHBvcnQgeyBBcGlWZXJzaW9uIH0gZnJvbSAnLi9BcGlTaGFyZWQvQXBpVmVyc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVNoYXJlZC9Dcm9zc0ZyYW1lL0Nyb3NzRnJhbWVCb290c3RyYXAnO1xuZXhwb3J0IHsgQ3Jvc3NGcmFtZURpc3BhdGNoZXIgfSBmcm9tICcuL0FwaVNoYXJlZC9Dcm9zc0ZyYW1lL0Nyb3NzRnJhbWVEaXNwYXRjaGVyJztcbmV4cG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9EYXRhU291cmNlJztcbmV4cG9ydCB7IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4vQXBpU2hhcmVkL0VudW1NYXBwaW5ncy9FeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MnO1xuZXhwb3J0IHsgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi9BcGlTaGFyZWQvRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyc7XG5leHBvcnQgeyBFdmVudExpc3RlbmVyTWFuYWdlciB9IGZyb20gJy4vQXBpU2hhcmVkL0V2ZW50TGlzdGVuZXJNYW5hZ2VyJztcbmV4cG9ydCB7IEZpZWxkIH0gZnJvbSAnLi9BcGlTaGFyZWQvRmllbGQnO1xuZXhwb3J0IHsgQ3VzdG9tVmlld0ltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL0N1c3RvbVZpZXdJbXBsJztcbmV4cG9ydCB7IERhc2hib2FyZEltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL0Rhc2hib2FyZEltcGwnO1xuZXhwb3J0IHsgRGFzaGJvYXJkT2JqZWN0SW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvRGFzaGJvYXJkT2JqZWN0SW1wbCc7XG5leHBvcnQgeyBEYXRhU291cmNlSW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvRGF0YVNvdXJjZUltcGwnO1xuZXhwb3J0IHsgUGFyYW1ldGVySW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvUGFyYW1ldGVySW1wbCc7XG5leHBvcnQgeyBTaGVldEltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1NoZWV0SW1wbCc7XG5leHBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9TaGVldEluZm9JbXBsJztcbmV4cG9ydCB7IFNpbmdsZUV2ZW50TWFuYWdlckltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1NpbmdsZUV2ZW50TWFuYWdlckltcGwnO1xuZXhwb3J0IHsgU3RvcnlJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9TdG9yeUltcGwnO1xuZXhwb3J0IHsgU3RvcnlQb2ludEltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1N0b3J5UG9pbnRJbXBsJztcbmV4cG9ydCB7IFN0b3J5UG9pbnRJbmZvSW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvU3RvcnlQb2ludEluZm9JbXBsJztcbmV4cG9ydCB7IFdvcmtib29rSW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvV29ya2Jvb2tJbXBsJztcbmV4cG9ydCB7IFdvcmtzaGVldEltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1dvcmtzaGVldEltcGwnO1xuZXhwb3J0IHsgUG9pbnQgfSBmcm9tICcuL0FwaVNoYXJlZC9Qb2ludCc7XG5leHBvcnQgeyBBbm5vdGF0aW9uU2VydmljZSB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL0Fubm90YXRpb25TZXJ2aWNlJztcbmV4cG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvRGF0YVNvdXJjZVNlcnZpY2UnO1xuZXhwb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL0V4cG9ydFNlcnZpY2UnO1xuZXhwb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL0ZpbHRlclNlcnZpY2UnO1xuZXhwb3J0IHsgR2V0RGF0YVNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9HZXREYXRhU2VydmljZSc7XG5leHBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlLCBVbnJlZ2lzdGVyRm4gfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9Ob3RpZmljYXRpb25TZXJ2aWNlJztcbmV4cG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvUGFyYW1ldGVyc1NlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvUmVnaXN0ZXJBbGxTaGFyZWRTZXJ2aWNlcyc7XG5leHBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvU2VsZWN0aW9uU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuZXhwb3J0IHsgU2l6ZVNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9TaXplU2VydmljZSc7XG5leHBvcnQgeyBTdG9yeUFjdGl2YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvU3RvcnlBY3RpdmF0aW9uU2VydmljZSc7XG5leHBvcnQgeyBWaXpTZXJ2aWNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvVml6U2VydmljZSc7XG5leHBvcnQgeyBDbGllbnRJbmZvU2VydmljZUltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0NsaWVudEluZm9TZXJ2aWNlSW1wbCc7XG5leHBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlSW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvTm90aWZpY2F0aW9uU2VydmljZUltcGwnO1xuZXhwb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZUltcGxCYXNlLCBSZWdpc3RyYXRpb24gfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL05vdGlmaWNhdGlvblNlcnZpY2VJbXBsQmFzZSc7XG5leHBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1NlcnZpY2VJbXBsQmFzZSc7XG5leHBvcnQgeyBTaXplU2VydmljZUltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1NpemVTZXJ2aWNlSW1wbCc7XG5leHBvcnQgeyBTdG9yeUFjdGl2YXRpb25TZXJ2aWNlSW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvU3RvcnlBY3RpdmF0aW9uU2VydmljZUltcGwnO1xuZXhwb3J0IHsgU2luZ2xlRXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2luZ2xlRXZlbnRNYW5hZ2VyJztcbmV4cG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4vQXBpU2hhcmVkL1RhYmxlYXVFcnJvcic7XG5leHBvcnQgeyBEZWZlcnJlZCB9IGZyb20gJy4vQXBpU2hhcmVkL1V0aWxzL0RlZmVycmVkJztcbmV4cG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4vQXBpU2hhcmVkL1V0aWxzL0Vycm9ySGVscGVycyc7XG5leHBvcnQgeyBFeHBvcnRIZWxwZXJzIH0gZnJvbSAnLi9BcGlTaGFyZWQvVXRpbHMvRXhwb3J0SGVscGVycyc7XG5leHBvcnQgeyBTaGVldFV0aWxzIH0gZnJvbSAnLi9BcGlTaGFyZWQvVXRpbHMvU2hlZXRVdGlscyc7XG5leHBvcnQgeyBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi9BcGlTaGFyZWQvVmVyc2lvbk51bWJlcic7XG5leHBvcnQgeyBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIgfSBmcm9tICcuL1ZlcnNpb25lZEV4dGVybmFsQXBpRGlzcGF0Y2hlcic7XG4iLCJpbXBvcnQgeyBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi9WZXJzaW9uTnVtYmVyJztcbmltcG9ydCB7IFZlcnNpb25OdW1iZXJDb250cmFjdCB9IGZyb20gJy4vVmVyc2lvbk51bWJlckNvbnRyYWN0JztcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gd3JhcHBlciBvZiBWZXJzaW9uTnVtYmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlWZXJzaW9uIHtcbiAgLy8gVXNpbmcgc29tZSB3ZWJwYWNrIHRyaWNrcywgd2UgY2FuIGluamVjdCB0aGlzIHZlcnNpb24gaW50byBvdXIgY29kZSAoa2luZGEgbGlrZSBjKysgcHJlcHJvY2Vzc29yIHN0dWZmKVxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFZlcnNpb25OdW1iZXJDb250cmFjdDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFZlcnNpb25OdW1iZXJDb250cmFjdCB7XG4gICAgcmV0dXJuIEFwaVZlcnNpb24uX2luc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBTZXRWZXJzaW9uTnVtYmVyKG51bVN0cmluZzogc3RyaW5nLCBpc0FscGhhOiBib29sZWFuKTogdm9pZCB7XG4gICAgQXBpVmVyc2lvbi5faW5zdGFuY2UgPSBuZXcgVmVyc2lvbk51bWJlcihudW1TdHJpbmcsIGlzQWxwaGEpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyeSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgYSBjb25uZWN0aW9uIHN1bW1hcnkuXG4gKiBUaGlzIGRvZXMgbm90IGZvbGxvdyB0aGUgSW1wbCBwYXR0ZXJuIGFzIGl0IGlzIGp1c3QgYSBwcm9wZXJ0eSBiYWcuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uU3VtbWFyeSBpbXBsZW1lbnRzIENvbnRyYWN0LkNvbm5lY3Rpb25TdW1tYXJ5IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Nvbm5lY3Rpb25JbmZvOiBDb25uZWN0aW9uRGVzY3JpcHRpb25TdW1tYXJ5KSB7fVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uSW5mby5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uSW5mby5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VydmVyVVJJKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25JbmZvLnNlcnZlclVSSTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uSW5mby50eXBlO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSxcbiAgQ3Jvc3NGcmFtZU1lc3NlbmdlcixcbiAgSW5pdGlhbGl6YXRpb25PcHRpb25zLFxuICBNRVNTQUdJTkdfVkVSU0lPTiBhcyBBcGlNZXNzYWdpbmdWZXJzaW9uLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQ3Jvc3NGcmFtZURpc3BhdGNoZXIgfSBmcm9tICcuL0Nyb3NzRnJhbWVEaXNwYXRjaGVyJztcblxuLy8gQ2hlY2tzIHRvIHNlZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBhbiBpZnJhbWUgY3VycmVudGx5OiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzI2MDc2Lzg4MjExNTNcbmZ1bmN0aW9uIGluSWZyYW1lKHRoaXNXaW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzV2luZG93LnNlbGYgIT09IHRoaXNXaW5kb3cucGFyZW50O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBib290c3RyYXAgdGhlIGV4dGVuc2lvbiB3aXRoIGEgY3Jvc3MtZnJhbWUgcGFyZW50IHdoZXJlIFRhYmxlYXUgaXMgcnVubmluZ1xuICpcbiAqIEBwYXJhbSB0aGlzV2luZG93IFRoZSB3aW5kb3cgd2hpY2ggd2UgYXJlIHJ1bm5pbmcgaW4gKGluamVjdGVkIGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMpXG4gKiBAcGFyYW0gaW50ZXJuYWxDb250cmFjdFZlcnNpb24gVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCB3ZSBhcmUgdXNpbmdcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCBpcyBkb2luZyB0aGUgYWN0dWFsIGJvb3RzdHJhcHBpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvQ3Jvc3NGcmFtZUJvb3RzdHJhcChcbiAgdGhpc1dpbmRvdzogV2luZG93LFxuICBpbnRlcm5hbENvbnRyYWN0VmVyc2lvbjogQ29udHJhY3QuVmVyc2lvbk51bWJlcixcbiAgb3B0aW9uczogSW5pdGlhbGl6YXRpb25PcHRpb25zLFxuKTogUHJvbWlzZTxDb250cmFjdC5JbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxDb250cmFjdC5JbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHBhcmVudDogV2luZG93O1xuXG4gICAgLy8gTm9ybWFsbHksIHdlIGFyZSBydW5uaW5nIGluc2lkZSBhbiBpZnJhbWUuICBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXNcbiAgICAvLyB3aGVuIHdlIGFyZSBydW5uaW5nIGFzIGFuIGV4dGVuc2lvbiBpbnNpZGUgYSBkaWFsb2cgYXMgcGFydCBvZiB0aGUgVUlOYW1lc3BhY2VcbiAgICAvLyBmdW5jdGlvbmFsaXR5LiAgSW4gdGhhdCBjYXNlLCB3ZSB3YW50IHRoZSBvcGVuZXIgb2YgdGhpcyB3aW5kb3cgcmF0aGVyIHRoYW4gdGhlIHBhcmVudC5cbiAgICBpZiAoIWluSWZyYW1lKHRoaXNXaW5kb3cpKSB7XG4gICAgICBwYXJlbnQgPSB0aGlzV2luZG93Lm9wZW5lcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50ID0gdGhpc1dpbmRvdy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJlamVjdCgnVGhpcyBleHRlbnNpb24gaXMgbm90IHJ1bm5pbmcgaW5zaWRlIGFuIGlmcmFtZSwgZGVza3RvcCwgb3IgcG9wdXAgd2luZG93LiBJbml0aWFsaXphdGlvbiBmYWlsZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBtZXNzZW5nZXIgd2hpY2ggd2lsbCBkbyBoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhpcyB3aW5kb3cgYW5kIG91ciBwYXJlbnRcbiAgICAvLyBTaW5jZSB3ZSBkb24ndCBrbm93IHdoZXJlIHdlIGFyZSBydW5uaW5nIHlldCwgd2UgaGF2ZSB0byBtYWtlIHRoaXMgaW5pdGlhbCBvcmlnaW4gJyonLiBPbmNlXG4gICAgLy8gd2UgaGF2ZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgb3VyIGV4dGVuc2lvbiwgd2Ugd2lsbCBsaW1pdCB3aGVyZSB3ZSBzZW5kIG1lc3NhZ2VzXG4gICAgY29uc3QgbWVzc2VuZ2VyID0gbmV3IENyb3NzRnJhbWVNZXNzZW5nZXIodGhpc1dpbmRvdywgcGFyZW50LCAnKicpO1xuXG4gICAgLy8gUHJlcGFyZSB0byBzZW5kIGFuIGluaXRpYWxpemF0aW9uIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGNvbnN0IGluaXRpYWxpemF0aW9uTWVzc2FnZSA9IG1lc3Nlbmdlci5wcmVwYXJlSW5pdGlhbGl6YXRpb25NZXNzYWdlKGludGVybmFsQ29udHJhY3RWZXJzaW9uLCBBcGlNZXNzYWdpbmdWZXJzaW9uLCBvcHRpb25zKTtcblxuICAgIC8vIFdoZW4gd2UgcmVjZWl2ZSBhIHJlc3BvbnNlIGJhY2sgZnJvbSB0aGUgcGFyZW50LCB3ZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGd1aWRzIG1hdGNoIGFuZCB0aGVuIHdlIGtub3dcbiAgICAvLyB0aGF0IHRoZSBwYXJlbnQgaXMgYXdhcmUgb2YgdXMgYW5kIHdlIGNhbiBzdGFydCBjb21tdW5pY2F0aW5nXG4gICAgbWVzc2VuZ2VyLnNldENvbW1hbmRSZXNwb25zZU1lc3NhZ2VIYW5kbGVyKGZ1bmN0aW9uIChtc2c6IENvbW1hbmRSZXNwb25zZU1lc3NhZ2UpOiB2b2lkIHtcbiAgICAgIC8vIFZlcmlmeSB3ZSBhcmUgZ2V0dGluZyBhIHJlc3BvbnNlIGZyb20gb3VyIGluaXRpYWxpemUgbWVzc2FnZVxuICAgICAgaWYgKG1zZy5jb21tYW5kR3VpZCA9PT0gaW5pdGlhbGl6YXRpb25NZXNzYWdlLm1lc3NhZ2VHdWlkKSB7XG4gICAgICAgIC8vIFRoZSB2ZXJzaW9uaW5nIG9mIHRoZSBkaXNwYXRjaGVyIGhhcHBlbnMgb24gdGhlIG90aGVyIHNpZGUgb2Ygb3VyIGZyYW1lLCBhbmRcbiAgICAgICAgLy8gaW4gYSB3cmFwcGVyIG9uIHRoaXMgc2lkZS4gVGhpcyBvbmUgZG9lc24ndCBoYXZlIGFueSB2ZXJzaW9uIGtub3dsZWRnZS5cbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlckZhY3RvcnkgPSAoKSA9PiBuZXcgQ3Jvc3NGcmFtZURpc3BhdGNoZXIobWVzc2VuZ2VyKTtcbiAgICAgICAgcmVzb2x2ZShkaXNwYXRjaGVyRmFjdG9yeSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgdGhhdCBvdXIgaGFuZGxlcnMgYXJlIHJlYWR5LCBzdGFydCBsaXN0ZW5pbmcgYW5kIHNlbmQgb3VyIGluaXRpYWxpemF0aW9uIG1lc3NhZ2VcbiAgICBtZXNzZW5nZXIuc3RhcnRMaXN0ZW5pbmcoKTtcbiAgICBpbml0aWFsaXphdGlvbk1lc3NhZ2Uuc2VuZCgpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IEVtYmVkZGluZ0Vycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSxcbiAgRXhlY3V0ZVBhcmFtZXRlcnMsXG4gIEV4ZWN1dGVSZXNwb25zZSxcbiAgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBNZXNzZW5nZXIsXG4gIE1vZGVsLFxuICBOb3RpZmljYXRpb25IYW5kbGVyLFxuICBOb3RpZmljYXRpb25NZXNzYWdlLFxuICBWZXJiSWQsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEludGVybmFsQXBpRGlzcGF0Y2hlciBpbnRlcmZhY2Ugd2hpY2ggZnVuY3Rpb25zIGJ5IHBhc3NpbmcgbWVzc2FnZXNcbiAqIGFjcm9zcyBhIGZyYW1lIGJvdW5kYXJ5LiBUaGlzIGlzIHVzdWFsbHkgYmV0d2VlbiB0aGUgY29kZSB3aGVyZSBvdXIgamF2c2NyaXB0IGxpYnJhcnkgaGFzIGJlZW4gaW5jbHVkZWRcbiAqIGJ5IGEgM3JkIHBhcnR5IGRldiBhbmQgYW5vdGhlciBmcmFtZSB3aGVyZSBUYWJsZWF1IHNlcnZlciBoYXMgY29udGVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIENyb3NzRnJhbWVEaXNwYXRjaGVyIGltcGxlbWVudHMgSW50ZXJuYWxBcGlEaXNwYXRjaGVyIHtcbiAgLy8gQ29sbGVjdGlvbiBvZiBwZW5kaW5nIHByb21pc2VzIHdoaWNoIGFyZSB3YWl0aW5nIHRvIGJlIHJlc29sdmVkLiBXaGVuIHdlIHJlY2VpdmUgYSByZXNwb25zZSBiYWNrIGZyb20gdGhlIG90aGVyIGZyYW1lLFxuICAvLyB0aGVzZSBwcm9taXNlcyBjYW4gYmUgZWl0aGVyIHJlc29sdmVkIG9yIHJlamVjdGVkXG4gIHByaXZhdGUgX3BlbmRpbmdQcm9taXNlczogeyBbbWVzc2FnZUd1aWQ6IHN0cmluZ106IHsgcmVzb2x2ZTogKHJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UpID0+IHZvaWQ7IHJlamVjdDogKGVycm9yOiBNb2RlbCkgPT4gdm9pZCB9IH0gPVxuICAgIHt9O1xuXG4gIC8vIFRoZSBjb2xsZWN0aW9uIG9mIG5vdGlmaWNhdGlvbiBoYW5kbGVycyB3aGljaCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIHRoaXMgZGlzcGF0Y2hlclxuICBwcml2YXRlIF9ub3RpZmljYXRpb25IYW5kbGVyczogQXJyYXk8Tm90aWZpY2F0aW9uSGFuZGxlcj4gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDcm9zc0ZyYW1lRGlzcGF0Y2hlciB3aGljaCB3aWxsIHVzZSB0aGUgZ2l2ZW4gbWVzc2VuZ2VyIHRvIGNvbW11bmljYXRlXG4gICAqIEBwYXJhbSBfbWVzc2VuZ2VyIGFuIGluc3RhbnRpYXRlZCBhbmQgbGlzdGVuaW5nIG1lc3NlbmdlciBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tZXNzZW5nZXI6IE1lc3Nlbmdlcikge1xuICAgIGlmICghdGhpcy5fbWVzc2VuZ2VyKSB7XG4gICAgICB0aHJvdyAnTWlzc2luZyBtZXNzZW5nZXIgb2JqZWN0JztcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgb3VyIG1lc3NhZ2UgaGFuZGxlcnMuIFdlIG9ubHkgY2FyZSBhYm91dCBpbmNvbWluZyBub3RpZmljYXRpb25zIGFuZCBjb21tYW5kIHJlc3BvbnNlc1xuICAgIHRoaXMuX21lc3Nlbmdlci5zZXRDb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcih0aGlzLm9uQ29tbWFuZFJlc3BvbnNlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX21lc3Nlbmdlci5zZXROb3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcih0aGlzLm9uTm90aWZpY2F0aW9uLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLy8vLy8vIFN0YXJ0IEludGVybmFsQXBpRGlzcGF0Y2hlciBpbXBsZW1lbnRhdGlvblxuXG4gIHB1YmxpYyBleGVjdXRlKHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiBQcm9taXNlPEV4ZWN1dGVSZXNwb25zZT4ge1xuICAgIC8vIFRvIGV4ZWN1dGUgYSB2ZXJiLCB3ZSBmaXJzdCBwcmVwYXJlIGEgY29tbWFuZCBtZXNzYWdlIGFuZCB0aGVuIGRlZmluZSBhIHByb21pc2UuXG4gICAgY29uc3QgcHJlcGFyZWRNZXNzYWdlID0gdGhpcy5fbWVzc2VuZ2VyLnByZXBhcmVDb21tYW5kTWVzc2FnZSh2ZXJiLCBwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8RXhlY3V0ZVJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBTYXZlIG9mZiB0aGUgcGVuZGluZyBwcm9taXNlIGJ5IHRoZSBtZXNzYWdlR3VpZCB3ZSBhcmUgYWJvdXQgdG8gc2VuZC4gV2hlbiBhIHJlc3BvbnNlIGlzXG4gICAgICAvLyByZWNlaXZlZCwgd2UnbGwgYmUgYWJsZSB0byByZXNvbHZlIHRoaXMgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHRcbiAgICAgIHRoaXMuX3BlbmRpbmdQcm9taXNlc1twcmVwYXJlZE1lc3NhZ2UubWVzc2FnZUd1aWRdID0geyByZXNvbHZlOiByZXNvbHZlLCByZWplY3Q6IHJlamVjdCB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWN0dWFsbHkgc2VuZCB0aGUgbWVzc2FnZSBhbmQgcmV0dXJuIHRoZSBwcm9taXNlXG4gICAgcHJlcGFyZWRNZXNzYWdlLnNlbmQoKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck5vdGlmaWNhdGlvbkhhbmRsZXIoaGFuZGxlcjogTm90aWZpY2F0aW9uSGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbkhhbmRsZXIoaGFuZGxlcjogTm90aWZpY2F0aW9uSGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzID0gdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZmlsdGVyKChoKSA9PiBoICE9PSBoYW5kbGVyKTtcbiAgfVxuXG4gIC8vLy8vLyBFbmQgSW50ZXJuYWxBcGlEaXNwYXRjaGVyIGltcGxlbWVudGF0aW9uXG5cbiAgcHJpdmF0ZSBvbkNvbW1hbmRSZXNwb25zZShyZXNwb25zZTogQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSk6IHZvaWQge1xuICAgIC8vIFdlIGdvdCBhIGNvbW1hbmQgcmVzcG9uc2UsIGxvb2sgdGhyb3VnaCB0aGUgcGVuZGluZyBwcm9taXNlcyBhbmQgcmVzb2x2ZVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9wZW5kaW5nUHJvbWlzZXMpLmluZGV4T2YocmVzcG9uc2UuY29tbWFuZEd1aWQpIDwgMCkge1xuICAgICAgcmV0dXJuOyAvLyBXZSBkb24ndCBoYXZlIGFueSByZWZlcmVuY2UgdG8gdGhpcyBjb21tYW5kLCBqdXN0IHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBlbmRpbmdQcm9taXNlID0gdGhpcy5fcGVuZGluZ1Byb21pc2VzW3Jlc3BvbnNlLmNvbW1hbmRHdWlkXTtcblxuICAgIC8vIElmIHdlIGhhdmUgYW4gZXJyb3IgZGVmaW5lZCwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3QocmVzcG9uc2UuZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgZGF0YSBkZWZpbmVkLCByZXNvbHZlIHRoZSBwcm9taXNlXG4gICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgIHBlbmRpbmdQcm9taXNlLnJlc29sdmUoeyByZXN1bHQ6IHJlc3BvbnNlLmRhdGEgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgb3VyIHBlbmRpbmcgcHJvbWlzZXMgb2JqZWN0XG4gICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdQcm9taXNlc1tyZXNwb25zZS5jb21tYW5kR3VpZF07XG4gIH1cblxuICBwcml2YXRlIG9uTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk1lc3NhZ2U6IE5vdGlmaWNhdGlvbk1lc3NhZ2UpOiB2b2lkIHtcbiAgICAvLyBHbyB0aHJvdWdoIGVhY2ggbm90aWZpY2F0aW9uIGhhbmRsZXIgd2UgaGF2ZSByZWdpc3RlcmVkIGFuZCBsZXQgdGhlbSBrbm93IGEgbm90aWZpY2F0aW9uIGNhbWUgaW5cbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoeyBub3RpZmljYXRpb25JZDogbm90aWZpY2F0aW9uTWVzc2FnZS5ub3RpZmljYXRpb25JZCwgZGF0YTogbm90aWZpY2F0aW9uTWVzc2FnZS5kYXRhIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJbmNhc2Ugb2YgYSBJbmNvbXBhdGlibGVWZXJzaW9uRXJyb3IsIHJlLXRocm93IHRoZSBlcnJvci5cbiAgICAgICAgaWYgKChlIGFzIFRhYmxlYXVFcnJvcikuZXJyb3JDb2RlID09PSBFbWJlZGRpbmdFcnJvckNvZGVzLkluY29tcGF0aWJsZVZlcnNpb25FcnJvcikge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWxzZSBJZ25vcmUgIHNvIGlmIG9uZSBoYW5kbGVyIGVycm9ycywgdGhlIG90aGVyIHN0aWxsIGdldCB0aGUgbWVzc2FnZS5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlSW1wbCB9IGZyb20gJy4vSW1wbC9EYXRhU291cmNlSW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgQ29udHJhY3QuRGF0YVNvdXJjZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kYXRhU291cmNlSW1wbDogRGF0YVNvdXJjZUltcGwpIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmlkO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZHMoKTogQXJyYXk8Q29udHJhY3QuRmllbGQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuZmllbGRzO1xuICB9XG5cbiAgcHVibGljIGdldCBleHRyYWN0VXBkYXRlVGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5leHRyYWN0VXBkYXRlVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFeHRyYWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5pc0V4dHJhY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUHVibGlzaGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5pc1B1Ymxpc2hlZDtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoZWRVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwucHVibGlzaGVkVXJsKCk7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5yZWZyZXNoQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3RpdmVUYWJsZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LlRhYmxlU3VtbWFyeT4+IHtcbiAgICBjb25zb2xlLndhcm4oJ0RhdGFTb3VyY2UuZ2V0QWN0aXZlVGFibGVzQXN5bmMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBEYXRhU291cmNlLmdldExvZ2ljYWxUYWJsZXNBc3luYy4nKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuZ2V0QWN0aXZlVGFibGVzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0aW9uU3VtbWFyaWVzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Db25uZWN0aW9uU3VtbWFyeT4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuZ2V0Q29ubmVjdGlvblN1bW1hcmllc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ0RhdGFBc3luYyhvcHRpb25zPzogQ29udHJhY3QuRGF0YVNvdXJjZVVuZGVybHlpbmdEYXRhT3B0aW9ucyk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0RhdGFTb3VyY2UuZ2V0VW5kZXJseWluZ0RhdGFBc3luYyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICcgK1xuICAgICAgICAnRGF0YVNvdXJjZS5nZXRMb2dpY2FsVGFibGVzQXN5bmMgYW5kIERhdGFTb3VyY2UuZ2V0TG9naWNhbFRhYmxlRGF0YUFzeW5jLicsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuZ2V0VW5kZXJseWluZ0RhdGFBc3luYyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Mb2dpY2FsVGFibGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmdldExvZ2ljYWxUYWJsZXNBc3luYygpO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxUYWJsZURhdGFBc3luYyhsb2dpY2FsVGFibGVJZDogc3RyaW5nLCBvcHRpb25zPzogQ29udHJhY3QuRGF0YVNvdXJjZVVuZGVybHlpbmdEYXRhT3B0aW9ucyk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmdldExvZ2ljYWxUYWJsZURhdGFBc3luYyhsb2dpY2FsVGFibGVJZCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgIGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsXG4gICAgcGFnZVJvd0NvdW50PzogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBDb250cmFjdC5EYXRhU291cmNlVW5kZXJseWluZ0RhdGFPcHRpb25zLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5nZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmMobG9naWNhbFRhYmxlSWQsIHBhZ2VSb3dDb3VudCwgb3B0aW9ucyk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIERhdGVSYW5nZVR5cGUgYXMgRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLFxuICBEaWFsb2dTdHlsZSBhcyBFeHRlcm5hbERpYWxvZ1N0eWxlLFxuICBGaWx0ZXJEb21haW5UeXBlIGFzIEV4dGVybmFsRG9tYWluVHlwZSxcbiAgRmlsdGVyTnVsbE9wdGlvbiBhcyBFeHRlcm5hbE51bGxPcHRpb24sXG4gIEZpbHRlclVwZGF0ZVR5cGUgYXMgRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLFxuICBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgUGVyaW9kVHlwZSxcbiAgUmVwbGF5U3BlZWRUeXBlLFxuICBTaGVldFR5cGUgYXMgRXh0ZXJuYWxTaGVldFR5cGUsXG4gIFpvbmVWaXNpYmlsaXR5VHlwZSxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIEFwaVNob3dEYXRhVGFibGVGb3JtYXQsXG4gIERhdGVSYW5nZVR5cGUgYXMgSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLFxuICBEYXRlU3RlcFBlcmlvZCxcbiAgRGlhbG9nU3R5bGUgYXMgSW50ZXJuYWxEaWFsb2dTdHlsZSxcbiAgRmlsdGVyRG9tYWluVHlwZSBhcyBJbnRlcm5hbERvbWFpblR5cGUsXG4gIEZpbHRlck51bGxPcHRpb24gYXMgSW50ZXJuYWxOdWxsT3B0aW9uLFxuICBGaWx0ZXJVcGRhdGVUeXBlIGFzIEludGVybmFsRmlsdGVyVXBkYXRlVHlwZSxcbiAgU2hlZXRUeXBlIGFzIEludGVybmFsU2hlZXRUeXBlLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRW51bUNvbnZlcnRlciB9IGZyb20gJy4uL1V0aWxzL0VudW1Db252ZXJ0ZXInO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTp0eXBlZGVmIC0gRGlzYWJsZSB0aGlzIHRvIG1ha2UgZGVjbGFyaW5nIHRoZXNlIGNsYXNzZXMgYSBiaXQgZWFzaWVyICovXG4vKipcbiAqIE1hcHMgZW51bXMgdXNlZCBieSB0aGUgZXh0ZXJuYWwtYXBpLWNvbnRyYWN0IHRvIHRoZSBlbnVtcyB1c2VkXG4gKiBpbiB0aGUgaW50ZXJuYWwtYXBpLWNvbnRyYWN0LCB3aGljaCBkZXZlbG9wZXJzIGNvZGUgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyB7XG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyRG9tYWluVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEV4dGVybmFsRG9tYWluVHlwZSwgSW50ZXJuYWxEb21haW5UeXBlPih7XG4gICAgW0V4dGVybmFsRG9tYWluVHlwZS5SZWxldmFudF06IEludGVybmFsRG9tYWluVHlwZS5SZWxldmFudCxcbiAgICBbRXh0ZXJuYWxEb21haW5UeXBlLkRhdGFiYXNlXTogSW50ZXJuYWxEb21haW5UeXBlLkRhdGFiYXNlLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIG51bGxPcHRpb25zID0gbmV3IEVudW1Db252ZXJ0ZXI8RXh0ZXJuYWxOdWxsT3B0aW9uLCBJbnRlcm5hbE51bGxPcHRpb24+KHtcbiAgICBbRXh0ZXJuYWxOdWxsT3B0aW9uLkFsbFZhbHVlc106IEludGVybmFsTnVsbE9wdGlvbi5BbGxWYWx1ZXMsXG4gICAgW0V4dGVybmFsTnVsbE9wdGlvbi5Ob25OdWxsVmFsdWVzXTogSW50ZXJuYWxOdWxsT3B0aW9uLk5vbk51bGxWYWx1ZXMsXG4gICAgW0V4dGVybmFsTnVsbE9wdGlvbi5OdWxsVmFsdWVzXTogSW50ZXJuYWxOdWxsT3B0aW9uLk51bGxWYWx1ZXMsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyVXBkYXRlVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEV4dGVybmFsRmlsdGVyVXBkYXRlVHlwZSwgSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlPih7XG4gICAgW0V4dGVybmFsRmlsdGVyVXBkYXRlVHlwZS5BZGRdOiBJbnRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWRkLFxuICAgIFtFeHRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWxsXTogSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLkFsbCxcbiAgICBbRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlbW92ZV06IEludGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZW1vdmUsXG4gICAgW0V4dGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZXBsYWNlXTogSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlcGxhY2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2V0VmlzaWJpbGl0eVR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxab25lVmlzaWJpbGl0eVR5cGUsIGJvb2xlYW4+KHtcbiAgICBbWm9uZVZpc2liaWxpdHlUeXBlLlNob3ddOiB0cnVlLFxuICAgIFtab25lVmlzaWJpbGl0eVR5cGUuSGlkZV06IGZhbHNlLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIHNldFJlcGxheVNwZWVkVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPFJlcGxheVNwZWVkVHlwZSwgbnVtYmVyPih7XG4gICAgLy8gdGhlc2UgbnVtYmVycyBhcmUgZHVyYXRpb24gbXVsdGlwbGllcnNcbiAgICAvLyAyLjAsIGZvciBleGFtcGxlLCBkb3VibGVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVwbGF5LCBzbG93aW5nIGl0IGRvd24gdG8gMC41eCBzcGVlZFxuICAgIFtSZXBsYXlTcGVlZFR5cGUuU2xvd106IDIuMCxcbiAgICBbUmVwbGF5U3BlZWRUeXBlLk5vcm1hbF06IDEuMCxcbiAgICBbUmVwbGF5U3BlZWRUeXBlLkZhc3RdOiAwLjUsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2hlZXRUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8RXh0ZXJuYWxTaGVldFR5cGUsIEludGVybmFsU2hlZXRUeXBlPih7XG4gICAgW0V4dGVybmFsU2hlZXRUeXBlLkRhc2hib2FyZF06IEludGVybmFsU2hlZXRUeXBlLkRhc2hib2FyZCxcbiAgICBbRXh0ZXJuYWxTaGVldFR5cGUuV29ya3NoZWV0XTogSW50ZXJuYWxTaGVldFR5cGUuV29ya3NoZWV0LFxuICAgIFtFeHRlcm5hbFNoZWV0VHlwZS5TdG9yeV06IEludGVybmFsU2hlZXRUeXBlLlN0b3J5LFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIHNob3dEYXRhVGFibGVGb3JtYXRUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sIEFwaVNob3dEYXRhVGFibGVGb3JtYXQ+KHtcbiAgICBbSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24uQWxsVmFsdWVzXTogQXBpU2hvd0RhdGFUYWJsZUZvcm1hdC5OYXRpdmVBbmRGb3JtYXR0ZWRWYWx1ZXMsXG4gICAgW0luY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLk9ubHlOYXRpdmVWYWx1ZXNdOiBBcGlTaG93RGF0YVRhYmxlRm9ybWF0Lk5hdGl2ZVZhbHVlc09ubHksXG4gICAgW0luY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLk9ubHlGb3JtYXR0ZWRWYWx1ZXNdOiBBcGlTaG93RGF0YVRhYmxlRm9ybWF0LkZvcm1hdHRlZFZhbHVlc09ubHksXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgcGVyaW9kVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPFBlcmlvZFR5cGUsIERhdGVTdGVwUGVyaW9kPih7XG4gICAgW1BlcmlvZFR5cGUuWWVhcnNdOiBEYXRlU3RlcFBlcmlvZC5ZZWFycyxcbiAgICBbUGVyaW9kVHlwZS5RdWFydGVyc106IERhdGVTdGVwUGVyaW9kLlF1YXJ0ZXJzLFxuICAgIFtQZXJpb2RUeXBlLk1vbnRoc106IERhdGVTdGVwUGVyaW9kLk1vbnRocyxcbiAgICBbUGVyaW9kVHlwZS5XZWVrc106IERhdGVTdGVwUGVyaW9kLldlZWtzLFxuICAgIFtQZXJpb2RUeXBlLkRheXNdOiBEYXRlU3RlcFBlcmlvZC5EYXlzLFxuICAgIFtQZXJpb2RUeXBlLkhvdXJzXTogRGF0ZVN0ZXBQZXJpb2QuSG91cnMsXG4gICAgW1BlcmlvZFR5cGUuTWludXRlc106IERhdGVTdGVwUGVyaW9kLk1pbnV0ZXMsXG4gICAgW1BlcmlvZFR5cGUuU2Vjb25kc106IERhdGVTdGVwUGVyaW9kLlNlY29uZHMsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZVJhbmdlVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEV4dGVybmFsRGF0ZVJhbmdlVHlwZSwgSW50ZXJuYWxEYXRlUmFuZ2VUeXBlPih7XG4gICAgW0V4dGVybmFsRGF0ZVJhbmdlVHlwZS5MYXN0XTogSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLkxhc3QsXG4gICAgW0V4dGVybmFsRGF0ZVJhbmdlVHlwZS5MYXN0Tl06IEludGVybmFsRGF0ZVJhbmdlVHlwZS5MYXN0TixcbiAgICBbRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLk5leHRdOiBJbnRlcm5hbERhdGVSYW5nZVR5cGUuTmV4dCxcbiAgICBbRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLk5leHROXTogSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLk5leHROLFxuICAgIFtFeHRlcm5hbERhdGVSYW5nZVR5cGUuQ3VycmVudF06IEludGVybmFsRGF0ZVJhbmdlVHlwZS5DdXJyZW50LFxuICAgIFtFeHRlcm5hbERhdGVSYW5nZVR5cGUuVG9EYXRlXTogSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLlRvRGF0ZSxcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBkaWFsb2dTdHlsZXMgPSBuZXcgRW51bUNvbnZlcnRlcjxFeHRlcm5hbERpYWxvZ1N0eWxlLCBJbnRlcm5hbERpYWxvZ1N0eWxlPih7XG4gICAgW0V4dGVybmFsRGlhbG9nU3R5bGUuV2luZG93XTogSW50ZXJuYWxEaWFsb2dTdHlsZS5XaW5kb3csXG4gICAgW0V4dGVybmFsRGlhbG9nU3R5bGUuTW9kYWxdOiBJbnRlcm5hbERpYWxvZ1N0eWxlLk1vZGFsLFxuICAgIFtFeHRlcm5hbERpYWxvZ1N0eWxlLk1vZGVsZXNzXTogSW50ZXJuYWxEaWFsb2dTdHlsZS5Nb2RlbGVzcyxcbiAgfSk7XG59XG4vKiB0c2xpbnQ6ZW5hYmxlOnR5cGVkZWYgKi9cbiIsImltcG9ydCB7XG4gIEFubm90YXRpb25UeXBlIGFzIEV4dGVybmFsQW5ub3RhdGlvblR5cGUsXG4gIENsYXNzTmFtZUtleSBhcyBFeHRlcm5hbENsYXNzTmFtZUtleSxcbiAgQ29sdW1uVHlwZSBhcyBFeHRlcm5hbENvbHVtblR5cGUsXG4gIERhc2hib2FyZE9iamVjdFR5cGUgYXMgRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLFxuICBEYXRhVHlwZSBhcyBFeHRlcm5hbERhdGFUeXBlLFxuICBQZXJpb2RUeXBlIGFzIEV4dGVybmFsRGF0ZVBlcmlvZCxcbiAgRGF0ZVJhbmdlVHlwZSBhcyBFeHRlcm5hbERhdGVSYW5nZVR5cGUsXG4gIEVycm9yQ29kZXMgYXMgRXh0ZXJuYWxFcnJvckNvZGVzLFxuICBFeHRlbnNpb25Db250ZXh0IGFzIEV4dGVybmFsRXh0ZW5zaW9uc0NvbnRleHQsXG4gIEV4dGVuc2lvbk1vZGUgYXMgRXh0ZXJuYWxFeHRlbnNpb25zTW9kZSxcbiAgRmllbGRBZ2dyZWdhdGlvblR5cGUgYXMgRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZSxcbiAgRmllbGRSb2xlVHlwZSBhcyBFeHRlcm5hbEZpZWxkUm9sZVR5cGUsXG4gIEZpbHRlclR5cGUgYXMgRXh0ZXJuYWxGaWx0ZXJUeXBlLFxuICBGaWx0ZXJVcGRhdGVUeXBlIGFzIEV4dGVybmFsRmlsdGVyVXBkYXRlVHlwZSxcbiAgSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZSBhcyBFeHRlcm5hbEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUsXG4gIE1hcmtUeXBlIGFzIEV4dGVybmFsTWFya1R5cGUsXG4gIFBhcmFtZXRlclZhbHVlVHlwZSBhcyBFeHRlcm5hbFBhcmFtZXRlclZhbHVlVHlwZSxcbiAgU2hlZXRUeXBlIGFzIEV4dGVybmFsU2hlZXRUeXBlLFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQW5ub3RhdGVFbnVtIGFzIEludGVybmFsQW5ub3RhdGlvblR5cGUsXG4gIENsYXNzTmFtZUtleSBhcyBJbnRlcm5hbENsYXNzTmFtZUtleSxcbiAgQ29sdW1uVHlwZSBhcyBJbnRlcm5hbENvbHVtblR5cGUsXG4gIERhc2hib2FyZE9iamVjdFR5cGUgYXMgSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLFxuICBEYXRhVHlwZSBhcyBJbnRlcm5hbERhdGFUeXBlLFxuICBEYXRlUmFuZ2VUeXBlIGFzIEludGVybmFsRGF0ZVJhbmdlVHlwZSxcbiAgRGF0ZVN0ZXBQZXJpb2QgYXMgSW50ZXJuYWxEYXRlU3RlcFBlcmlvZCxcbiAgRG9tYWluUmVzdHJpY3Rpb25UeXBlIGFzIEludGVybmFsRG9tYWluUmVzdHJpY3Rpb25UeXBlLFxuICBFcnJvckNvZGVzIGFzIEludGVybmFsRXJyb3JDb2RlcyxcbiAgRXh0ZW5zaW9uQ29udGV4dCBhcyBJbnRlcm5hbEV4dGVuc2lvbnNDb250ZXh0LFxuICBFeHRlbnNpb25Nb2RlIGFzIEludGVybmFsRXh0ZW5zaW9uc01vZGUsXG4gIEZpZWxkQWdncmVnYXRpb25UeXBlIGFzIEludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUsXG4gIEZpZWxkUm9sZVR5cGUgYXMgSW50ZXJuYWxGaWVsZFJvbGVUeXBlLFxuICBGaWx0ZXJUeXBlIGFzIEludGVybmFsRmlsdGVyVHlwZSxcbiAgRmlsdGVyVXBkYXRlVHlwZSBhcyBJbnRlcm5hbEZpbHRlclVwZGF0ZVR5cGUsXG4gIEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUgYXMgSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLFxuICBNYXJrVHlwZSBhcyBJbnRlcm5hbE1hcmtUeXBlLFxuICBTaGVldFR5cGUgYXMgSW50ZXJuYWxTaGVldFR5cGUsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFbnVtQ29udmVydGVyIH0gZnJvbSAnLi4vVXRpbHMvRW51bUNvbnZlcnRlcic7XG5cbi8qIHRzbGludDpkaXNhYmxlOnR5cGVkZWYgLSBEaXNhYmxlIHRoaXMgdG8gbWFrZSBkZWNsYXJpbmcgdGhlc2UgY2xhc3NlcyBhIGJpdCBlYXNpZXIgKi9cbi8qKlxuICogTWFwcyBlbnVtcyB1c2VkIGJ5IHRoZSBpbnRlcm5hbC1hcGktY29udHJhY3QgdG8gdGhlIGVudW1zIHVzZWRcbiAqIGluIHRoZSBleHRlcm5hbC1hcGktY29udHJhY3QsIHdoaWNoIGRldmVsb3BlcnMgY29kZSBhZ2FpbnN0LlxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIHtcbiAgcHVibGljIHN0YXRpYyBleHRlbnNpb25Db250ZXh0ID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxFeHRlbnNpb25zQ29udGV4dCwgRXh0ZXJuYWxFeHRlbnNpb25zQ29udGV4dD4oe1xuICAgIFtJbnRlcm5hbEV4dGVuc2lvbnNDb250ZXh0LkRlc2t0b3BdOiBFeHRlcm5hbEV4dGVuc2lvbnNDb250ZXh0LkRlc2t0b3AsXG4gICAgW0ludGVybmFsRXh0ZW5zaW9uc0NvbnRleHQuU2VydmVyXTogRXh0ZXJuYWxFeHRlbnNpb25zQ29udGV4dC5TZXJ2ZXIsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5zaW9uTW9kZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsRXh0ZW5zaW9uc01vZGUsIEV4dGVybmFsRXh0ZW5zaW9uc01vZGU+KHtcbiAgICBbSW50ZXJuYWxFeHRlbnNpb25zTW9kZS5BdXRob3JpbmddOiBFeHRlcm5hbEV4dGVuc2lvbnNNb2RlLkF1dGhvcmluZyxcbiAgICBbSW50ZXJuYWxFeHRlbnNpb25zTW9kZS5WaWV3aW5nXTogRXh0ZXJuYWxFeHRlbnNpb25zTW9kZS5WaWV3aW5nLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGNvbHVtblR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbENvbHVtblR5cGUsIEV4dGVybmFsQ29sdW1uVHlwZT4oe1xuICAgIFtJbnRlcm5hbENvbHVtblR5cGUuQ29udGludW91c106IEV4dGVybmFsQ29sdW1uVHlwZS5Db250aW51b3VzLFxuICAgIFtJbnRlcm5hbENvbHVtblR5cGUuRGlzY3JldGVdOiBFeHRlcm5hbENvbHVtblR5cGUuRGlzY3JldGUsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmllbGRBZ2dyZWdhdGlvblR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLCBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlPih7XG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuQXR0cl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuQXR0cixcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5BdmddOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkF2ZyxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Db2xsZWN0XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Db2xsZWN0LFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkNvdW50XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Db3VudCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Db3VudGRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkNvdW50ZCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5EYXldOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkRheSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5FbmRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkVuZCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Ib3VyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Ib3VyLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkluT3V0XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Jbk91dCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5LdXJ0b3Npc106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuS3VydG9zaXMsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWF4XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NYXgsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWR5XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NZHksXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWVkaWFuXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NZWRpYW4sXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWluXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NaW4sXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWludXRlXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NaW51dGUsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTW9udGhZZWFyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Nb250aFllYXIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTm9uZV06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTm9uZSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5RdHJdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlF0cixcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5RdWFydDFdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlF1YXJ0MSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5RdWFydDNdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlF1YXJ0MyxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5TZWNvbmRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlNlY29uZCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Ta2V3bmVzc106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU2tld25lc3MsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU3RkZXZdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlN0ZGV2LFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlN0ZGV2cF06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU3RkZXZwLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlN1bV06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU3VtLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jRGF5XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY0RheSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY0hvdXJdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jSG91cixcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY01pbnV0ZV06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNNaW51dGUsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNNb250aF06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNNb250aCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY1F0cl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNRdHIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNTZWNvbmRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jU2Vjb25kLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jV2Vla106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNXZWVrLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jWWVhcl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNZZWFyLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlVzZXJdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlVzZXIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVmFyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5WYXIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVmFycF06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVmFycCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5XZWVrXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5XZWVrLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLldlZWtkYXldOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLldlZWtkYXksXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuWWVhcl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuWWVhcixcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBmaWVsZFJvbGVUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxGaWVsZFJvbGVUeXBlLCBFeHRlcm5hbEZpZWxkUm9sZVR5cGU+KHtcbiAgICBbSW50ZXJuYWxGaWVsZFJvbGVUeXBlLkRpbWVuc2lvbl06IEV4dGVybmFsRmllbGRSb2xlVHlwZS5EaW1lbnNpb24sXG4gICAgW0ludGVybmFsRmllbGRSb2xlVHlwZS5NZWFzdXJlXTogRXh0ZXJuYWxGaWVsZFJvbGVUeXBlLk1lYXN1cmUsXG4gICAgW0ludGVybmFsRmllbGRSb2xlVHlwZS5Vbmtub3duXTogRXh0ZXJuYWxGaWVsZFJvbGVUeXBlLlVua25vd24sXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2hlZXRUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxTaGVldFR5cGUsIEV4dGVybmFsU2hlZXRUeXBlPih7XG4gICAgW0ludGVybmFsU2hlZXRUeXBlLkRhc2hib2FyZF06IEV4dGVybmFsU2hlZXRUeXBlLkRhc2hib2FyZCxcbiAgICBbSW50ZXJuYWxTaGVldFR5cGUuU3RvcnldOiBFeHRlcm5hbFNoZWV0VHlwZS5TdG9yeSxcbiAgICBbSW50ZXJuYWxTaGVldFR5cGUuV29ya3NoZWV0XTogRXh0ZXJuYWxTaGVldFR5cGUuV29ya3NoZWV0LFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGRhc2hib2FyZE9iamVjdFR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUsIEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZT4oe1xuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuRXh0ZW5zaW9uXTogRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLkV4dGVuc2lvbixcbiAgICBbSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLkJsYW5rXTogRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLkJsYW5rLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuSW1hZ2VdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuSW1hZ2UsXG4gICAgW0ludGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5MZWdlbmRdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuTGVnZW5kLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUGFnZUZpbHRlcl06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5QYWdlRmlsdGVyLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUGFyYW1ldGVyQ29udHJvbF06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5QYXJhbWV0ZXJDb250cm9sLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUXVpY2tGaWx0ZXJdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUXVpY2tGaWx0ZXIsXG4gICAgW0ludGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5UZXh0XTogRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLlRleHQsXG4gICAgW0ludGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5UaXRsZV06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5UaXRsZSxcbiAgICBbSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLldlYlBhZ2VdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuV2ViUGFnZSxcbiAgICBbSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLldvcmtzaGVldF06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5Xb3Jrc2hlZXQsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZGF0YVR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhdGFUeXBlLCBFeHRlcm5hbERhdGFUeXBlPih7XG4gICAgW0ludGVybmFsRGF0YVR5cGUuQm9vbF06IEV4dGVybmFsRGF0YVR5cGUuQm9vbCxcbiAgICBbSW50ZXJuYWxEYXRhVHlwZS5EYXRlXTogRXh0ZXJuYWxEYXRhVHlwZS5EYXRlLFxuICAgIFtJbnRlcm5hbERhdGFUeXBlLkRhdGVUaW1lXTogRXh0ZXJuYWxEYXRhVHlwZS5EYXRlVGltZSxcbiAgICBbSW50ZXJuYWxEYXRhVHlwZS5GbG9hdF06IEV4dGVybmFsRGF0YVR5cGUuRmxvYXQsXG4gICAgW0ludGVybmFsRGF0YVR5cGUuSW50XTogRXh0ZXJuYWxEYXRhVHlwZS5JbnQsXG4gICAgW0ludGVybmFsRGF0YVR5cGUuU3RyaW5nXTogRXh0ZXJuYWxEYXRhVHlwZS5TdHJpbmcsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyVXBkYXRlVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsRmlsdGVyVXBkYXRlVHlwZSwgRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlPih7XG4gICAgW0ludGVybmFsRmlsdGVyVXBkYXRlVHlwZS5BZGRdOiBFeHRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWRkLFxuICAgIFtJbnRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWxsXTogRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLkFsbCxcbiAgICBbSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlbW92ZV06IEV4dGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZW1vdmUsXG4gICAgW0ludGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZXBsYWNlXTogRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlcGxhY2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgYWxsb3dhYmxlVmFsdWVzID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxEb21haW5SZXN0cmljdGlvblR5cGUsIEV4dGVybmFsUGFyYW1ldGVyVmFsdWVUeXBlPih7XG4gICAgW0ludGVybmFsRG9tYWluUmVzdHJpY3Rpb25UeXBlLkFsbF06IEV4dGVybmFsUGFyYW1ldGVyVmFsdWVUeXBlLkFsbCxcbiAgICBbSW50ZXJuYWxEb21haW5SZXN0cmljdGlvblR5cGUuTGlzdF06IEV4dGVybmFsUGFyYW1ldGVyVmFsdWVUeXBlLkxpc3QsXG4gICAgW0ludGVybmFsRG9tYWluUmVzdHJpY3Rpb25UeXBlLlJhbmdlXTogRXh0ZXJuYWxQYXJhbWV0ZXJWYWx1ZVR5cGUuUmFuZ2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZVN0ZXBQZXJpb2QgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhdGVTdGVwUGVyaW9kLCBFeHRlcm5hbERhdGVQZXJpb2Q+KHtcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5ZZWFyc106IEV4dGVybmFsRGF0ZVBlcmlvZC5ZZWFycyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5RdWFydGVyc106IEV4dGVybmFsRGF0ZVBlcmlvZC5RdWFydGVycyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5Nb250aHNdOiBFeHRlcm5hbERhdGVQZXJpb2QuTW9udGhzLFxuICAgIFtJbnRlcm5hbERhdGVTdGVwUGVyaW9kLldlZWtzXTogRXh0ZXJuYWxEYXRlUGVyaW9kLldlZWtzLFxuICAgIFtJbnRlcm5hbERhdGVTdGVwUGVyaW9kLkRheXNdOiBFeHRlcm5hbERhdGVQZXJpb2QuRGF5cyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5Ib3Vyc106IEV4dGVybmFsRGF0ZVBlcmlvZC5Ib3VycyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5NaW51dGVzXTogRXh0ZXJuYWxEYXRlUGVyaW9kLk1pbnV0ZXMsXG4gICAgW0ludGVybmFsRGF0ZVN0ZXBQZXJpb2QuU2Vjb25kc106IEV4dGVybmFsRGF0ZVBlcmlvZC5TZWNvbmRzLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGRhdGVSYW5nZVR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhdGVSYW5nZVR5cGUsIEV4dGVybmFsRGF0ZVJhbmdlVHlwZT4oe1xuICAgIFtJbnRlcm5hbERhdGVSYW5nZVR5cGUuQ3VycmVudF06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5DdXJyZW50LFxuICAgIFtJbnRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdF06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5MYXN0LFxuICAgIFtJbnRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdE5dOiBFeHRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdE4sXG4gICAgW0ludGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0XTogRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLk5leHQsXG4gICAgW0ludGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0Tl06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0TixcbiAgICBbSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLlRvRGF0ZV06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5Ub0RhdGUsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZXJyb3JDb2RlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxFcnJvckNvZGVzLCBFeHRlcm5hbEVycm9yQ29kZXM+KFxuICAgIHtcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuSU5JVElBTElaQVRJT05fRVJST1JdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuSU5URVJOQUxfRVJST1JdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuTUlTU0lOR19FTlVNX01BUFBJTkddOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuTUlTU0lOR19QQVJBTUVURVJdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuUEVSTUlTU0lPTl9ERU5JRURdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuUFJFU19NT0RFTF9QQVJTSU5HX0VSUk9SXTogRXh0ZXJuYWxFcnJvckNvZGVzLkludGVybmFsRXJyb3IsXG4gICAgICBbSW50ZXJuYWxFcnJvckNvZGVzLlVOS05PV05fVkVSQl9JRF06IEV4dGVybmFsRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLFxuICAgICAgW0ludGVybmFsRXJyb3JDb2Rlcy5WRVJTSU9OX05PVF9DT05GSUdVUkVEXTogRXh0ZXJuYWxFcnJvckNvZGVzLkFQSU5vdEluaXRpYWxpemVkLFxuICAgICAgW0ludGVybmFsRXJyb3JDb2Rlcy5WSVNJQklMSVRZX0VSUk9SXTogRXh0ZXJuYWxFcnJvckNvZGVzLlZpc2liaWxpdHlFcnJvcixcbiAgICB9LFxuICAgIEV4dGVybmFsRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLFxuICApO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsRmlsdGVyVHlwZSwgRXh0ZXJuYWxGaWx0ZXJUeXBlPih7XG4gICAgW0ludGVybmFsRmlsdGVyVHlwZS5DYXRlZ29yaWNhbF06IEV4dGVybmFsRmlsdGVyVHlwZS5DYXRlZ29yaWNhbCxcbiAgICBbSW50ZXJuYWxGaWx0ZXJUeXBlLlJhbmdlXTogRXh0ZXJuYWxGaWx0ZXJUeXBlLlJhbmdlLFxuICAgIFtJbnRlcm5hbEZpbHRlclR5cGUuUmVsYXRpdmVEYXRlXTogRXh0ZXJuYWxGaWx0ZXJUeXBlLlJlbGF0aXZlRGF0ZSxcbiAgICBbSW50ZXJuYWxGaWx0ZXJUeXBlLkhpZXJhcmNoaWNhbF06IEV4dGVybmFsRmlsdGVyVHlwZS5IaWVyYXJjaGljYWwsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgY2xhc3NOYW1lS2V5ID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxDbGFzc05hbWVLZXksIEV4dGVybmFsQ2xhc3NOYW1lS2V5Pih7XG4gICAgW0ludGVybmFsQ2xhc3NOYW1lS2V5LkRhc2hib2FyZFRpdGxlXTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuRGFzaGJvYXJkVGl0bGUsXG4gICAgW0ludGVybmFsQ2xhc3NOYW1lS2V5LlN0b3J5VGl0bGVdOiBFeHRlcm5hbENsYXNzTmFtZUtleS5TdG9yeVRpdGxlLFxuICAgIFtJbnRlcm5hbENsYXNzTmFtZUtleS5Ub29sdGlwXTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuVG9vbHRpcCxcbiAgICBbSW50ZXJuYWxDbGFzc05hbWVLZXkuV29ya3NoZWV0XTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuV29ya3NoZWV0LFxuICAgIFtJbnRlcm5hbENsYXNzTmFtZUtleS5Xb3Jrc2hlZXRUaXRsZV06IEV4dGVybmFsQ2xhc3NOYW1lS2V5LldvcmtzaGVldFRpdGxlLFxuICAgIC8vIFRlbXBvcmFyeSB1bnRpbCB3ZSBmaXggMTMxNzI2NiAtIFBsYXRmb3JtIGhhc24ndCBiZWVuIHVwZGF0ZWQgY3VycmVudGx5IGJlY2F1c2UgbmVhciBicmFuY2ggaXMgY2xvc2VkXG4gICAgWydkYXNoYm9hcmQtdGl0bGUnXTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuRGFzaGJvYXJkVGl0bGUsXG4gICAgWydzdG9yeS10aXRsZSddOiBFeHRlcm5hbENsYXNzTmFtZUtleS5TdG9yeVRpdGxlLFxuICAgIFsndG9vbHRpcCddOiBFeHRlcm5hbENsYXNzTmFtZUtleS5Ub29sdGlwLFxuICAgIFsnd29ya3NoZWV0J106IEV4dGVybmFsQ2xhc3NOYW1lS2V5LldvcmtzaGVldCxcbiAgICBbJ3dvcmtzaGVldC10aXRsZSddOiBFeHRlcm5hbENsYXNzTmFtZUtleS5Xb3Jrc2hlZXRUaXRsZSxcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBoaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlID0gbmV3IEVudW1Db252ZXJ0ZXI8XG4gICAgSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLFxuICAgIEV4dGVybmFsSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZVxuICA+KHtcbiAgICBbSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLkFsbFNlbGVjdGVkXTogRXh0ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLkFsbFNlbGVjdGVkLFxuICAgIFtJbnRlcm5hbEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUuTm9uZVNlbGVjdGVkXTogRXh0ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLk5vbmVTZWxlY3RlZCxcbiAgICBbSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLlNvbWVTZWxlY3RlZF06IEV4dGVybmFsSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZS5Tb21lU2VsZWN0ZWQsXG4gICAgW0ludGVybmFsSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZS5Vbmtub3duU2VsZWN0ZWRdOiBFeHRlcm5hbEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUuVW5rbm93blNlbGVjdGVkLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGFubm90YXRpb25UeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxBbm5vdGF0aW9uVHlwZSwgRXh0ZXJuYWxBbm5vdGF0aW9uVHlwZT4oe1xuICAgIFtJbnRlcm5hbEFubm90YXRpb25UeXBlLkFyZWFdOiBFeHRlcm5hbEFubm90YXRpb25UeXBlLkFyZWEsXG4gICAgW0ludGVybmFsQW5ub3RhdGlvblR5cGUuTWFya106IEV4dGVybmFsQW5ub3RhdGlvblR5cGUuTWFyayxcbiAgICBbSW50ZXJuYWxBbm5vdGF0aW9uVHlwZS5Qb2ludF06IEV4dGVybmFsQW5ub3RhdGlvblR5cGUuUG9pbnQsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgbWFya1R5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbE1hcmtUeXBlLCBFeHRlcm5hbE1hcmtUeXBlPih7XG4gICAgW0ludGVybmFsTWFya1R5cGUuQXJlYV06IEV4dGVybmFsTWFya1R5cGUuQXJlYSxcbiAgICBbSW50ZXJuYWxNYXJrVHlwZS5CYXJdOiBFeHRlcm5hbE1hcmtUeXBlLkJhcixcbiAgICBbSW50ZXJuYWxNYXJrVHlwZS5DaXJjbGVdOiBFeHRlcm5hbE1hcmtUeXBlLkNpcmNsZSxcbiAgICBbSW50ZXJuYWxNYXJrVHlwZS5HYW50dEJhcl06IEV4dGVybmFsTWFya1R5cGUuR2FudHRCYXIsXG4gICAgW0ludGVybmFsTWFya1R5cGUuSGVhdG1hcF06IEV4dGVybmFsTWFya1R5cGUuSGVhdG1hcCxcbiAgICBbSW50ZXJuYWxNYXJrVHlwZS5MaW5lXTogRXh0ZXJuYWxNYXJrVHlwZS5MaW5lLFxuICAgIFtJbnRlcm5hbE1hcmtUeXBlLk1hcF06IEV4dGVybmFsTWFya1R5cGUuTWFwLFxuICAgIFtJbnRlcm5hbE1hcmtUeXBlLlBpZV06IEV4dGVybmFsTWFya1R5cGUuUGllLFxuICAgIFtJbnRlcm5hbE1hcmtUeXBlLlBvbHlnb25dOiBFeHRlcm5hbE1hcmtUeXBlLlBvbHlnb24sXG4gICAgW0ludGVybmFsTWFya1R5cGUuU2hhcGVdOiBFeHRlcm5hbE1hcmtUeXBlLlNoYXBlLFxuICAgIFtJbnRlcm5hbE1hcmtUeXBlLlNxdWFyZV06IEV4dGVybmFsTWFya1R5cGUuU3F1YXJlLFxuICAgIFtJbnRlcm5hbE1hcmtUeXBlLlRleHRdOiBFeHRlcm5hbE1hcmtUeXBlLlRleHQsXG4gICAgW0ludGVybmFsTWFya1R5cGUuVml6RXh0ZW5zaW9uXTogRXh0ZXJuYWxNYXJrVHlwZS5WaXpFeHRlbnNpb24sXG4gIH0pO1xufVxuLyogdHNsaW50OmVuYWJsZTp0eXBlZGVmICovXG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcywgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTaW5nbGVFdmVudE1hbmFnZXIgfSBmcm9tICcuL1NpbmdsZUV2ZW50TWFuYWdlcic7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuL1RhYmxlYXVFcnJvcic7XG5cbi8qKlxuICogQ2xhc3MgZGVzaWduZWQgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgaGFuZGxlcnMgZnJvbSBhIHVzZXIuIE9ubHkgdGhvc2UgZXZlbnRzXG4gKiB3aGljaCBhcmUgYWRkZWQgdmlhIEFkZE5ld0V2ZW50VHlwZSB3aWxsIGJlIHN1cHBvcnRlZCBieSB0aGlzIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudExpc3RlbmVyTWFuYWdlciBpbXBsZW1lbnRzIENvbnRyYWN0LkV2ZW50TGlzdGVuZXJNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfZXZlbnRMaXN0ZW5lck1hbmFnZXJzOiB7IFt0YWJsZWF1RXZlbnRUeXBlOiBzdHJpbmddOiBTaW5nbGVFdmVudE1hbmFnZXIgfTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lck1hbmFnZXJzID0ge307XG4gIH1cblxuICBwdWJsaWMgYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGU6IFRhYmxlYXVFdmVudFR5cGUsIGhhbmRsZXI6IENvbnRyYWN0LlRhYmxlYXVFdmVudEhhbmRsZXJGbik6IENvbnRyYWN0LlRhYmxlYXVFdmVudFVucmVnaXN0ZXJGbiB7XG4gICAgaWYgKCF0aGlzLl9ldmVudExpc3RlbmVyTWFuYWdlcnMuaGFzT3duUHJvcGVydHkoZXZlbnRUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLlVuc3VwcG9ydGVkRXZlbnROYW1lLCBgQ2Fubm90IGFkZCBldmVudCwgdW5zdXBwb3J0ZWQgZXZlbnQgdHlwZTogJHtldmVudFR5cGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50TGlzdGVuZXJNYW5hZ2Vyc1tldmVudFR5cGVdLmFkZEV2ZW50TGlzdGVuZXIoaGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGU6IFRhYmxlYXVFdmVudFR5cGUsIGhhbmRsZXI6IENvbnRyYWN0LlRhYmxlYXVFdmVudEhhbmRsZXJGbik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fZXZlbnRMaXN0ZW5lck1hbmFnZXJzLmhhc093blByb3BlcnR5KGV2ZW50VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5VbnN1cHBvcnRlZEV2ZW50TmFtZSwgYENhbm5vdCByZW1vdmUgZXZlbnQsIHVuc3VwcG9ydGVkIGV2ZW50IHR5cGU6ICR7ZXZlbnRUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ldmVudExpc3RlbmVyTWFuYWdlcnNbZXZlbnRUeXBlXS5yZW1vdmVFdmVudExpc3RlbmVyKGhhbmRsZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZE5ld0V2ZW50VHlwZShldmVudE1hbmFnZXI6IFNpbmdsZUV2ZW50TWFuYWdlcik6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJNYW5hZ2Vyc1tldmVudE1hbmFnZXIuZXZlbnRUeXBlXSA9IGV2ZW50TWFuYWdlcjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENvbHVtblR5cGUsIERhdGFUeXBlLCBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSwgRmllbGRSb2xlVHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBGaWVsZEltcGwgfSBmcm9tICcuL0ltcGwvRmllbGRJbXBsJztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4vVXRpbHMvRXJyb3JIZWxwZXJzJztcblxuZXhwb3J0IGNsYXNzIEZpZWxkIGltcGxlbWVudHMgQ29udHJhY3QuRmllbGQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfZmllbGRJbXBsOiBGaWVsZEltcGwpIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW1wbC5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW1wbC5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YVR5cGUoKTogRGF0YVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuZGF0YVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFnZ3JlZ2F0aW9uKCk6IEZpZWxkQWdncmVnYXRpb25UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmFnZ3JlZ2F0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IENvbnRyYWN0LkRhdGFTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuZGF0YVNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm9sZSgpOiBGaWVsZFJvbGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLnJvbGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuaXNIaWRkZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzR2VuZXJhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuaXNHZW5lcmF0ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQ2FsY3VsYXRlZEZpZWxkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuaXNDYWxjdWxhdGVkRmllbGQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtblR5cGUoKTogQ29sdW1uVHlwZSB7XG4gICAgdGhyb3cgRXJyb3JIZWxwZXJzLmFwaU5vdEltcGxlbWVudGVkKCdGaWVsZC5jb2x1bW5UeXBlJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQ29tYmluZWRGaWVsZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmlzQ29tYmluZWRGaWVsZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQcmVzZW50T25QdWJsaXNoZWREYXRhc291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEltcGwuaXNQcmVzZW50T25QdWJsaXNoZWREYXRhc291cmNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDdXN0b21WaWV3TW9kZWwgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMsIFZpelNlcnZpY2UgfSBmcm9tICcuLi8uLi9BcGlTaGFyZWQnO1xuZXhwb3J0IGNsYXNzIEN1c3RvbVZpZXdJbXBsIHtcbiAgcHJpdmF0ZSBfbHVpZDogc3RyaW5nO1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NoYXJlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaXNEZWZhdWx0OiBib29sZWFuO1xuICBwcml2YXRlIF9vd25lck5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfdXJsOiBzdHJpbmc7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjdXN0b21WaWV3TW9kZWw6IEN1c3RvbVZpZXdNb2RlbCwgcHJpdmF0ZSBfcmVnaXN0cnlJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbHVpZCA9IGN1c3RvbVZpZXdNb2RlbC5sdWlkO1xuICAgIHRoaXMuX25hbWUgPSBjdXN0b21WaWV3TW9kZWwubmFtZTtcbiAgICB0aGlzLl9zaGFyZWQgPSBjdXN0b21WaWV3TW9kZWwuc2hhcmVkO1xuICAgIHRoaXMuX2lzRGVmYXVsdCA9IGN1c3RvbVZpZXdNb2RlbC5pc0RlZmF1bHQ7XG4gICAgdGhpcy5fb3duZXJOYW1lID0gY3VzdG9tVmlld01vZGVsLm93bmVyLnVzZXJGcmllbmRseU5hbWU7XG4gICAgdGhpcy5fdXJsID0gY3VzdG9tVmlld01vZGVsLnVybDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbHVpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbHVpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hhcmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHNoYXJlZChzaGFyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaGFyZWQgPSBzaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNEZWZhdWx0O1xuICB9XG5cbiAgcHVibGljIHNldCBpc0RlZmF1bHQoaXNEZWZhdWx0OiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNEZWZhdWx0ID0gaXNEZWZhdWx0O1xuICB9XG5cbiAgcHVibGljIGdldCBvd25lck5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX293bmVyTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdXJsKCkge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFzeW5jKCk6IFByb21pc2U8Q3VzdG9tVmlld0ltcGw+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFZpelNlcnZpY2U+KFNlcnZpY2VOYW1lcy5WaXopO1xuICAgIHJldHVybiBzZXJ2aWNlLnNhdmVBc3luYyh0aGlzKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIERhc2hib2FyZExheW91dENoYW5nZSxcbiAgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscyxcbiAgRXJyb3JDb2RlcyxcbiAgU2hhcmVkRXJyb3JDb2RlcyxcbiAgU2hlZXRUeXBlLFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT2JqZWN0VHlwZSwgRGFzaGJvYXJkWm9uZSwgU2hlZXRQYXRoLCBWaXN1YWxJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MgfSBmcm9tICcuLi9FbnVtTWFwcGluZ3MvSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vUG9pbnQnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0FuaW1hdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0ZpbHRlclNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9ab25lU2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IERhc2hib2FyZE9iamVjdEltcGwgfSBmcm9tICcuL0Rhc2hib2FyZE9iamVjdEltcGwnO1xuaW1wb3J0IHsgU2hlZXRJbXBsIH0gZnJvbSAnLi9TaGVldEltcGwnO1xuaW1wb3J0IHsgU2hlZXRJbmZvSW1wbCB9IGZyb20gJy4vU2hlZXRJbmZvSW1wbCc7XG5pbXBvcnQgeyBTdG9yeVBvaW50SW1wbCB9IGZyb20gJy4vU3RvcnlQb2ludEltcGwnO1xuaW1wb3J0IHsgV29ya3NoZWV0SW1wbCB9IGZyb20gJy4vV29ya3NoZWV0SW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRJbXBsIGV4dGVuZHMgU2hlZXRJbXBsIHtcbiAgcHJpdmF0ZSBfd29ya3NoZWV0c0ltcGw6IEFycmF5PFdvcmtzaGVldEltcGw+O1xuICBwcml2YXRlIF9vYmplY3RzOiBBcnJheTxEYXNoYm9hcmRPYmplY3RJbXBsPjtcbiAgcHJpdmF0ZSB6b25lTWFwOiBNYXA8bnVtYmVyLCBEYXNoYm9hcmRPYmplY3RJbXBsPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgX3NoZWV0SW5mbzogU2hlZXRJbmZvSW1wbCxcbiAgICBwcml2YXRlIF96b25lczogQXJyYXk8RGFzaGJvYXJkWm9uZT4sXG4gICAgcHJpdmF0ZSBfc2hlZXRQYXRoOiBTaGVldFBhdGgsXG4gICAgX3JlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF9wYXJlbnRTdG9yeVBvaW50SW1wbDogU3RvcnlQb2ludEltcGwgfCBudWxsLFxuICAgIHByaXZhdGUgX2FjdGl2ZURhc2hib2FyZE9iamVjdElkOiBudW1iZXIgPSAwLFxuICApIHtcbiAgICBzdXBlcihfc2hlZXRJbmZvLCBfcmVnaXN0cnlJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdvcmtzaGVldHNJbXBsKCk6IEFycmF5PFdvcmtzaGVldEltcGw+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0c0ltcGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9iamVjdHMoKTogQXJyYXk8RGFzaGJvYXJkT2JqZWN0SW1wbD4ge1xuICAgIHJldHVybiB0aGlzLl9vYmplY3RzO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRTdG9yeVBvaW50KCk6IFN0b3J5UG9pbnRJbXBsIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFN0b3J5UG9pbnRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVEYXNoYm9hcmRPYmplY3RJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXNoYm9hcmRPYmplY3RJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlRGFzaGJvYXJkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zaGVldFBhdGguc2hlZXROYW1lO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVXaXRoUHVibGljSW50ZXJmYWNlcygpOiB2b2lkIHtcbiAgICB0aGlzLl93b3Jrc2hlZXRzSW1wbCA9IG5ldyBBcnJheTxXb3Jrc2hlZXRJbXBsPigpO1xuICAgIHRoaXMuX29iamVjdHMgPSBuZXcgQXJyYXk8RGFzaGJvYXJkT2JqZWN0SW1wbD4oKTtcbiAgICB0aGlzLnpvbmVNYXAgPSBuZXcgTWFwPG51bWJlciwgRGFzaGJvYXJkT2JqZWN0SW1wbD4oKTtcblxuICAgIC8vIFByb2Nlc3MgYWxsIHRoZSB6b25lcyB3aGljaCBhcmUgY29udGFpbmVkIGluIHRoaXMgZGFzaGJvYXJkXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuX3pvbmVzKSB7XG4gICAgICBsZXQgd29ya3NoZWV0SW1wbDogV29ya3NoZWV0SW1wbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgem9uZVNpemU6IENvbnRyYWN0LlNpemUgPSB7IHdpZHRoOiB6b25lLndpZHRoLCBoZWlnaHQ6IHpvbmUuaGVpZ2h0IH07XG4gICAgICAvLyBBcyB0aGUgZGFzaGJvYXJkIGlzIGFjdGl2ZSwgYWxsIG90aGVyIHpvbmVzIGluIHRoZSBkYXNoYm9hcmQgYXJlIGluYWN0aXZlLlxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgaWYgKHpvbmUuem9uZVR5cGUgPT09IERhc2hib2FyZE9iamVjdFR5cGUuV29ya3NoZWV0KSB7XG4gICAgICAgIGxldCB3b3Jrc2hlZXROYW1lID0gJyc7XG4gICAgICAgIGxldCB3b3Jrc2hlZXRVcmwgPSAnJztcbiAgICAgICAgbGV0IGlzSGlkZGVuID0gZmFsc2U7XG4gICAgICAgIGlmICh6b25lLnNoZWV0SW5mbykge1xuICAgICAgICAgIC8vIHpvbmUuc2hlZXRJbmZvIHdhcyBub3QgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gaW50ZXJuYWwtY29udHJhY3QgMS42LjBcbiAgICAgICAgICB3b3Jrc2hlZXROYW1lID0gem9uZS5zaGVldEluZm8ubmFtZTtcblxuICAgICAgICAgIC8vIHdvcmtzaGVldFVybCAmIGlzSGlkZGVuIGlzIGZvciBFbWJlZGRpbmcgb25seVxuICAgICAgICAgIHdvcmtzaGVldFVybCA9IHpvbmUuc2hlZXRJbmZvLnVybCB8fCAnJztcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgdXJsLCB0aGVuIGl0J3Mgbm90IGhpZGRlblxuICAgICAgICAgIGlzSGlkZGVuID0gd29ya3NoZWV0VXJsID09PSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3b3Jrc2hlZXROYW1lID0gem9uZS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluZGV4ZXMsIGlzQWN0aXZlIGFuZCBzb21lIG1vcmUgcHJvcGVydGllcyBpbiBzaGVldEluZm9JbXBsIGFyZSBlbWJlZGRpbmcgc3BlY2lmaWMuXG4gICAgICAgIC8vIEJ1dCB3ZSBpbml0IHRoZW0gZm9yIGJvdGggZXh0ZW5zaW9ucyBhbmQgZW1iZWRkaW5nIGFzIHRoZSBNb2RlbHMgd2lsbCBvbmx5IHVzZSB3aGF0IGlzIHJlbGV2YW50LlxuICAgICAgICBjb25zdCBzaGVldEluZm9JbXBsID0gbmV3IFNoZWV0SW5mb0ltcGwoXG4gICAgICAgICAgd29ya3NoZWV0TmFtZSxcbiAgICAgICAgICBTaGVldFR5cGUuV29ya3NoZWV0LFxuICAgICAgICAgIHpvbmVTaXplLFxuICAgICAgICAgIHRoaXMuX3dvcmtzaGVldHNJbXBsLmxlbmd0aCxcbiAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICBpc0hpZGRlbixcbiAgICAgICAgICB3b3Jrc2hlZXRVcmwsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgdml6SWQ6IFZpc3VhbElkID0ge1xuICAgICAgICAgIHdvcmtzaGVldDogd29ya3NoZWV0TmFtZSxcbiAgICAgICAgICBkYXNoYm9hcmQ6IHRoaXMuX3NoZWV0SW5mb0ltcGwubmFtZSxcbiAgICAgICAgICBzdG9yeWJvYXJkOiB0aGlzLl9zaGVldFBhdGguc3Rvcnlib2FyZCxcbiAgICAgICAgICBmbGlwYm9hcmRab25lSUQ6IHRoaXMuX3NoZWV0UGF0aC5mbGlwYm9hcmRab25lSUQsXG4gICAgICAgICAgc3RvcnlQb2ludElEOiB0aGlzLl9zaGVldFBhdGguc3RvcnlQb2ludElELFxuICAgICAgICB9O1xuXG4gICAgICAgIHdvcmtzaGVldEltcGwgPSBuZXcgV29ya3NoZWV0SW1wbChzaGVldEluZm9JbXBsLCB0aGlzLl9yZWdpc3RyeUlkLCB2aXpJZCwgdGhpcywgdGhpcy5fcGFyZW50U3RvcnlQb2ludEltcGwpO1xuICAgICAgICB0aGlzLl93b3Jrc2hlZXRzSW1wbC5wdXNoKHdvcmtzaGVldEltcGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB6b25lUG9pbnQgPSBuZXcgUG9pbnQoem9uZS54LCB6b25lLnkpO1xuXG4gICAgICBjb25zdCBkYXNoYm9hcmRPYmplY3RJbXBsID0gbmV3IERhc2hib2FyZE9iamVjdEltcGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5kYXNoYm9hcmRPYmplY3RUeXBlLmNvbnZlcnQoem9uZS56b25lVHlwZSksXG4gICAgICAgIHpvbmVQb2ludCxcbiAgICAgICAgem9uZVNpemUsXG4gICAgICAgIHdvcmtzaGVldEltcGwsXG4gICAgICAgIHpvbmUubmFtZSxcbiAgICAgICAgem9uZS5pc0Zsb2F0aW5nICE9PSB1bmRlZmluZWQgPyB6b25lLmlzRmxvYXRpbmcgOiBmYWxzZSwgLy8gYmVmb3JlIDEuNi4wIHdlIGRpZG4ndCBoYXZlIGlzRmxvYXRpbmcsIHNvIHdlIGFzc3VtZSBmYWxzZVxuICAgICAgICB6b25lLmlzVmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gem9uZS5pc1Zpc2libGUgOiB0cnVlLCAvLyBiZWZvcmUgMS42LjAgd2UgZGlkbid0IGhhdmUgaXNWaXNpYmxlLCBzbyB3ZSBhc3N1bWUgdHJ1ZVxuICAgICAgICB6b25lLnpvbmVJZCxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuX29iamVjdHMucHVzaChkYXNoYm9hcmRPYmplY3RJbXBsKTtcbiAgICAgIHRoaXMuem9uZU1hcC5zZXQoem9uZS56b25lSWQsIGRhc2hib2FyZE9iamVjdEltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5QXN5bmMoZGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcDogQ29udHJhY3QuRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcCB8IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHpvbmVTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFpvbmVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuWm9uZSk7XG5cbiAgICByZXR1cm4gem9uZVNlcnZpY2Uuc2V0VmlzaWJpbGl0eUFzeW5jKC8qRGFzaGJvYXJkIE5hbWUqLyB0aGlzLm5hbWUsIHRoaXMuem9uZU1hcCwgZGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGFzaGJvYXJkT2JqZWN0QnlJZChkYXNoYm9hcmRPYmplY3RJZDogbnVtYmVyKTogRGFzaGJvYXJkT2JqZWN0SW1wbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU1hcC5nZXQoZGFzaGJvYXJkT2JqZWN0SWQpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVpvbmVzKG5ld1pvbmVzOiBBcnJheTxEYXNoYm9hcmRab25lPiwgbmV3QWN0aXZlWm9uZUlkID0gMCwgbmV3QWN0aXZlRGFzaGJvYXJkTmFtZSA9ICcnKTogRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscyB7XG4gICAgLy8gZ2V0dGluZyBwcmV2aW91cyBkYXNoYm9hcmQgb2JqZWN0cywgYWN0aXZlIHpvbmUgSUQgYW5kIGFjdGl2ZSBkYXNoYm9hcmQgbmFtZVxuICAgIGNvbnN0IG9sZERhc2hib2FyZE9iamVjdHMgPSB0aGlzLl9vYmplY3RzO1xuICAgIGNvbnN0IG9sZFpvbmVNYXAgPSB0aGlzLnpvbmVNYXA7XG4gICAgY29uc3Qgb2xkQWN0aXZlWm9uZUlkID0gdGhpcy5fYWN0aXZlRGFzaGJvYXJkT2JqZWN0SWQ7XG4gICAgY29uc3Qgb2xkQWN0aXZlRGFzaGJvYXJkTmFtZSA9IHRoaXMuX3NoZWV0UGF0aC5zaGVldE5hbWU7XG4gICAgLy8gdXBkYXRpbmcgem9uZXMgYW5kIHJlaW5pdGlhbGl6aW5nIGluc3RhbmNlIHZhcmlhYmxlc1xuICAgIHRoaXMuX3pvbmVzID0gbmV3Wm9uZXM7XG4gICAgdGhpcy5fYWN0aXZlRGFzaGJvYXJkT2JqZWN0SWQgPSBuZXdBY3RpdmVab25lSWQ7XG4gICAgdGhpcy5fc2hlZXRQYXRoLnNoZWV0TmFtZSA9IG5ld0FjdGl2ZURhc2hib2FyZE5hbWU7XG4gICAgdGhpcy5fc2hlZXRJbmZvSW1wbC5uYW1lID0gbmV3QWN0aXZlRGFzaGJvYXJkTmFtZTtcbiAgICB0aGlzLmluaXRpYWxpemVXaXRoUHVibGljSW50ZXJmYWNlcygpO1xuICAgIC8vIGdldHRpbmcgbmV3IGRhc2hib2FyZCBvYmplY3RzXG4gICAgY29uc3QgbmV3RGFzaGJvYXJkT2JqZWN0cyA9IHRoaXMuX29iamVjdHM7XG4gICAgY29uc3QgbmV3Wm9uZU1hcCA9IHRoaXMuem9uZU1hcDtcbiAgICAvLyBpbml0aWFsaXppbmcgbWFwIGZvciBjaGFuZ2VzXG4gICAgY29uc3Qgem9uZUNoYW5nZXM6IERhc2hib2FyZExheW91dENoYW5nZURldGFpbHMgPSBuZXcgTWFwKCk7XG5cbiAgICAvLyBjb21wYXJpbmcgb2xkIGRhc2hib2FyZCBvYmplY3RzIHdpdGggbmV3IG9uZXNcbiAgICBvbGREYXNoYm9hcmRPYmplY3RzLmZvckVhY2goKG9sZE9iamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb2xkSWQ6IG51bWJlciA9IG9sZE9iamVjdC5pZDtcblxuICAgICAgLy8gY2hlY2tpbmcgaWYgem9uZSB3YXMgcmVtb3ZlZFxuICAgICAgaWYgKCFuZXdab25lTWFwLmhhcyhvbGRJZCkpIHtcbiAgICAgICAgdGhpcy5hZGRDaGFuZ2Uob2xkSWQsIHpvbmVDaGFuZ2VzLCBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UuUmVtb3ZlZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3T2JqZWN0ID0gbmV3Wm9uZU1hcC5nZXQob2xkSWQpO1xuICAgICAgaWYgKG9sZE9iamVjdC5pc0Zsb2F0aW5nICE9PSBuZXdPYmplY3QhLmlzRmxvYXRpbmcpIHtcbiAgICAgICAgdGhpcy5hZGRDaGFuZ2Uob2xkSWQsIHpvbmVDaGFuZ2VzLCBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UuSXNGbG9hdGluZ0NoYW5nZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkT2JqZWN0LmlzVmlzaWJsZSAhPT0gbmV3T2JqZWN0IS5pc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5hZGRDaGFuZ2Uob2xkSWQsIHpvbmVDaGFuZ2VzLCBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UuSXNWaXNpYmxlQ2hhbmdlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbGRPYmplY3QubmFtZSAhPT0gbmV3T2JqZWN0IS5uYW1lKSB7XG4gICAgICAgIHRoaXMuYWRkQ2hhbmdlKG9sZElkLCB6b25lQ2hhbmdlcywgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlLk5hbWVDaGFuZ2VkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9sZE9iamVjdC5wb3NpdGlvbi54ICE9PSBuZXdPYmplY3QhLnBvc2l0aW9uLnggfHwgb2xkT2JqZWN0LnBvc2l0aW9uLnkgIT09IG5ld09iamVjdCEucG9zaXRpb24ueSkge1xuICAgICAgICB0aGlzLmFkZENoYW5nZShvbGRJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5Qb3NpdGlvbkNoYW5nZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkT2JqZWN0LnNpemUud2lkdGggIT09IG5ld09iamVjdCEuc2l6ZS53aWR0aCB8fCBvbGRPYmplY3Quc2l6ZS5oZWlnaHQgIT09IG5ld09iamVjdCEuc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgdGhpcy5hZGRDaGFuZ2Uob2xkSWQsIHpvbmVDaGFuZ2VzLCBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UuU2l6ZUNoYW5nZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2tpbmcgZm9yIGFueSBhZGRlZCB6b25lc1xuICAgIG5ld0Rhc2hib2FyZE9iamVjdHMuZm9yRWFjaCgobmV3T2JqZWN0KSA9PiB7XG4gICAgICBpZiAoIW9sZFpvbmVNYXAuaGFzKG5ld09iamVjdC5pZCkpIHtcbiAgICAgICAgdGhpcy5hZGRDaGFuZ2UobmV3T2JqZWN0LmlkLCB6b25lQ2hhbmdlcywgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlLkFkZGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNraW5nIGlmIHpvbmUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkXG4gICAgaWYgKG9sZEFjdGl2ZVpvbmVJZCAhPT0gbmV3QWN0aXZlWm9uZUlkKSB7XG4gICAgICBpZiAobmV3QWN0aXZlWm9uZUlkICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYWRkQ2hhbmdlKG5ld0FjdGl2ZVpvbmVJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5TZWxlY3RlZCk7XG4gICAgICB9XG4gICAgICBpZiAob2xkQWN0aXZlWm9uZUlkICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYWRkQ2hhbmdlKG9sZEFjdGl2ZVpvbmVJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5EZXNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVja2luZyBpZiBzd2l0Y2hlZCB0byBhbm90aGVyIGRhc2hib2FyZFxuICAgIGlmIChvbGRBY3RpdmVEYXNoYm9hcmROYW1lICE9PSBuZXdBY3RpdmVEYXNoYm9hcmROYW1lKSB7XG4gICAgICB0aGlzLmFkZENoYW5nZSgwLCB6b25lQ2hhbmdlcywgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlLkRhc2hib2FyZENoYW5nZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB6b25lQ2hhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2hhbmdlKHpvbmVJZDogbnVtYmVyLCB6b25lQ2hhbmdlczogRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscywgY2hhbmdlOiBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAoIXpvbmVDaGFuZ2VzLmhhcyh6b25lSWQpKSB7XG4gICAgICB6b25lQ2hhbmdlcy5zZXQoem9uZUlkLCBbXSk7XG4gICAgfVxuXG4gICAgem9uZUNoYW5nZXMuZ2V0KHpvbmVJZCkhLnB1c2goY2hhbmdlKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlQW5kUmVzaXplRGFzaGJvYXJkT2JqZWN0c0FzeW5jKFxuICAgIGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5OiBDb250cmFjdC5EYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgem9uZVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Wm9uZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5ab25lKTtcblxuICAgIHJldHVybiB6b25lU2VydmljZS5tb3ZlQW5kUmVzaXplQXN5bmMoLypEYXNoYm9hcmQgTmFtZSovIHRoaXMubmFtZSwgdGhpcy56b25lTWFwLCBkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheSk7XG4gIH1cblxuICBwdWJsaWMgcmVwbGF5QW5pbWF0aW9uQXN5bmMocmVwbGF5U3BlZWQ6IENvbnRyYWN0LlJlcGxheVNwZWVkVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFuaW1hdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8QW5pbWF0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLkFuaW1hdGlvbik7XG5cbiAgICByZXR1cm4gYW5pbWF0aW9uU2VydmljZS5yZXBsYXlBc3luYyhyZXBsYXlTcGVlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsdGVyc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuRmlsdGVyPj4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXRPckVtYmVkZGVkSW5BY3RpdmVTdG9yeVBvaW50KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEZpbHRlclNlcnZpY2U+KFNlcnZpY2VOYW1lcy5GaWx0ZXIpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldERhc2hib2FyZEZpbHRlcnNBc3luYygpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5RmlsdGVyQXN5bmMoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIHVwZGF0ZVR5cGU6IENvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUsXG4gICAgb3B0aW9uczogQ29udHJhY3QuRmlsdGVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPENvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGU+KHVwZGF0ZVR5cGUsIENvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUsICdGaWx0ZXJVcGRhdGVUeXBlJyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVN0cmluZ1BhcmFtZXRlcihmaWVsZE5hbWUsICdmaWVsZE5hbWUnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICd2YWx1ZXMgcGFyYW1ldGVyIGZvciBhcHBseURhc2hib2FyZEZpbHRlckFzeW5jIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldE9yRW1iZWRkZWRJbkFjdGl2ZVN0b3J5UG9pbnQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlEYXNoYm9hcmRGaWx0ZXJBc3luYyhmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBAVy0xMjk4NjQzOTogcmVtb3ZlIG9uY2UgaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzIGlzIG1vdmVkIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhpcyBjbGFzc1xuICAvLyBUaGlzIG1ldGhvZCBvbmx5IGV4aXN0cyBzaW5jZSB3b3Jrc2hlZXRzSW1wbCBjYW4gYmUgdW5kZWZpbmVkLCBidXQgd2UgbmVlZCB0aGUgd29ya3NoZWV0IG5hbWVzIGluIHRoZSBFeHBvcnQgQVBJc1xuICBwdWJsaWMgZ2V0V29ya3NoZWV0TmFtZXNGcm9tWm9uZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3Qgd29ya3NoZWV0TmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuX3pvbmVzKSB7XG4gICAgICBpZiAoem9uZS56b25lVHlwZSAhPT0gRGFzaGJvYXJkT2JqZWN0VHlwZS5Xb3Jrc2hlZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyB6b25lLnNoZWV0SW5mbyB3YXMgbm90IGluaXRpYWxpemVkIHByaW9yIHRvIGludGVybmFsLWNvbnRyYWN0IDEuNi4wXG4gICAgICBjb25zdCB3b3Jrc2hlZXROYW1lID0gem9uZS5zaGVldEluZm8gPyB6b25lLnNoZWV0SW5mby5uYW1lIDogem9uZS5uYW1lO1xuICAgICAgd29ya3NoZWV0TmFtZXMucHVzaCh3b3Jrc2hlZXROYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya3NoZWV0TmFtZXM7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUFjdGl2ZVNoZWV0T3JFbWJlZGRlZEluQWN0aXZlU3RvcnlQb2ludCgpIHtcbiAgICBjb25zdCBpc1Jvb3RBbmRBY3RpdmVEYXNoYm9hcmQgPSB0aGlzLmFjdGl2ZTtcbiAgICBjb25zdCBpc1dpdGhpbkFjdGl2ZVN0b3J5UG9pbnQgPSB0aGlzLnBhcmVudFN0b3J5UG9pbnQgIT0gbnVsbCAmJiB0aGlzLnBhcmVudFN0b3J5UG9pbnQuYWN0aXZlO1xuICAgIGlmICghaXNSb290QW5kQWN0aXZlRGFzaGJvYXJkICYmICFpc1dpdGhpbkFjdGl2ZVN0b3J5UG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5Ob3RBY3RpdmVTaGVldCwgJ09wZXJhdGlvbiBub3QgYWxsb3dlZCBvbiBub24tYWN0aXZlIHNoZWV0Jyk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT2JqZWN0VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRJbXBsIH0gZnJvbSAnLi9EYXNoYm9hcmRJbXBsJztcbmltcG9ydCB7IFdvcmtzaGVldEltcGwgfSBmcm9tICcuL1dvcmtzaGVldEltcGwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkYXNoYm9hcmQgb2JqZWN0cyAtIHRoZSB6b25lcyBpbiBhIGRhc2hib2FyZC5cbiAqIFRoaXMgZG9lcyBub3QgZm9sbG93IHRoZSBJbXBsIHBhdHRlcm4gYXMgaXQgaXMganVzdCBhIHByb3BlcnR5IGJhZy5cbiAqL1xuZXhwb3J0IGNsYXNzIERhc2hib2FyZE9iamVjdEltcGwge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZGFzaGJvYXJkSW1wbDogRGFzaGJvYXJkSW1wbCxcbiAgICBwcml2YXRlIF90eXBlOiBEYXNoYm9hcmRPYmplY3RUeXBlLFxuICAgIHByaXZhdGUgX3Bvc2l0aW9uOiBDb250cmFjdC5Qb2ludCxcbiAgICBwcml2YXRlIF9zaXplOiBDb250cmFjdC5TaXplLFxuICAgIHByaXZhdGUgX3dvcmtzaGVldEltcGw6IFdvcmtzaGVldEltcGwgfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgX2lzRmxvYXRpbmc6IGJvb2xlYW4sXG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlOiBib29sZWFuLFxuICAgIHByaXZhdGUgX2lkOiBudW1iZXIsXG4gICkge31cblxuICBwdWJsaWMgZ2V0IGRhc2hib2FyZEltcGwoKTogRGFzaGJvYXJkSW1wbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHR5cGUoKTogRGFzaGJvYXJkT2JqZWN0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6IENvbnRyYWN0LlBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemUoKTogQ29udHJhY3QuU2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdvcmtzaGVldEltcGwoKTogV29ya3NoZWV0SW1wbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNGbG9hdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNGbG9hdGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24gfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0ICogYXMgSW50ZXJuYWxDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblN1bW1hcnkgfSBmcm9tICcuLi9Db25uZWN0aW9uU3VtbWFyeSc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uL0ZpZWxkJztcbmltcG9ydCB7IExvZ2ljYWxUYWJsZSB9IGZyb20gJy4uL0xvZ2ljYWxUYWJsZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0RhdGFTb3VyY2VTZXJ2aWNlJztcbmltcG9ydCB7IEdldERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvR2V0RGF0YVNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgVGFibGVTdW1tYXJ5IH0gZnJvbSAnLi4vVGFibGVTdW1tYXJ5JztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5pbXBvcnQgeyBGaWVsZEltcGwgfSBmcm9tICcuL0ZpZWxkSW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlSW1wbCB7XG4gIHByaXZhdGUgX2ZpZWxkczogQXJyYXk8RmllbGQ+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kYXRhU291cmNlSW5mbzogSW50ZXJuYWxDb250cmFjdC5EYXRhU291cmNlLCBwcml2YXRlIF9yZWdpc3RyeUlkOiBudW1iZXIpIHtcbiAgICB0aGlzLl9maWVsZHMgPSBfZGF0YVNvdXJjZUluZm8uZmllbGRzLm1hcCgoZmllbGRNb2RlbCkgPT4ge1xuICAgICAgY29uc3QgZmllbGRJbXBsID0gbmV3IEZpZWxkSW1wbChmaWVsZE1vZGVsLCB0aGlzKTtcbiAgICAgIHJldHVybiBuZXcgRmllbGQoZmllbGRJbXBsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW5mby5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW5mby5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXh0cmFjdFVwZGF0ZVRpbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUluZm8uZXh0cmFjdFVwZGF0ZVRpbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxDb250cmFjdC5GaWVsZD4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRXh0cmFjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUluZm8uaXNFeHRyYWN0O1xuICB9XG5cbiAgcHVibGljIGdldCBpc1B1Ymxpc2hlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUluZm8uaXNQdWJsaXNoZWQ7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaGVkVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbmZvLnB1Ymxpc2hlZFVybDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhQYWdlUm93TGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMTAwMDA7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2VTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPERhdGFTb3VyY2VTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRGF0YVNvdXJjZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIGRhdGFTb3VyY2VTZXJ2aWNlLnJlZnJlc2hBc3luYyh0aGlzLl9kYXRhU291cmNlSW5mby5pZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdGlvblN1bW1hcmllc0FzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuQ29ubmVjdGlvblN1bW1hcnlbXT4ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2VTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPERhdGFTb3VyY2VTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRGF0YVNvdXJjZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIGRhdGFTb3VyY2VTZXJ2aWNlLmdldENvbm5lY3Rpb25TdW1tYXJpZXNBc3luYyh0aGlzLl9kYXRhU291cmNlSW5mby5pZCkudGhlbjxDb250cmFjdC5Db25uZWN0aW9uU3VtbWFyeVtdPigoc3VtbWFyaWVzKSA9PiB7XG4gICAgICByZXR1cm4gc3VtbWFyaWVzLm1hcCgoc3VtbWFyeSkgPT4gbmV3IENvbm5lY3Rpb25TdW1tYXJ5KHN1bW1hcnkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3RpdmVUYWJsZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LlRhYmxlU3VtbWFyeT4+IHtcbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxEYXRhU291cmNlU2VydmljZT4oU2VydmljZU5hbWVzLkRhdGFTb3VyY2VTZXJ2aWNlKTtcblxuICAgIHJldHVybiBkYXRhU291cmNlU2VydmljZS5nZXRBY3RpdmVUYWJsZXNBc3luYyh0aGlzLl9kYXRhU291cmNlSW5mby5pZCkudGhlbjxBcnJheTxDb250cmFjdC5UYWJsZVN1bW1hcnk+PigodGFibGVJbmZvcykgPT4ge1xuICAgICAgcmV0dXJuIHRhYmxlSW5mb3MubWFwKCh0YWJsZUluZm8pID0+IG5ldyBUYWJsZVN1bW1hcnkodGFibGVJbmZvKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ0RhdGFBc3luYyhvcHRpb25zPzogQ29udHJhY3QuRGF0YVNvdXJjZVVuZGVybHlpbmdEYXRhT3B0aW9ucyk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgY29uc3QgZ2V0RGF0YVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHJldHVybiBnZXREYXRhU2VydmljZS5nZXREYXRhU291cmNlRGF0YUFzeW5jKFxuICAgICAgdGhpcy5pZCxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVBbGlhc2VzLFxuICAgICAgb3B0aW9ucy5tYXhSb3dzIHx8IDAsIC8vIDAgYW5kIFtdIGFyZSBkZWZhdWx0c1xuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlIHx8IFtdLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZURhdGFWYWx1ZXNPcHRpb24gfHwgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24uQWxsVmFsdWVzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9naWNhbFRhYmxlRGF0YUFzeW5jKGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250cmFjdC5EYXRhU291cmNlVW5kZXJseWluZ0RhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICBjb25zdCBnZXREYXRhU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgcmV0dXJuIGdldERhdGFTZXJ2aWNlLmdldExvZ2ljYWxUYWJsZURhdGFBc3luYyhcbiAgICAgIHRoaXMuaWQsXG4gICAgICBsb2dpY2FsVGFibGVJZCxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVBbGlhc2VzLFxuICAgICAgb3B0aW9ucy5tYXhSb3dzIHx8IDAsIC8vIDAgYW5kIFtdIGFyZSBkZWZhdWx0c1xuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlIHx8IFtdLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZURhdGFWYWx1ZXNPcHRpb24gfHwgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24uQWxsVmFsdWVzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgIGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsXG4gICAgcGFnZVJvd0NvdW50PzogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBDb250cmFjdC5EYXRhU291cmNlVW5kZXJseWluZ0RhdGFPcHRpb25zLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIGNvbnN0IGdldERhdGFTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gZ2V0RGF0YVNlcnZpY2UuZ2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgICAgdGhpcy5pZCxcbiAgICAgIGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgcGFnZVJvd0NvdW50IHx8IHRoaXMuZ2V0TWF4UGFnZVJvd0xpbWl0KCksXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgIG9wdGlvbnMuY29sdW1uc1RvSW5jbHVkZUJ5SWQgfHwgW10sXG4gICAgICBvcHRpb25zLmluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIHx8IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLkFsbFZhbHVlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVXaXRoUHVibGljSW50ZXJmYWNlcyhkYXRhU291cmNlOiBDb250cmFjdC5EYXRhU291cmNlKTogdm9pZCB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUludGVybmFsVmFsdWUoZGF0YVNvdXJjZSwgJ2RhdGFTb3VyY2UnKTtcblxuICAgIHRoaXMuX2ZpZWxkcyA9IHRoaXMuX2RhdGFTb3VyY2VJbmZvLmZpZWxkcy5tYXAoKGZpZWxkTW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkSW1wbCA9IG5ldyBGaWVsZEltcGwoZmllbGRNb2RlbCwgZGF0YVNvdXJjZSk7XG4gICAgICByZXR1cm4gbmV3IEZpZWxkKGZpZWxkSW1wbCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9naWNhbFRhYmxlc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuTG9naWNhbFRhYmxlPj4ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2VTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPERhdGFTb3VyY2VTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRGF0YVNvdXJjZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIGRhdGFTb3VyY2VTZXJ2aWNlLmdldExvZ2ljYWxUYWJsZXNBc3luYyh0aGlzLmlkKS50aGVuPEFycmF5PENvbnRyYWN0LkxvZ2ljYWxUYWJsZT4+KChsb2dpY2FsVGFibGVJbmZvcykgPT4ge1xuICAgICAgcmV0dXJuIGxvZ2ljYWxUYWJsZUluZm9zLm1hcCgobG9naWNhbFRhYmxlSW5mbykgPT4gbmV3IExvZ2ljYWxUYWJsZShsb2dpY2FsVGFibGVJbmZvKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhVHlwZSwgRmllbGRBZ2dyZWdhdGlvblR5cGUsIEZpZWxkUm9sZVR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0ICogYXMgSW50ZXJuYWxDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi4vRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyc7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEltcGwge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfZmllbGRJbmZvOiBJbnRlcm5hbENvbnRyYWN0LkZpZWxkLCBwcml2YXRlIF9wYXJlbnREYXRhU291cmNlPzogQ29udHJhY3QuRGF0YVNvdXJjZSkge31cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhVHlwZSgpOiBEYXRhVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5kYXRhVHlwZSA/PyBEYXRhVHlwZS5Vbmtub3duO1xuICB9XG5cbiAgcHVibGljIGdldCBhZ2dyZWdhdGlvbigpOiBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgcmV0dXJuIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5maWVsZEFnZ3JlZ2F0aW9uVHlwZS5jb252ZXJ0KHRoaXMuX2ZpZWxkSW5mby5hZ2dyZWdhdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQ29udHJhY3QuRGF0YVNvdXJjZSB7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnREYXRhU291cmNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBmaWVsZC4gUGxlYXNlIHVzZSBnZXRGaWVsZEFzeW5jIG1ldGhvZCB0byBnZXQgZmllbGQncyBkYXRhIHNvdXJjZSBpbmZvcm1hdGlvbmAsXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnREYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIGdldCByb2xlKCk6IEZpZWxkUm9sZVR5cGUge1xuICAgIHJldHVybiBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MuZmllbGRSb2xlVHlwZS5jb252ZXJ0KHRoaXMuX2ZpZWxkSW5mby5yb2xlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pc0hpZGRlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNHZW5lcmF0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pc0dlbmVyYXRlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNDYWxjdWxhdGVkRmllbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pc0NhbGN1bGF0ZWRGaWVsZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNDb21iaW5lZEZpZWxkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZEluZm8uaXNDb21iaW5lZEZpZWxkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1ByZXNlbnRPblB1Ymxpc2hlZERhdGFzb3VyY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pc1ByZXNlbnRPblB1Ymxpc2hlZERhdGFzb3VyY2U7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhVHlwZSwgUGFyYW1ldGVyVmFsdWVUeXBlLCBQZXJpb2RUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFBhcmFtZXRlckluZm8gfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi4vRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQgeyBEYXRhVmFsdWUgfSBmcm9tICcuLi9Nb2RlbHMvR2V0RGF0YU1vZGVscyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJzU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL1BhcmFtZXRlcnNTZXJ2aWNlJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSwgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IERhdGFWYWx1ZUZhY3RvcnkgfSBmcm9tICcuLi9VdGlscy9EYXRhVmFsdWVGYWN0b3J5JztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5pbXBvcnQgeyBQYXJhbSB9IGZyb20gJy4uL1V0aWxzL1BhcmFtJztcblxuZXhwb3J0IGNsYXNzIFBhcmFtZXRlckltcGwge1xuICBwcml2YXRlIF9hbGxvd2FibGVWYWx1ZXM6IENvbnRyYWN0LlBhcmFtZXRlckRvbWFpblJlc3RyaWN0aW9uO1xuICBwcml2YXRlIF9nbG9iYWxGaWVsZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbztcblxuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbywgcHJpdmF0ZSBfcmVnaXN0cnlJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQYXJhbWV0ZXJJbmZvKHBhcmFtZXRlckluZm8pO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlckluZm8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IERhdGFWYWx1ZSB7XG4gICAgcmV0dXJuIERhdGFWYWx1ZUZhY3RvcnkuTWFrZVBhcmFtZXRlckRhdGFWYWx1ZSh0aGlzLl9wYXJhbWV0ZXJJbmZvLmN1cnJlbnRWYWx1ZSwgdGhpcy5fcGFyYW1ldGVySW5mby5kYXRhVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFUeXBlKCk6IERhdGFUeXBlIHtcbiAgICByZXR1cm4gSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzLmRhdGFUeXBlLmNvbnZlcnQodGhpcy5fcGFyYW1ldGVySW5mby5kYXRhVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbEZpZWxkTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxsb3dhYmxlVmFsdWVzKCk6IENvbnRyYWN0LlBhcmFtZXRlckRvbWFpblJlc3RyaWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dhYmxlVmFsdWVzO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVZhbHVlQXN5bmMobmV3VmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlKTogUHJvbWlzZTxEYXRhVmFsdWU+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKG5ld1ZhbHVlLCAnbmV3VmFsdWUnKTtcblxuICAgIGNvbnN0IGNvZXJjZWRWYWx1ZSA9IFBhcmFtLnNlcmlhbGl6ZVBhcmFtZXRlclZhbHVlKG5ld1ZhbHVlKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxQYXJhbWV0ZXJzU2VydmljZT4oU2VydmljZU5hbWVzLlBhcmFtZXRlcnMpO1xuICAgIHJldHVybiBwYXJhbWV0ZXJzU2VydmljZS5jaGFuZ2VQYXJhbWV0ZXJWYWx1ZUFzeW5jKHRoaXMuX2dsb2JhbEZpZWxkTmFtZSwgY29lcmNlZFZhbHVlKS50aGVuKChwYXJhbWV0ZXJJbmZvKSA9PiB7XG4gICAgICB0aGlzLnNldFBhcmFtZXRlckluZm8ocGFyYW1ldGVySW5mbyk7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhcmFtZXRlckluZm8ocGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbyk6IHZvaWQge1xuICAgIHRoaXMuX3BhcmFtZXRlckluZm8gPSBwYXJhbWV0ZXJJbmZvO1xuICAgIHRoaXMuX2dsb2JhbEZpZWxkTmFtZSA9IHBhcmFtZXRlckluZm8uZmllbGROYW1lO1xuXG4gICAgY29uc3QgdHlwZSA9IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5hbGxvd2FibGVWYWx1ZXMuY29udmVydChwYXJhbWV0ZXJJbmZvLmFsbG93YWJsZVZhbHVlc1R5cGUpO1xuICAgIGxldCBsaXN0VmFsdWVzOiBBcnJheTxEYXRhVmFsdWU+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBtaW5WYWx1ZTogRGF0YVZhbHVlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBtYXhWYWx1ZTogRGF0YVZhbHVlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdGVwU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkYXRlU3RlcFBlcmlvZDogUGVyaW9kVHlwZSB8IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlID09PSBQYXJhbWV0ZXJWYWx1ZVR5cGUuTGlzdCkge1xuICAgICAgY29uc3QgdmFsdWVzID0gcGFyYW1ldGVySW5mby5hbGxvd2FibGVWYWx1ZXMgfHwgW107XG4gICAgICBsaXN0VmFsdWVzID0gdmFsdWVzLm1hcCgodmFsKSA9PiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VQYXJhbWV0ZXJEYXRhVmFsdWUodmFsLCBwYXJhbWV0ZXJJbmZvLmRhdGFUeXBlKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBQYXJhbWV0ZXJWYWx1ZVR5cGUuUmFuZ2UpIHtcbiAgICAgIG1pblZhbHVlID0gcGFyYW1ldGVySW5mby5taW5WYWx1ZSAmJiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VQYXJhbWV0ZXJEYXRhVmFsdWUocGFyYW1ldGVySW5mby5taW5WYWx1ZSwgcGFyYW1ldGVySW5mby5kYXRhVHlwZSk7XG4gICAgICBtYXhWYWx1ZSA9IHBhcmFtZXRlckluZm8ubWF4VmFsdWUgJiYgRGF0YVZhbHVlRmFjdG9yeS5NYWtlUGFyYW1ldGVyRGF0YVZhbHVlKHBhcmFtZXRlckluZm8ubWF4VmFsdWUsIHBhcmFtZXRlckluZm8uZGF0YVR5cGUpO1xuICAgICAgc3RlcFNpemUgPSBwYXJhbWV0ZXJJbmZvLnN0ZXBTaXplO1xuICAgICAgZGF0ZVN0ZXBQZXJpb2QgPSBwYXJhbWV0ZXJJbmZvLmRhdGVTdGVwUGVyaW9kICYmIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5kYXRlU3RlcFBlcmlvZC5jb252ZXJ0KHBhcmFtZXRlckluZm8uZGF0ZVN0ZXBQZXJpb2QpO1xuICAgIH1cblxuICAgIHRoaXMuX2FsbG93YWJsZVZhbHVlcyA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBhbGxvd2FibGVWYWx1ZXM6IGxpc3RWYWx1ZXMsXG4gICAgICBtaW5WYWx1ZTogbWluVmFsdWUsXG4gICAgICBtYXhWYWx1ZTogbWF4VmFsdWUsXG4gICAgICBzdGVwU2l6ZTogc3RlcFNpemUsXG4gICAgICBkYXRlU3RlcFBlcmlvZDogZGF0ZVN0ZXBQZXJpb2QsXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNoZWV0UGF0aCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDbGllbnRJbmZvU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0NsaWVudEluZm9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvUGFyYW1ldGVyc1NlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2l6ZVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9TaXplU2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IFBhcmFtIH0gZnJvbSAnLi4vVXRpbHMvUGFyYW0nO1xuaW1wb3J0IHsgU2hlZXRVdGlscyB9IGZyb20gJy4uL1V0aWxzL1NoZWV0VXRpbHMnO1xuaW1wb3J0IHsgUGFyYW1ldGVySW1wbCB9IGZyb20gJy4vUGFyYW1ldGVySW1wbCc7XG5pbXBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9TaGVldEluZm9JbXBsJztcblxuaW50ZXJmYWNlIFBhcnRpYWxTaGVldFNpemUge1xuICAvKipcbiAgICogQ29udGFpbnMgYW4gZW51bWVyYXRpb24gdmFsdWUgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6IEFVVE9NQVRJQywgRVhBQ1RMWSwgUkFOR0UsIEFUTEVBU1QsIGFuZCBBVE1PU1QuXG4gICAqL1xuICByZWFkb25seSBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqICBUaGlzIGlzIG9ubHkgZGVmaW5lZCB3aGVuIGJlaGF2aW9yIGlzIEVYQUNUTFksIFJBTkdFLCBvciBBVExFQVNULlxuICAgKi9cbiAgcmVhZG9ubHkgbWluU2l6ZT86IFBhcnRpYWw8Q29udHJhY3QuU2l6ZT47XG5cbiAgLyoqXG4gICAqICBUaGlzIGlzIG9ubHkgZGVmaW5lZCB3aGVuIGJlaGF2aW9yIGlzIEVYQUNUTFksIFJBTkdFIG9yIEFUTU9TVC5cbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBQYXJ0aWFsPENvbnRyYWN0LlNpemU+O1xufVxuXG5leHBvcnQgY2xhc3MgU2hlZXRJbXBsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfc2hlZXRJbmZvSW1wbDogU2hlZXRJbmZvSW1wbCwgcHJvdGVjdGVkIF9yZWdpc3RyeUlkOiBudW1iZXIpIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hlZXRUeXBlKCk6IENvbnRyYWN0LlNoZWV0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuc2hlZXRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzaGVldFBhdGgoKTogU2hlZXRQYXRoIHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXRJbmZvSW1wbC5zaGVldFBhdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemUoKTogQ29udHJhY3QuU2l6ZSB8IENvbnRyYWN0LlNoZWV0U2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuc2hlZXRTaXplO1xuICB9XG5cbiAgcHVibGljIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX3NoZWV0SW5mb0ltcGwuaXNIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuaXNIaWRkZW47XG4gICAgfVxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgaXNIaWRkZW4gbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fc2hlZXRJbmZvSW1wbC5pc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2hlZXRJbmZvSW1wbC5pc0FjdGl2ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkltcGxlbWVudGF0aW9uRXJyb3IsIGBhY3RpdmUgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fc2hlZXRJbmZvSW1wbC5pc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zaGVldEluZm9JbXBsLmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX3NoZWV0SW5mb0ltcGwuaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuaW5kZXg7XG4gICAgfVxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgaW5kZXggbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9zaGVldEluZm9JbXBsLnVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2hlZXRJbmZvSW1wbC51cmw7XG4gICAgfVxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgdXJsIG5vdCBpbXBsZW1lbnRlZGApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaGVldFNpemUoKTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBpZiAoIVNoZWV0VXRpbHMuaXNWYWxpZFNoZWV0U2l6ZSh0aGlzLnNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ3NpemUgaXMgbm90IG9mIHR5cGUgU2hlZXRTaXplJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kUGFyYW1ldGVyQXN5bmMocGFyYW1ldGVyTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQYXJhbWV0ZXJJbXBsIHwgdW5kZWZpbmVkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCAncGFyYW1ldGVyTmFtZScpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxQYXJhbWV0ZXJzU2VydmljZT4oU2VydmljZU5hbWVzLlBhcmFtZXRlcnMpO1xuICAgIHJldHVybiBzZXJ2aWNlLmZpbmRQYXJhbWV0ZXJCeU5hbWVBc3luYyhwYXJhbWV0ZXJOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxQYXJhbWV0ZXJJbXBsPj4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8UGFyYW1ldGVyc1NlcnZpY2U+KFNlcnZpY2VOYW1lcy5QYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRQYXJhbWV0ZXJzRm9yU2hlZXRBc3luYyh0aGlzLnNoZWV0UGF0aCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2l6ZUFzeW5jKG5ld1NpemU6IENvbnRyYWN0LlNoZWV0U2l6ZSk6IFByb21pc2U8Q29udHJhY3QuU2hlZXRTaXplPiB7XG4gICAgY29uc3QgaW52YWxpZFNpemVFcnJvciA9IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbnZhbGlkU2l6ZSwgJ0ludmFsaWQgc2hlZXQgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICBpZiAoIW5ld1NpemUgfHwgIW5ld1NpemUuYmVoYXZpb3IpIHtcbiAgICAgIHRocm93IGludmFsaWRTaXplRXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGlhbFNoZWV0U2l6ZSA9IHRoaXMubm9ybWFsaXplU2hlZXRTaXplKG5ld1NpemUpO1xuXG4gICAgY29uc3QgaXNBdXRvbWF0aWMgPSBwYXJ0aWFsU2hlZXRTaXplLmJlaGF2aW9yID09PSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWM7XG4gICAgaWYgKCFpc0F1dG9tYXRpYyAmJiAhcGFydGlhbFNoZWV0U2l6ZS5taW5TaXplICYmICFwYXJ0aWFsU2hlZXRTaXplLm1heFNpemUpIHtcbiAgICAgIHRocm93IGludmFsaWRTaXplRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFpc0F1dG9tYXRpYyAmJiB0aGlzLnNoZWV0VHlwZSA9PT0gQ29udHJhY3QuU2hlZXRUeXBlLldvcmtzaGVldCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbnZhbGlkU2l6ZUJlaGF2aW9yT25Xb3Jrc2hlZXQsXG4gICAgICAgICdPbmx5IFNoZWV0U2l6ZUJlaGF2aW9yLkF1dG9tYXRpYyBpcyBhbGxvd2VkIG9uIFdvcmtzaGVldHMnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBdXRvbWF0aWMgJiYgdGhpcy5nZXRTaGVldFNpemUoKS5iZWhhdmlvciA9PT0gcGFydGlhbFNoZWV0U2l6ZS5iZWhhdmlvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXdTaXplKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9jZXNzZWROZXdTaXplID0gdGhpcy5wcm9jZXNzTmV3U2l6ZShwYXJ0aWFsU2hlZXRTaXplKTtcblxuICAgIGNvbnN0IHNpemVTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNpemVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuU2l6ZSk7XG4gICAgcmV0dXJuIHNpemVTZXJ2aWNlLmNoYW5nZVNpemVBc3luYyh0aGlzLm5hbWUsIHByb2Nlc3NlZE5ld1NpemUpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50SW5mb1NlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Q2xpZW50SW5mb1NlcnZpY2U+KFNlcnZpY2VOYW1lcy5DbGllbnRJbmZvKTtcblxuICAgICAgcmV0dXJuIGNsaWVudEluZm9TZXJ2aWNlLmdldENsaWVudEluZm9Bc3luYygpLnRoZW4oKGJvb3RzdHJhcEluZm8pID0+IHtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSBib290c3RyYXBJbmZvLnB1Ymxpc2hlZFNoZWV0cy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHRoaXMubmFtZSk7XG4gICAgICAgIGlmICghc2hlZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYENhbid0IGZpbmQgc2hlZXQgd2l0aCBuYW1lICR7dGhpcy5uYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hlZXRTaXplID0gU2hlZXRVdGlscy5nZXRTaGVldFNpemVGcm9tU2l6ZUNvbnN0cmFpbnRzKHNoZWV0LnNpemVDb25zdHJhaW50KTtcbiAgICAgICAgdGhpcy5fc2hlZXRJbmZvSW1wbC5zaGVldFNpemUgPSBzaGVldFNpemU7XG5cbiAgICAgICAgcmV0dXJuIHNoZWV0U2l6ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVTaGVldFNpemUobmV3U2l6ZTogQ29udHJhY3QuU2hlZXRTaXplKTogUGFydGlhbFNoZWV0U2l6ZSB7XG4gICAgY29uc3QgeyBiZWhhdmlvciB9ID0gbmV3U2l6ZTtcblxuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8Q29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3I+KGJlaGF2aW9yLCBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvciwgJ1NoZWV0U2l6ZUJlaGF2aW9yJyk7XG5cbiAgICBjb25zdCBtaW5TaXplID0gU2hlZXRJbXBsLnBhcnNlRGltZW5zaW9ucyhuZXdTaXplLm1pblNpemUpO1xuICAgIGNvbnN0IG1heFNpemUgPSBTaGVldEltcGwucGFyc2VEaW1lbnNpb25zKG5ld1NpemUubWF4U2l6ZSk7XG5cbiAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTmV3U2l6ZShuZXdTaXplOiBQYXJ0aWFsU2hlZXRTaXplKTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBjb25zdCB7IGJlaGF2aW9yLCBtaW5TaXplOiBtaW5TaXplTWF5YmUsIG1heFNpemU6IG1heFNpemVNYXliZSB9ID0gbmV3U2l6ZTtcblxuICAgIGNvbnN0IGhhc01pbldpZHRoID0gIVBhcmFtLmlzTnVsbE9yVW5kZWZpbmVkKG1pblNpemVNYXliZT8ud2lkdGgpO1xuICAgIGNvbnN0IGhhc01pbkhlaWdodCA9ICFQYXJhbS5pc051bGxPclVuZGVmaW5lZChtaW5TaXplTWF5YmU/LmhlaWdodCk7XG4gICAgY29uc3QgaGFzTWF4V2lkdGggPSAhUGFyYW0uaXNOdWxsT3JVbmRlZmluZWQobWF4U2l6ZU1heWJlPy53aWR0aCk7XG4gICAgY29uc3QgaGFzTWF4SGVpZ2h0ID0gIVBhcmFtLmlzTnVsbE9yVW5kZWZpbmVkKG1heFNpemVNYXliZT8uaGVpZ2h0KTtcbiAgICBjb25zdCBoYXNWYWxpZE1pblNpemUgPSBoYXNNaW5XaWR0aCAmJiBoYXNNaW5IZWlnaHQ7XG4gICAgY29uc3QgaGFzVmFsaWRNYXhTaXplID0gaGFzTWF4V2lkdGggJiYgaGFzTWF4SGVpZ2h0O1xuXG4gICAgc3dpdGNoIChiZWhhdmlvcikge1xuICAgICAgY2FzZSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWM6IHtcbiAgICAgICAgcmV0dXJuIHsgYmVoYXZpb3IgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdE1vc3Q6IHtcbiAgICAgICAgaWYgKCFtYXhTaXplTWF5YmUgfHwgIWhhc1ZhbGlkTWF4U2l6ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5NaXNzaW5nTWF4U2l6ZSwgJ01pc3NpbmcgbWF4U2l6ZSBmb3IgU2hlZXRTaXplQmVoYXZpb3IuQXRNb3N0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhTaXplID0geyB3aWR0aDogbWF4U2l6ZU1heWJlLndpZHRoISwgaGVpZ2h0OiBtYXhTaXplTWF5YmUuaGVpZ2h0ISB9O1xuICAgICAgICBpZiAobWF4U2l6ZS53aWR0aCA8IDAgfHwgbWF4U2l6ZS5oZWlnaHQgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWRTaXplLCAnU2l6ZSB2YWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGJlaGF2aW9yLCBtYXhTaXplIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuQXRMZWFzdDoge1xuICAgICAgICBpZiAoIW1pblNpemVNYXliZSB8fCAhaGFzVmFsaWRNaW5TaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLk1pc3NpbmdNaW5TaXplLCAnTWlzc2luZyBtaW5TaXplIGZvciBTaGVldFNpemVCZWhhdmlvci5BdExlYXN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5TaXplID0geyB3aWR0aDogbWluU2l6ZU1heWJlLndpZHRoISwgaGVpZ2h0OiBtaW5TaXplTWF5YmUuaGVpZ2h0ISB9O1xuICAgICAgICBpZiAobWluU2l6ZS53aWR0aCA8IDAgfHwgbWluU2l6ZS5oZWlnaHQgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWRTaXplLCAnU2l6ZSB2YWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGJlaGF2aW9yLCBtaW5TaXplIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuUmFuZ2U6IHtcbiAgICAgICAgaWYgKCFtaW5TaXplTWF5YmUgfHwgIW1heFNpemVNYXliZSB8fCAhaGFzVmFsaWRNaW5TaXplIHx8ICFoYXNWYWxpZE1heFNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuTWlzc2luZ01pbk1heFNpemUsICdNaXNzaW5nIG1pblNpemUgb3IgbWF4U2l6ZSBmb3IgU2hlZXRTaXplQmVoYXZpb3IuUmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblNpemUgPSB7IHdpZHRoOiBtaW5TaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1pblNpemVNYXliZS5oZWlnaHQhIH07XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSB7IHdpZHRoOiBtYXhTaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1heFNpemVNYXliZS5oZWlnaHQhIH07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1pblNpemUud2lkdGggPCAwIHx8XG4gICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPCAwIHx8XG4gICAgICAgICAgbWF4U2l6ZS53aWR0aCA8IDAgfHxcbiAgICAgICAgICBtYXhTaXplLmhlaWdodCA8IDAgfHxcbiAgICAgICAgICBtaW5TaXplLndpZHRoID4gbWF4U2l6ZS53aWR0aCB8fFxuICAgICAgICAgIG1pblNpemUuaGVpZ2h0ID4gbWF4U2l6ZS5oZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWRTaXplLCAnTWlzc2luZyBtaW5TaXplIG9yIG1heFNpemUgZm9yIFNoZWV0U2l6ZUJlaGF2aW9yLlJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZSB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlIENvbnRyYWN0LlNoZWV0U2l6ZUJlaGF2aW9yLkV4YWN0bHk6IHtcbiAgICAgICAgaWYgKG1pblNpemVNYXliZSAmJiBtYXhTaXplTWF5YmUpIHtcbiAgICAgICAgICBpZiAoaGFzVmFsaWRNaW5TaXplICYmIGhhc1ZhbGlkTWF4U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgbWluU2l6ZSA9IHsgd2lkdGg6IG1pblNpemVNYXliZS53aWR0aCEsIGhlaWdodDogbWluU2l6ZU1heWJlLmhlaWdodCEgfTtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB7IHdpZHRoOiBtYXhTaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1heFNpemVNYXliZS5oZWlnaHQhIH07XG5cbiAgICAgICAgICAgIGlmIChtaW5TaXplLndpZHRoICE9PSBtYXhTaXplLndpZHRoIHx8IG1pblNpemUuaGVpZ2h0ICE9PSBtYXhTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuSW52YWxpZFNpemUsICdDb25mbGljdGluZyBzaXplIHZhbHVlcyBmb3IgU2hlZXRTaXplQmVoYXZpb3IuRXhhY3RseScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNWYWxpZE1pblNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pblNpemUgPSB7IHdpZHRoOiBtaW5TaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1pblNpemVNYXliZS5oZWlnaHQhIH07XG4gICAgICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZTogbWluU2l6ZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNWYWxpZE1heFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB7IHdpZHRoOiBtYXhTaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1heFNpemVNYXliZS5oZWlnaHQhIH07XG4gICAgICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZTogbWF4U2l6ZSwgbWF4U2l6ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbnZhbGlkU2l6ZSwgJ0ludmFsaWQgc2hlZXQgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYFVuc3VwcG9ydGVkIHNoZWV0IHNpemUgYmVoYXZpb3I6ICR7YmVoYXZpb3J9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VEaW1lbnNpb25zID0gKHNpemU6IENvbnRyYWN0LlNpemUgfCB1bmRlZmluZWQpOiBQYXJ0aWFsPENvbnRyYWN0LlNpemU+ID0+IHtcbiAgICBjb25zdCBlbXB0eSA9IHsgd2lkdGg6IHVuZGVmaW5lZCwgaGVpZ2h0OiB1bmRlZmluZWQgfTtcblxuICAgIGlmICghc2l6ZSkge1xuICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3VjY2Vzczogd2lkdGhQYXJzZWQsIHBhcnNlZDogcGFyc2VkV2lkdGggfSA9IFBhcmFtLnRyeVBhcnNlTnVtYmVyKHNpemUud2lkdGgpO1xuICAgIGNvbnN0IHsgc3VjY2VzczogaGVpZ2h0UGFyc2VkLCBwYXJzZWQ6IHBhcnNlZEhlaWdodCB9ID0gUGFyYW0udHJ5UGFyc2VOdW1iZXIoc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYgKHdpZHRoUGFyc2VkICYmIGhlaWdodFBhcnNlZCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IHBhcnNlZFdpZHRoISwgaGVpZ2h0OiBwYXJzZWRIZWlnaHQhIH07XG4gICAgfVxuXG4gICAgaWYgKHdpZHRoUGFyc2VkKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogcGFyc2VkV2lkdGghIH07XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodFBhcnNlZCkge1xuICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBwYXJzZWRIZWlnaHQhIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgU2hlZXRTaXplIGFzIEVtYmVkZGluZ1NoZWV0U2l6ZSwgU2l6ZSBhcyBFeHRlbnNpb25TaGVldFNpemUsIFNoZWV0VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTaGVldFBhdGggfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY2xhc3MgU2hlZXRJbmZvSW1wbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfc2hlZXRUeXBlOiBTaGVldFR5cGUsXG4gICAgcHJpdmF0ZSBfc2hlZXRTaXplOiBFeHRlbnNpb25TaGVldFNpemUgfCBFbWJlZGRpbmdTaGVldFNpemUsXG4gICAgcHJpdmF0ZSBfaW5kZXg/OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfaXNBY3RpdmU/OiBib29sZWFuLFxuICAgIHByaXZhdGUgX2lzSGlkZGVuPzogYm9vbGVhbixcbiAgICBwcml2YXRlIF91cmw/OiBzdHJpbmcsXG4gICkge31cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbmFtZShzaGVldE5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSBzaGVldE5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNoZWV0U2l6ZSgpOiBFeHRlbnNpb25TaGVldFNpemUgfCBFbWJlZGRpbmdTaGVldFNpemUge1xuICAgIHJldHVybiB0aGlzLl9zaGVldFNpemU7XG4gIH1cblxuICBwdWJsaWMgc2V0IHNoZWV0U2l6ZSh2YWx1ZTogRXh0ZW5zaW9uU2hlZXRTaXplIHwgRW1iZWRkaW5nU2hlZXRTaXplKSB7XG4gICAgdGhpcy5fc2hlZXRTaXplID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNoZWV0VHlwZSgpOiBTaGVldFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGVldFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNoZWV0UGF0aCgpOiBTaGVldFBhdGgge1xuICAgIHJldHVybiB7XG4gICAgICBzaGVldE5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGlzRGFzaGJvYXJkOiB0aGlzLnNoZWV0VHlwZSA9PT0gU2hlZXRUeXBlLkRhc2hib2FyZCxcbiAgICAgIC8vIFRPRE8gLSBTdG9yaWVzXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW5kZXg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQWN0aXZlID0gYWN0aXZlO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faXNIaWRkZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXZlbnRUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNpbmdsZUV2ZW50TWFuYWdlciB9IGZyb20gJy4uL1NpbmdsZUV2ZW50TWFuYWdlcic7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBTaW5nbGVFdmVudE1hbmFnZXIgaW50ZXJmYWNlIGZvciBhIHNpbmdsZSB0eXBlIG9mIFRhYmxlYXUgZXZlbnRcbiAqXG4gKiBAdGVtcGxhdGUgVEV2ZW50VHlwZSBUaGUgVGFibGVhdSBldmVudCB0eXBlIHRoaXMgY2xhc3Mgc3BlY2lhbGl6ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbmdsZUV2ZW50TWFuYWdlckltcGw8VEV2ZW50VHlwZSBleHRlbmRzIENvbnRyYWN0LlRhYmxlYXVFdmVudD4gaW1wbGVtZW50cyBTaW5nbGVFdmVudE1hbmFnZXIge1xuICBwcml2YXRlIF9ldmVudFR5cGU6IFRhYmxlYXVFdmVudFR5cGU7XG4gIHByaXZhdGUgX2hhbmRsZXJzOiBBcnJheTwoZXZlbnRPYmo6IFRFdmVudFR5cGUpID0+IHZvaWQ+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihldmVudFR5cGU6IFRhYmxlYXVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9ldmVudFR5cGUgPSBldmVudFR5cGU7XG4gICAgdGhpcy5faGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXZlbnRUeXBlKCk6IFRhYmxlYXVFdmVudFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFR5cGU7XG4gIH1cblxuICBwdWJsaWMgYWRkRXZlbnRMaXN0ZW5lcihoYW5kbGVyOiAoZXZlbnRPYmo6IFRFdmVudFR5cGUpID0+IHZvaWQpOiBDb250cmFjdC5UYWJsZWF1RXZlbnRVbnJlZ2lzdGVyRm4ge1xuICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihoYW5kbGVyKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVFdmVudExpc3RlbmVyKGhhbmRsZXI6IChldmVudE9iajogVEV2ZW50VHlwZSkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJlZm9yZUNvdW50ID0gdGhpcy5faGFuZGxlcnMubGVuZ3RoO1xuICAgIHRoaXMuX2hhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuZmlsdGVyKChoKSA9PiBoICE9PSBoYW5kbGVyKTtcbiAgICByZXR1cm4gYmVmb3JlQ291bnQgPiB0aGlzLl9oYW5kbGVycy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckV2ZW50KGV2ZW50R2VuZXJhdG9yOiAoKSA9PiBURXZlbnRUeXBlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuX2hhbmRsZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBldmVudE1vZGVsID0gZXZlbnRHZW5lcmF0b3IoKTtcbiAgICAgICAgaGFuZGxlcihldmVudE1vZGVsKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gU2luY2UgdGhpcyBoYW5kbGVyIGNvdWxkIGJlIG91dHNpZGUgb3VyIGNvbnRyb2wsIGp1c3QgY2F0Y2ggYW55dGhpbmcgaXQgdGhyb3dzIGFuZCBjb250aW51ZSBvblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTaGVldEluZm8sIFN0b3J5TW9kZWwsIFN0b3J5UG9pbnRNb2RlbCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTdG9yeUFjdGl2YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvU3RvcnlBY3RpdmF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IFNob3J0TGl2ZWREZWZlcnJlZCB9IGZyb20gJy4uL1V0aWxzL1Nob3J0TGl2ZWREZWZlcnJlZCc7XG5pbXBvcnQgeyBTaGVldEltcGwgfSBmcm9tICcuL1NoZWV0SW1wbCc7XG5pbXBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9TaGVldEluZm9JbXBsJztcbmltcG9ydCB7IFN0b3J5UG9pbnRJbXBsIH0gZnJvbSAnLi9TdG9yeVBvaW50SW1wbCc7XG5pbXBvcnQgeyBTdG9yeVBvaW50SW5mb0ltcGwgfSBmcm9tICcuL1N0b3J5UG9pbnRJbmZvSW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBTdG9yeUltcGwgZXh0ZW5kcyBTaGVldEltcGwge1xuICBwcml2YXRlIF9hY3RpdmVTdG9yeVBvaW50SW1wbDogU3RvcnlQb2ludEltcGw7XG4gIHByaXZhdGUgX3N0b3J5UG9pbnRJbmZvSW1wbHM6IEFycmF5PFN0b3J5UG9pbnRJbmZvSW1wbD4gPSBbXTtcbiAgcHJpdmF0ZSBfZGVmZXJyZWQ6IFNob3J0TGl2ZWREZWZlcnJlZDxTdG9yeVBvaW50SW1wbD47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBfc2hlZXRJbmZvSW1wbDogU2hlZXRJbmZvSW1wbCxcbiAgICBzdG9yeU1vZGVsOiBTdG9yeU1vZGVsLFxuICAgIHByaXZhdGUgX3B1Ymxpc2hlZFNoZWV0SW5mb3M6IEFycmF5PFNoZWV0SW5mbz4sXG4gICAgcHJvdGVjdGVkIF9yZWdpc3RyeUlkOiBudW1iZXIsXG4gICkge1xuICAgIHN1cGVyKF9zaGVldEluZm9JbXBsLCBfcmVnaXN0cnlJZCk7XG4gICAgdGhpcy5fZGVmZXJyZWQgPSBuZXcgU2hvcnRMaXZlZERlZmVycmVkPFN0b3J5UG9pbnRJbXBsPigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0b3J5KHN0b3J5TW9kZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3Rvcnkoc3RvcnlNb2RlbDogU3RvcnlNb2RlbCkge1xuICAgIHN0b3J5TW9kZWwuc3RvcnlQb2ludHMuZm9yRWFjaCgoc3RvcnlQb2ludE1vZGVsKSA9PiB7XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IHN0b3J5UG9pbnRNb2RlbC5pbmRleCA9PT0gc3RvcnlNb2RlbC5hY3RpdmVTdG9yeVBvaW50SW5kZXg7XG4gICAgICBjb25zdCBzdG9yeVBvaW50SW5mb0ltcGwgPSBuZXcgU3RvcnlQb2ludEluZm9JbXBsKFxuICAgICAgICBzdG9yeVBvaW50TW9kZWwuY2FwdGlvbixcbiAgICAgICAgc3RvcnlQb2ludE1vZGVsLmluZGV4LFxuICAgICAgICBzdG9yeVBvaW50TW9kZWwuc3RvcnlQb2ludElkLFxuICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgc3RvcnlQb2ludE1vZGVsLnVwZGF0ZWQsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscy5wdXNoKHN0b3J5UG9pbnRJbmZvSW1wbCk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVTdG9yeVBvaW50SW1wbCA9IG5ldyBTdG9yeVBvaW50SW1wbChcbiAgICAgICAgICBzdG9yeVBvaW50SW5mb0ltcGwsXG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVkU2hlZXRJbmZvcyxcbiAgICAgICAgICB0aGlzLl9yZWdpc3RyeUlkLFxuICAgICAgICAgIHN0b3J5UG9pbnRNb2RlbC5jb250YWluZWRTaGVldEluZm8sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0b3J5SW5mbyhpbmRleDogbnVtYmVyLCBzdG9yeVBvaW50TW9kZWw6IFN0b3J5UG9pbnRNb2RlbCkge1xuICAgIGlmICghdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBzdG9yeUluZm9JbXBsID0gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsc1tpbmRleF07XG4gICAgaWYgKHN0b3J5SW5mb0ltcGwuc3RvcnlQb2ludElkICE9PSBzdG9yeVBvaW50TW9kZWwuc3RvcnlQb2ludElkKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgICBDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLlN0b3J5UG9pbnRJZE1pc21hdGNoLFxuICAgICAgICBgV2Ugc2hvdWxkIG5vdCBiZSB1cGRhdGluZyBhIHN0b3J5IHBvaW50IHdoZW4gdGhlIElEcyBkb24ndCBtYXRjaC4gRXhpc3Rpbmcgc3RvcnlQb2ludElEPSR7c3RvcnlJbmZvSW1wbC5zdG9yeVBvaW50SWR9LCBuZXdTdG9yeVBvaW50SUQ9JHtzdG9yeVBvaW50TW9kZWwuc3RvcnlQb2ludElkfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBzdG9yeUluZm9JbXBsLmNhcHRpb24gPSBzdG9yeVBvaW50TW9kZWwuY2FwdGlvbjtcbiAgICBzdG9yeUluZm9JbXBsLnVwZGF0ZWQgPSBzdG9yeVBvaW50TW9kZWwudXBkYXRlZDtcblxuICAgIGlmICh0aGlzLl9hY3RpdmVTdG9yeVBvaW50SW1wbC5zdG9yeVBvaW50SWQgPT09IHN0b3J5UG9pbnRNb2RlbC5zdG9yeVBvaW50SWQpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsLnVwZGF0ZWQgPSBzdG9yeUluZm9JbXBsLnVwZGF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0b3J5KHN0b3J5UG9pbnRNb2RlbDogU3RvcnlQb2ludE1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscy5mb3JFYWNoKChzdG9yeVBvaW50SW5mb0ltcGwpID0+IHtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gc3RvcnlQb2ludEluZm9JbXBsLnN0b3J5UG9pbnRJZCA9PT0gc3RvcnlQb2ludE1vZGVsLnN0b3J5UG9pbnRJZDtcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0YXRlXG4gICAgICAgIHN0b3J5UG9pbnRJbmZvSW1wbC5jYXB0aW9uID0gc3RvcnlQb2ludE1vZGVsLmNhcHRpb247XG4gICAgICAgIHN0b3J5UG9pbnRJbmZvSW1wbC5pbmRleCA9IHN0b3J5UG9pbnRNb2RlbC5pbmRleDtcbiAgICAgICAgc3RvcnlQb2ludEluZm9JbXBsLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHN0b3J5UG9pbnRJbmZvSW1wbC51cGRhdGVkID0gc3RvcnlQb2ludE1vZGVsLnVwZGF0ZWQ7XG5cbiAgICAgICAgLy8gcmUtaW5pdGlhbGl6ZSBhY3RpdmVTdG9yeVBvaW50SW1wbFxuICAgICAgICB0aGlzLl9hY3RpdmVTdG9yeVBvaW50SW1wbCA9IG5ldyBTdG9yeVBvaW50SW1wbChcbiAgICAgICAgICBzdG9yeVBvaW50SW5mb0ltcGwsXG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVkU2hlZXRJbmZvcyxcbiAgICAgICAgICB0aGlzLl9yZWdpc3RyeUlkLFxuICAgICAgICAgIHN0b3J5UG9pbnRNb2RlbC5jb250YWluZWRTaGVldEluZm8sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzZXQgb2xkIG9uZXMgdG8gZmFsc2VcbiAgICAgICAgc3RvcnlQb2ludEluZm9JbXBsLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYWN0aXZlU3RvcnlQb2ludCkge1xuICAgICAgdGhpcy5fZGVmZXJyZWQucmVzb2x2ZSh0aGlzLmFjdGl2ZVN0b3J5UG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlU3RvcnlQb2ludCgpOiBTdG9yeVBvaW50SW1wbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCBzdG9yeVBvaW50c0luZm8oKTogQXJyYXk8U3RvcnlQb2ludEluZm9JbXBsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaGVldEluZm9JbXBsLmFjdGl2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fc2hlZXRJbmZvSW1wbC5pc0hpZGRlbjtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZU5leHRTdG9yeVBvaW50QXN5bmMoKTogUHJvbWlzZTxTdG9yeVBvaW50SW1wbD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmVTdG9yeVBvaW50SW1wbC5pbmRleCA9PT0gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLmdldE5ld1Byb21pc2VPclRocm93SWZCdXN5KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFN0b3J5QWN0aXZhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TdG9yeUFjdGl2YXRpb24pO1xuICAgIHNlcnZpY2UuYWN0aXZhdGVOZXh0U3RvcnlQb2ludEFzeW5jKCk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGVQcmV2aW91c1N0b3J5UG9pbnRBc3luYygpOiBQcm9taXNlPFN0b3J5UG9pbnRJbXBsPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsLmluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLmdldE5ld1Byb21pc2VPclRocm93SWZCdXN5KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFN0b3J5QWN0aXZhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TdG9yeUFjdGl2YXRpb24pO1xuICAgIHNlcnZpY2UuYWN0aXZhdGVQcmV2aW91c1N0b3J5UG9pbnRBc3luYygpO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlU3RvcnlQb2ludEFzeW5jKGluZGV4OiBudW1iZXIpOiBQcm9taXNlPFN0b3J5UG9pbnRJbXBsPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihpbmRleCwgJ2luZGV4Jyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlclR5cGUoaW5kZXgsICdudW1iZXInLCAnaW5kZXgnKTtcblxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbmRleE91dE9mUmFuZ2UsICdUaGUgaW5kZXggcGFzc2VkIHRvIHRoaXMgY29tbWFuZCBpcyBvdXQgb2YgcmFuZ2UuJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSB0aGlzLl9hY3RpdmVTdG9yeVBvaW50SW1wbC5pbmRleCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9hY3RpdmVTdG9yeVBvaW50SW1wbCk7XG4gICAgfVxuXG4gICAgbGV0IHByb21pc2UgPSB0aGlzLl9kZWZlcnJlZC5nZXROZXdQcm9taXNlT3JUaHJvd0lmQnVzeSgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxTdG9yeUFjdGl2YXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuU3RvcnlBY3RpdmF0aW9uKTtcbiAgICBzZXJ2aWNlLmFjdGl2YXRlU3RvcnlQb2ludEFzeW5jKGluZGV4KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHB1YmxpYyByZXZlcnRTdG9yeVBvaW50QXN5bmMoaW5kZXg6IG51bWJlcik6IFByb21pc2U8U3RvcnlQb2ludEluZm9JbXBsPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihpbmRleCwgJ2luZGV4Jyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlclR5cGUoaW5kZXgsICdudW1iZXInLCAnaW5kZXgnKTtcblxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbmRleE91dE9mUmFuZ2UsICdUaGUgaW5kZXggcGFzc2VkIHRvIHRoaXMgY29tbWFuZCBpcyBvdXQgb2YgcmFuZ2UuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxTdG9yeUFjdGl2YXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuU3RvcnlBY3RpdmF0aW9uKTtcblxuICAgIHJldHVybiBzZXJ2aWNlLnJldmVydFN0b3J5UG9pbnRBc3luYyhpbmRleCkudGhlbjxTdG9yeVBvaW50SW5mb0ltcGw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdG9yeUluZm8ocmVzcG9uc2UuaW5kZXgsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHN0b3J5UG9pbnRJbmZvSW1wbCA9IG5ldyBTdG9yeVBvaW50SW5mb0ltcGwoXG4gICAgICAgIHJlc3BvbnNlLmNhcHRpb24sXG4gICAgICAgIHJlc3BvbnNlLmluZGV4LFxuICAgICAgICByZXNwb25zZS5zdG9yeVBvaW50SWQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICByZXNwb25zZS51cGRhdGVkLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBzdG9yeVBvaW50SW5mb0ltcGw7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJQZW5kaW5nUHJvbWlzZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RlZmVycmVkKSB7XG4gICAgICB0aGlzLl9kZWZlcnJlZC5yZWplY3QoJ0FsbCBwZW5kaW5nIHByb21pc2VzIGNsZWFyZWQnKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDb250YWluZWRTaGVldEluZm9Nb2RlbCwgU2hlZXRJbmZvLCBTaGVldFBhdGgsIFZpc3VhbElkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBTaGVldFV0aWxzIH0gZnJvbSAnLi4vVXRpbHMvU2hlZXRVdGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRJbXBsIH0gZnJvbSAnLi9EYXNoYm9hcmRJbXBsJztcbmltcG9ydCB7IFNoZWV0SW1wbCB9IGZyb20gJy4vU2hlZXRJbXBsJztcbmltcG9ydCB7IFNoZWV0SW5mb0ltcGwgfSBmcm9tICcuL1NoZWV0SW5mb0ltcGwnO1xuaW1wb3J0IHsgU3RvcnlJbXBsIH0gZnJvbSAnLi9TdG9yeUltcGwnO1xuaW1wb3J0IHsgU3RvcnlQb2ludEluZm9JbXBsIH0gZnJvbSAnLi9TdG9yeVBvaW50SW5mb0ltcGwnO1xuaW1wb3J0IHsgV29ya3NoZWV0SW1wbCB9IGZyb20gJy4vV29ya3NoZWV0SW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBTdG9yeVBvaW50SW1wbCB7XG4gIHByaXZhdGUgX2NvbnRhaW5lZFNoZWV0SW1wbDogU2hlZXRJbXBsO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdG9yeVBvaW50SW5mb0ltcGw6IFN0b3J5UG9pbnRJbmZvSW1wbCxcbiAgICBzaGVldEluZm9zOiBBcnJheTxTaGVldEluZm8+LFxuICAgIHJlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBjb250YWluZWRTaGVldEluZm8/OiBDb250YWluZWRTaGVldEluZm9Nb2RlbCxcbiAgKSB7XG4gICAgaWYgKGNvbnRhaW5lZFNoZWV0SW5mbykge1xuICAgICAgdGhpcy5fY29udGFpbmVkU2hlZXRJbXBsID0gdGhpcy5jcmVhdGVDb250YWluZWRTaGVldChjb250YWluZWRTaGVldEluZm8sIHNoZWV0SW5mb3MsIHJlZ2lzdHJ5SWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsLmluZGV4O1xuICB9XG5cbiAgcHVibGljIGdldCBjYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbC5jYXB0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbC5hY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVwZGF0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbC51cGRhdGVkO1xuICB9XG5cbiAgcHVibGljIHNldCB1cGRhdGVkKHVwZGF0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGwudXBkYXRlZCA9IHVwZGF0ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhcmVudFN0b3J5KCk6IFN0b3J5SW1wbCB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbC5wYXJlbnRTdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udGFpbmVkU2hlZXQoKTogU2hlZXRJbXBsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVkU2hlZXRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCBzdG9yeVBvaW50SWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsLnN0b3J5UG9pbnRJZDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29udGFpbmVkU2hlZXQoY29udGFpbmVkU2hlZXRJbmZvOiBDb250YWluZWRTaGVldEluZm9Nb2RlbCwgc2hlZXRJbmZvczogQXJyYXk8U2hlZXRJbmZvPiwgcmVnaXN0cnlJZDogbnVtYmVyKTogU2hlZXRJbXBsIHtcbiAgICBjb25zdCBjb250YWluZWRTaGVldElkeCA9IC0xO1xuXG4gICAgY29uc3QgcHVibGlzaGVkU2hlZXRJbmZvID0gU2hlZXRVdGlscy5nZXRQdWJsaXNoZWRTaGVldEluZm9CeU5hbWUoY29udGFpbmVkU2hlZXRJbmZvLm5hbWUsIHNoZWV0SW5mb3MpO1xuICAgIGNvbnN0IGNvbnRhaW5lZFNoZWV0U2l6ZSA9IFNoZWV0VXRpbHMuY3JlYXRlQXV0b21hdGljU2l6ZSgpO1xuICAgIGNvbnN0IGlzQ29udGFpbmVkU2hlZXRIaWRkZW4gPSBwdWJsaXNoZWRTaGVldEluZm8gPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb250YWluZWRTaGVldFVybCA9IHB1Ymxpc2hlZFNoZWV0SW5mbyA/IHB1Ymxpc2hlZFNoZWV0SW5mby51cmwgOiAnJztcbiAgICAvLyBDb250YWluZWQgc2hlZXRzIGFyZW4ndCBhY3RpdmUgLSB0aGUgY29udGFpbmluZyBzaGVldCBpcyBhY3RpdmUuXG4gICAgY29uc3QgY29udGFpbmVkU2hlZXRBY3RpdmUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRhaW5lZFNoZWV0SW5mb0ltcGwgPSBuZXcgU2hlZXRJbmZvSW1wbChcbiAgICAgIGNvbnRhaW5lZFNoZWV0SW5mby5uYW1lLFxuICAgICAgU2hlZXRVdGlscy5nZXRTaGVldFR5cGVFbnVtKGNvbnRhaW5lZFNoZWV0SW5mby5zaGVldFR5cGUpLFxuICAgICAgY29udGFpbmVkU2hlZXRTaXplLFxuICAgICAgY29udGFpbmVkU2hlZXRJZHgsXG4gICAgICBjb250YWluZWRTaGVldEFjdGl2ZSxcbiAgICAgIGlzQ29udGFpbmVkU2hlZXRIaWRkZW4sXG4gICAgICBjb250YWluZWRTaGVldFVybCxcbiAgICApO1xuXG4gICAgbGV0IHNoZWV0SW1wbDogU2hlZXRJbXBsO1xuICAgIHN3aXRjaCAoY29udGFpbmVkU2hlZXRJbmZvSW1wbC5zaGVldFR5cGUpIHtcbiAgICAgIGNhc2UgQ29udHJhY3QuU2hlZXRUeXBlLldvcmtzaGVldDoge1xuICAgICAgICBjb25zdCB2aXpJZDogVmlzdWFsSWQgPSB7XG4gICAgICAgICAgd29ya3NoZWV0OiBjb250YWluZWRTaGVldEluZm9JbXBsLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2hlZXRJbXBsID0gbmV3IFdvcmtzaGVldEltcGwoY29udGFpbmVkU2hlZXRJbmZvSW1wbCwgcmVnaXN0cnlJZCwgdml6SWQsIG51bGwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgQ29udHJhY3QuU2hlZXRUeXBlLkRhc2hib2FyZDoge1xuICAgICAgICBjb25zdCBzaGVldFBhdGg6IFNoZWV0UGF0aCA9IHtcbiAgICAgICAgICBzaGVldE5hbWU6IGNvbnRhaW5lZFNoZWV0SW5mb0ltcGwubmFtZSxcbiAgICAgICAgICBpc0Rhc2hib2FyZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzaGVldEltcGwgPSBuZXcgRGFzaGJvYXJkSW1wbChjb250YWluZWRTaGVldEluZm9JbXBsLCBjb250YWluZWRTaGVldEluZm8uZGFzaGJvYXJkWm9uZXMsIHNoZWV0UGF0aCwgcmVnaXN0cnlJZCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuU2VydmVyRXJyb3IsICdJbnZhbGlkIFNoZWV0VHlwZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaGVldEltcGw7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN0b3J5SW1wbCB9IGZyb20gJy4vU3RvcnlJbXBsJztcblxuZXhwb3J0IGNsYXNzIFN0b3J5UG9pbnRJbmZvSW1wbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jYXB0aW9uOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfaW5kZXg6IG51bWJlcixcbiAgICBwcml2YXRlIF9zdG9yeVBvaW50SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF9hY3RpdmU6IGJvb2xlYW4sXG4gICAgcHJpdmF0ZSBfdXBkYXRlZDogYm9vbGVhbixcbiAgICBwcml2YXRlIF9wYXJlbnRTdG9yeUltcGw6IFN0b3J5SW1wbCxcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgY2FwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY2FwdGlvbihjYXB0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jYXB0aW9uID0gY2FwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZGV4O1xuICB9XG5cbiAgcHVibGljIHNldCBpbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RvcnlQb2ludElkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdG9yeVBvaW50SWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgcHVibGljIHNldCBhY3RpdmUoaXNBY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hY3RpdmUgPSBpc0FjdGl2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdXBkYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdXBkYXRlZChpc1VwZGF0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl91cGRhdGVkID0gaXNVcGRhdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRTdG9yeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50U3RvcnlJbXBsO1xuICB9XG59XG4iLCJleHBvcnQgY2xhc3MgV29ya2Jvb2tJbXBsIHt9XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpTWVudVR5cGUsXG4gIENvbnRleHRNZW51T3B0aW9ucyxcbiAgRGF0ZVJhbmdlVHlwZSxcbiAgRXJyb3JDb2RlcyxcbiAgRmlsdGVyTnVsbE9wdGlvbixcbiAgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gIFBlcmlvZFR5cGUsXG4gIFNlbGVjdGlvblVwZGF0ZVR5cGUsXG4gIFNoYXJlZEVycm9yQ29kZXMsXG4gIFRvb2x0aXBDb250ZXh0LFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVNjaGVtYSwgRGF0YVNvdXJjZSBhcyBEYXRhU291cmNlSW5mbywgVmlzdWFsSWQsIFdvcmtzaGVldERhdGFTb3VyY2VJbmZvIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi9EYXRhU291cmNlJztcbmltcG9ydCB7IExvZ2ljYWxUYWJsZSB9IGZyb20gJy4uL0xvZ2ljYWxUYWJsZSc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0Fubm90YXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRGF0YVNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IHsgRXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9FeHRlcm5hbENvbnRleHRNZW51U2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRmlsdGVyU2VydmljZSc7XG5pbXBvcnQgeyBHZXREYXRhU2VydmljZSwgR2V0RGF0YVR5cGUgfSBmcm9tICcuLi9TZXJ2aWNlcy9HZXREYXRhU2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvU2VsZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBWaXN1YWxNb2RlbFNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9WaXN1YWxNb2RlbFNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRJbXBsIH0gZnJvbSAnLi9EYXNoYm9hcmRJbXBsJztcbmltcG9ydCB7IERhdGFTb3VyY2VJbXBsIH0gZnJvbSAnLi9EYXRhU291cmNlSW1wbCc7XG5pbXBvcnQgeyBTaGVldEltcGwgfSBmcm9tICcuL1NoZWV0SW1wbCc7XG5pbXBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9TaGVldEluZm9JbXBsJztcbmltcG9ydCB7IFN0b3J5UG9pbnRJbXBsIH0gZnJvbSAnLi9TdG9yeVBvaW50SW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRJbXBsIGV4dGVuZHMgU2hlZXRJbXBsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHNoZWV0SW5mb0ltcGw6IFNoZWV0SW5mb0ltcGwsXG4gICAgX3JlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF92aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgcHJpdmF0ZSBfcGFyZW50RGFzaGJvYXJkSW1wbDogRGFzaGJvYXJkSW1wbCB8IG51bGwsXG4gICAgcHJpdmF0ZSBfcGFyZW50U3RvcnlQb2ludEltcGw6IFN0b3J5UG9pbnRJbXBsIHwgbnVsbCxcbiAgKSB7XG4gICAgc3VwZXIoc2hlZXRJbmZvSW1wbCwgX3JlZ2lzdHJ5SWQpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnREYXNoYm9hcmQoKTogRGFzaGJvYXJkSW1wbCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnREYXNoYm9hcmRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRTdG9yeVBvaW50KCk6IFN0b3J5UG9pbnRJbXBsIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFN0b3J5UG9pbnRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXN1YWxJZCgpOiBWaXN1YWxJZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc3VhbElkO1xuICB9XG5cbiAgcHVibGljIGdldE1heFBhZ2VSb3dMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiAxMDAwMDtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlckFzeW5jKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPixcbiAgICB1cGRhdGVUeXBlOiBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLFxuICAgIG9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUVudW1WYWx1ZTxDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlPih1cGRhdGVUeXBlLCBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLCAnQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZScpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlGaWx0ZXJBc3luYyh0aGlzLnZpc3VhbElkLCBmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlSYW5nZUZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBmaWx0ZXJPcHRpb25zOiBDb250cmFjdC5SYW5nZUZpbHRlck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoZmllbGROYW1lLCAnZmllbGROYW1lJyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihmaWx0ZXJPcHRpb25zLCAnZmlsdGVyT3B0aW9ucycpO1xuICAgIGlmIChmaWx0ZXJPcHRpb25zLm51bGxPcHRpb24pIHtcbiAgICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8RmlsdGVyTnVsbE9wdGlvbj4oZmlsdGVyT3B0aW9ucy5udWxsT3B0aW9uLCBGaWx0ZXJOdWxsT3B0aW9uLCAnRmlsdGVyTnVsbE9wdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBFcnJvckhlbHBlcnMudmVyaWZ5UmFuZ2VQYXJhbVR5cGUoZmlsdGVyT3B0aW9ucy5taW4sIGZpbHRlck9wdGlvbnMubWF4KTtcbiAgICB9XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5hcHBseVJhbmdlRmlsdGVyQXN5bmModGhpcy52aXN1YWxJZCwgZmllbGROYW1lLCBmaWx0ZXJPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUhpZXJhcmNoaWNhbEZpbHRlckFzeW5jKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPiB8IENvbnRyYWN0LkhpZXJhcmNoaWNhbExldmVscyxcbiAgICB1cGRhdGVUeXBlOiBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLFxuICAgIG9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihmaWVsZE5hbWUsICdmaWVsZE5hbWUnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKHZhbHVlcywgJ3ZhbHVlcycpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8Q29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZT4odXBkYXRlVHlwZSwgQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSwgJ0NvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiAhdmFsdWVzLmxldmVscykge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLFxuICAgICAgICAndmFsdWVzIHBhcmFtZXRlciBmb3IgYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYyBtdXN0IGJlIGFuIGFycmF5IG9yIGNvbnRhaW4gYSBsZXZlbHMga2V5JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYyh0aGlzLnZpc3VhbElkLCBmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXJBc3luYyhmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihmaWVsZE5hbWUsICdmaWVsZE5hbWUnKTtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEZpbHRlclNlcnZpY2U+KFNlcnZpY2VOYW1lcy5GaWx0ZXIpO1xuICAgIHJldHVybiBzZXJ2aWNlLmNsZWFyRmlsdGVyQXN5bmModGhpcy52aXN1YWxJZCwgZmllbGROYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVJlbGF0aXZlRGF0ZUZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zOiBDb250cmFjdC5SZWxhdGl2ZURhdGVGaWx0ZXJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5U3RyaW5nUGFyYW1ldGVyKGZpZWxkTmFtZSwgJ2ZpZWxkTmFtZScpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIob3B0aW9ucywgJ29wdGlvbnMnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPFBlcmlvZFR5cGU+KG9wdGlvbnMucGVyaW9kVHlwZSwgUGVyaW9kVHlwZSwgJ1BlcmlvZFR5cGUnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPERhdGVSYW5nZVR5cGU+KG9wdGlvbnMucmFuZ2VUeXBlLCBEYXRlUmFuZ2VUeXBlLCAnRGF0ZVJhbmdlVHlwZScpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlSZWxhdGl2ZURhdGVGaWx0ZXJBc3luYyh0aGlzLnZpc3VhbElkLCBmaWVsZE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFTb3VyY2VzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5EYXRhU291cmNlPj4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0RGF0YVNvdXJjZXNBc3luYyh0aGlzLnZpc3VhbElkKS50aGVuPEFycmF5PENvbnRyYWN0LkRhdGFTb3VyY2U+PigocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBkYXRhU2NoZW1hOiBEYXRhU2NoZW1hID0gcmVzdWx0O1xuICAgICAgY29uc3Qgd29ya3NoZWV0RGF0YVNvdXJjZUluZm86IFdvcmtzaGVldERhdGFTb3VyY2VJbmZvID0gZGF0YVNjaGVtYS53b3Jrc2hlZXREYXRhU2NoZW1hTWFwW3RoaXMubmFtZV07XG5cbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VzOiBBcnJheTxDb250cmFjdC5EYXRhU291cmNlPiA9IFtdO1xuXG4gICAgICAvLyBGaXJzdCwgYWRkIHRoZSBwcmltYXJ5IGRhdGFzb3VyY2UuICBCeSBjb252ZW50aW9uLCBpdCBjb21lcyBmaXJzdCBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuXG4gICAgICBjb25zdCBwcmltYXJ5SWQ6IHN0cmluZyA9IHdvcmtzaGVldERhdGFTb3VyY2VJbmZvLnByaW1hcnlEYXRhU291cmNlO1xuICAgICAgZGF0YVNvdXJjZXMucHVzaCh0aGlzLmNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU2NoZW1hLmRhdGFTb3VyY2VzW3ByaW1hcnlJZF0pKTtcblxuICAgICAgLy8gVGhlbiwgbG9vcCB0aHJvdWdoIGFueSBzZWNvbmRhcnkgZGF0YSBzb3VyY2VzIGFuZCBhZGQgdGhlbS5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5SWQgb2Ygd29ya3NoZWV0RGF0YVNvdXJjZUluZm8ucmVmZXJlbmNlZERhdGFTb3VyY2VMaXN0KSB7XG4gICAgICAgIGlmIChzZWNvbmRhcnlJZCAhPT0gcHJpbWFyeUlkKSB7XG4gICAgICAgICAgZGF0YVNvdXJjZXMucHVzaCh0aGlzLmNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU2NoZW1hLmRhdGFTb3VyY2VzW3NlY29uZGFyeUlkXSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhU291cmNlcztcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5GaWx0ZXI+PiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRGaWx0ZXJzQXN5bmModGhpcy52aXN1YWxJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRNYXJrc0FzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldFNlbGVjdGVkTWFya3NBc3luYyh0aGlzLnZpc3VhbElkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaWdobGlnaHRlZE1hcmtzQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0SGlnaGxpZ2h0ZWRNYXJrc0FzeW5jKHRoaXMudmlzdWFsSWQpO1xuICB9XG5cbiAgcHVibGljIGdldFN1bW1hcnlEYXRhQXN5bmMob3B0aW9uczogQ29udHJhY3QuR2V0U3VtbWFyeURhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gc2VydmljZS5nZXRVbmRlcmx5aW5nRGF0YUFzeW5jKFxuICAgICAgdGhpcy52aXN1YWxJZCxcbiAgICAgIEdldERhdGFUeXBlLlN1bW1hcnksXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICB0cnVlLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMubWF4Um93cyB8fCAwLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jKHBhZ2VSb3dDb3VudDogbnVtYmVyLCBvcHRpb25zOiBDb250cmFjdC5HZXRTdW1tYXJ5RGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHJldHVybiBzZXJ2aWNlLmdldFN1bW1hcnlEYXRhUmVhZGVyQXN5bmMoXG4gICAgICB0aGlzLnZpc3VhbElkLFxuICAgICAgcGFnZVJvd0NvdW50IHx8IHRoaXMuZ2V0TWF4UGFnZVJvd0xpbWl0KCksXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICB0cnVlLCAvLyBpbmNsdWRlQWxsQ29sdW1ucyAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgY29sdW1uc1RvSW5jbHVkZUJ5SWQpXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWaXN1YWxTcGVjaWZpY2F0aW9uQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5WaXN1YWxTcGVjaWZpY2F0aW9uPiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxWaXN1YWxNb2RlbFNlcnZpY2U+KFNlcnZpY2VOYW1lcy5WaXN1YWxNb2RlbCk7XG5cbiAgICByZXR1cm4gc2VydmljZS5nZXRWaXN1YWxTcGVjaWZpY2F0aW9uQXN5bmModGhpcy52aXN1YWxJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Db2x1bW4+PiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldFN1bW1hcnlDb2x1bW5zSW5mb0FzeW5jKHRoaXMudmlzdWFsSWQpO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdEYXRhQXN5bmMob3B0aW9uczogQ29udHJhY3QuR2V0VW5kZXJseWluZ0RhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0VW5kZXJseWluZ0RhdGFBc3luYyhcbiAgICAgIHRoaXMudmlzdWFsSWQsXG4gICAgICBHZXREYXRhVHlwZS5VbmRlcmx5aW5nLFxuICAgICAgISFvcHRpb25zLmlnbm9yZUFsaWFzZXMsXG4gICAgICAhIW9wdGlvbnMuaWdub3JlU2VsZWN0aW9uLFxuICAgICAgISFvcHRpb25zLmluY2x1ZGVBbGxDb2x1bW5zLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMubWF4Um93cyB8fCAwLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nVGFibGVzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Mb2dpY2FsVGFibGU+PiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxEYXRhU291cmNlU2VydmljZT4oU2VydmljZU5hbWVzLkRhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRVbmRlcmx5aW5nVGFibGVzQXN5bmModGhpcy52aXN1YWxJZCkudGhlbjxBcnJheTxDb250cmFjdC5Mb2dpY2FsVGFibGU+PigobG9naWNhbFRhYmxlSW5mb3MpID0+IHtcbiAgICAgIHJldHVybiBsb2dpY2FsVGFibGVJbmZvcy5tYXAoKGxvZ2ljYWxUYWJsZUluZm8pID0+IG5ldyBMb2dpY2FsVGFibGUobG9naWNhbFRhYmxlSW5mbykpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdUYWJsZURhdGFBc3luYyhsb2dpY2FsVGFibGVJZDogc3RyaW5nLCBvcHRpb25zPzogQ29udHJhY3QuR2V0VW5kZXJseWluZ0RhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKFxuICAgICAgdGhpcy52aXN1YWxJZCxcbiAgICAgIGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgISFvcHRpb25zLmlnbm9yZUFsaWFzZXMsXG4gICAgICAhIW9wdGlvbnMuaWdub3JlU2VsZWN0aW9uLFxuICAgICAgISFvcHRpb25zLmluY2x1ZGVBbGxDb2x1bW5zLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMubWF4Um93cyB8fCAwLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ/OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IENvbnRyYWN0LkdldFVuZGVybHlpbmdEYXRhT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGVSZWFkZXI+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0VW5kZXJseWluZ1RhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgICAgdGhpcy52aXN1YWxJZCxcbiAgICAgIGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgcGFnZVJvd0NvdW50IHx8IHRoaXMuZ2V0TWF4UGFnZVJvd0xpbWl0KCksXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICAhIW9wdGlvbnMuaW5jbHVkZUFsbENvbHVtbnMsXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGVkTWFya3NBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNlbGVjdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TZWxlY3Rpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLmNsZWFyU2VsZWN0ZWRNYXJrc0FzeW5jKHRoaXMudmlzdWFsSWQpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE1hcmtzQnlWYWx1ZUFzeW5jKHNlbGVjdGlvbnM6IEFycmF5PENvbnRyYWN0LlNlbGVjdGlvbkNyaXRlcmlhPiwgc2VsZWN0aW9uVXBkYXRlVHlwZTogU2VsZWN0aW9uVXBkYXRlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoc2VsZWN0aW9ucywgJ2ZpZWxkTmFtZScpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8U2VsZWN0aW9uVXBkYXRlVHlwZT4oc2VsZWN0aW9uVXBkYXRlVHlwZSwgU2VsZWN0aW9uVXBkYXRlVHlwZSwgJ1NlbGVjdGlvblVwZGF0ZVR5cGUnKTtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNlbGVjdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TZWxlY3Rpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLnNlbGVjdE1hcmtzQnlWYWx1ZUFzeW5jKHRoaXMudmlzdWFsSWQsIHNlbGVjdGlvbnMsIHNlbGVjdGlvblVwZGF0ZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE1hcmtzQnlJZEFzeW5jKHNlbGVjdGlvbnM6IEFycmF5PENvbnRyYWN0Lk1hcmtJbmZvPiwgc2VsZWN0aW9uVXBkYXRlVHlwZTogU2VsZWN0aW9uVXBkYXRlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoc2VsZWN0aW9ucywgJ2ZpZWxkTmFtZScpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8U2VsZWN0aW9uVXBkYXRlVHlwZT4oc2VsZWN0aW9uVXBkYXRlVHlwZSwgU2VsZWN0aW9uVXBkYXRlVHlwZSwgJ1NlbGVjdGlvblVwZGF0ZVR5cGUnKTtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNlbGVjdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TZWxlY3Rpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLnNlbGVjdE1hcmtzQnlJZEFzeW5jKHRoaXMudmlzdWFsSWQsIHNlbGVjdGlvbnMsIHNlbGVjdGlvblVwZGF0ZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIGFubm90YXRlTWFya0FzeW5jKG1hcms6IENvbnRyYWN0Lk1hcmtJbmZvLCBhbm5vdGF0aW9uVGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihtYXJrLCAnbWFyaycpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8QW5ub3RhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5Bbm5vdGF0aW9uKTtcbiAgICByZXR1cm4gc2VydmljZS5hbm5vdGF0ZU1hcmtBc3luYyh0aGlzLnZpc3VhbElkLCBtYXJrLCBhbm5vdGF0aW9uVGV4dCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QW5ub3RhdGlvbnNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkFubm90YXRpb24+PiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxBbm5vdGF0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLkFubm90YXRpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldEFubm90YXRpb25zQXN5bmModGhpcy52aXN1YWxJZCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQW5ub3RhdGlvbkFzeW5jKGFubm90YXRpb246IENvbnRyYWN0LkFubm90YXRpb24pIHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKGFubm90YXRpb24sICdhbm5vdGF0aW9uJyk7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxBbm5vdGF0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLkFubm90YXRpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLnJlbW92ZUFubm90YXRpb25Bc3luYyh0aGlzLnZpc3VhbElkLCBhbm5vdGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRDb250ZXh0TWVudUFzeW5jKHRhcmdldE1lbnU6IEFwaU1lbnVUeXBlLCBjb25maWc6IENvbnRleHRNZW51T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxFeHRlcm5hbENvbnRleHRNZW51U2VydmljZT4oU2VydmljZU5hbWVzLkV4dGVybmFsQ29udGV4dE1lbnUpO1xuICAgIHJldHVybiBzZXJ2aWNlLmFwcGVuZENvbnRleHRNZW51QXN5bmModGhpcy52aXN1YWxJZC53b3Jrc2hlZXQsIHRhcmdldE1lbnUsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29udGV4dE1lbnVBc3luYyh0YXJnZXRNZW51OiBBcGlNZW51VHlwZSwgbWVudUl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxFeHRlcm5hbENvbnRleHRNZW51U2VydmljZT4oU2VydmljZU5hbWVzLkV4dGVybmFsQ29udGV4dE1lbnUpO1xuICAgIHJldHVybiBzZXJ2aWNlLnJlbW92ZUNvbnRleHRNZW51QXN5bmModGhpcy52aXN1YWxJZC53b3Jrc2hlZXQsIHRhcmdldE1lbnUsIG1lbnVJdGVtSWQpO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVDb250ZXh0TWVudUFzeW5jKHRhcmdldE1lbnU6IEFwaU1lbnVUeXBlLCBtZW51SXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRXh0ZXJuYWxDb250ZXh0TWVudSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZXhlY3V0ZUNvbnRleHRNZW51QXN5bmModGhpcy52aXN1YWxJZC53b3Jrc2hlZXQsIHRhcmdldE1lbnUsIG1lbnVJdGVtSWQpO1xuICB9XG5cbiAgcHVibGljIHJlbmFtZUNvbnRleHRNZW51QXN5bmModGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIG1lbnVIZWFkZXI6IHN0cmluZywgbWVudURlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRXh0ZXJuYWxDb250ZXh0TWVudSk7XG4gICAgcmV0dXJuIHNlcnZpY2UucmVuYW1lQ29udGV4dE1lbnVBc3luYyh0aGlzLnZpc3VhbElkLndvcmtzaGVldCwgdGFyZ2V0TWVudSwgbWVudUhlYWRlciwgbWVudURlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBob3ZlclR1cGxlQXN5bmMoaG92ZXJlZFR1cGxlOiBudW1iZXIsIHRvb2x0aXA/OiBUb29sdGlwQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5zaWRlRGFzaGJvYXJkRXh0ZW5zaW9uKCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkltcGxlbWVudGF0aW9uRXJyb3IsIGBob3ZlclR1cGxlQXN5bmMgaXMgbm90IHN1cHBvcnRlZCBpbiBkYXNoYm9hcmQgZXh0ZW5zaW9uc2ApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNlbGVjdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TZWxlY3Rpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLmhvdmVyVHVwbGVBc3luYyh0aGlzLnZpc3VhbElkLCBob3ZlcmVkVHVwbGUsIHRvb2x0aXApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdFR1cGxlc0FzeW5jKHNlbGVjdGVkVHVwbGVzOiBBcnJheTxudW1iZXI+LCBzZWxlY3RPcHRpb246IENvbnRyYWN0LlNlbGVjdE9wdGlvbnMsIHRvb2x0aXA/OiBUb29sdGlwQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5zaWRlRGFzaGJvYXJkRXh0ZW5zaW9uKCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkltcGxlbWVudGF0aW9uRXJyb3IsIGBzZWxlY3RUdXBsZXNBc3luYyBpcyBub3Qgc3VwcG9ydGVkIGluIGRhc2hib2FyZCBleHRlbnNpb25zYCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U2VsZWN0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLlNlbGVjdGlvbik7XG4gICAgcmV0dXJuIHNlcnZpY2Uuc2VsZWN0VHVwbGVzQXN5bmModGhpcy52aXN1YWxJZCwgc2VsZWN0ZWRUdXBsZXMsIHNlbGVjdE9wdGlvbiwgdG9vbHRpcCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU291cmNlSW5mbzogRGF0YVNvdXJjZUluZm8pOiBDb250cmFjdC5EYXRhU291cmNlIHtcbiAgICBjb25zdCBkYXRhU291cmNlSW1wbCA9IG5ldyBEYXRhU291cmNlSW1wbChkYXRhU291cmNlSW5mbywgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBEYXRhU291cmNlKGRhdGFTb3VyY2VJbXBsKTtcbiAgICBkYXRhU291cmNlSW1wbC5pbml0aWFsaXplV2l0aFB1YmxpY0ludGVyZmFjZXMoZGF0YVNvdXJjZSk7XG4gICAgcmV0dXJuIGRhdGFTb3VyY2U7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUFjdGl2ZVNoZWV0KCkge1xuICAgIGNvbnN0IGlzUm9vdEFuZEFjdGl2ZVdvcmtzaGVldCA9IHRoaXMuYWN0aXZlO1xuICAgIGNvbnN0IGlzSW5zaWRlQWN0aXZlRGFzaGJvYXJkID0gdGhpcy5pc0luc2lkZUFjdGl2ZURhc2hib2FyZCgpO1xuICAgIGNvbnN0IGlzSW5zaWRlQWN0aXZlU3RvcnlQb2ludCA9IHRoaXMuaXNJbnNpZGVBY3RpdmVTdG9yeVBvaW50KCk7XG5cbiAgICBpZiAoIWlzUm9vdEFuZEFjdGl2ZVdvcmtzaGVldCAmJiAhaXNJbnNpZGVBY3RpdmVEYXNoYm9hcmQgJiYgIWlzSW5zaWRlQWN0aXZlU3RvcnlQb2ludCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLk5vdEFjdGl2ZVNoZWV0LCAnT3BlcmF0aW9uIG5vdCBhbGxvd2VkIG9uIG5vbi1hY3RpdmUgc2hlZXQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzSW5zaWRlQWN0aXZlU3RvcnlQb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50U3RvcnlQb2ludEltcGwgJiYgdGhpcy5fcGFyZW50U3RvcnlQb2ludEltcGwuYWN0aXZlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0luc2lkZUFjdGl2ZURhc2hib2FyZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGFzaGJvYXJkSW1wbCAmJiB0aGlzLl9wYXJlbnREYXNoYm9hcmRJbXBsLmFjdGl2ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnNpZGVEYXNoYm9hcmRFeHRlbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudERhc2hib2FyZEltcGwgIT09IG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBMb2dpY2FsVGFibGVJbmZvIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBhIGxvZ2ljYWwgdGFibGUuXG4gKiBUaGlzIGRvZXMgbm90IGZvbGxvdyB0aGUgSW1wbCBwYXR0ZXJuIGFzIGl0IGlzIGp1c3QgYSBwcm9wZXJ0eSBiYWcuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpY2FsVGFibGUgaW1wbGVtZW50cyBDb250cmFjdC5Mb2dpY2FsVGFibGUge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9naWNhbFRhYmxlOiBMb2dpY2FsVGFibGVJbmZvKSB7fVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9naWNhbFRhYmxlLmlkO1xuICB9XG5cbiAgcHVibGljIGdldCBjYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2ljYWxUYWJsZS5jYXB0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlVHlwZSwgRmlsdGVyRG9tYWluVHlwZSwgRmlsdGVyVHlwZSwgUGVyaW9kVHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL2xpYi9zcmMvRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvTmFtZXNwYWNlcy9UYWJsZWF1JztcbmltcG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRGF0YVNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0ZpbHRlclNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcblxuZXhwb3J0IGNsYXNzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LkZpbHRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgX3dvcmtzaGVldE5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkSWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgX3JlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclR5cGUoKTogRmlsdGVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRBc3luYygpOiBQcm9taXNlPENvbnRyYWN0LkZpZWxkPiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxEYXRhU291cmNlU2VydmljZT4oU2VydmljZU5hbWVzLkRhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRGaWVsZEFzeW5jKHRoaXMuX2ZpZWxkSWQpO1xuICB9XG5cbiAgcHVibGljIGdldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jKHRoaXMuX3dvcmtzaGVldE5hbWUsIHRoaXMuX2ZpZWxkSWQpO1xuICB9XG5cbiAgcHVibGljIHNldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMoYXBwbHlUb1dvcmtzaGVldHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKGFwcGx5VG9Xb3Jrc2hlZXRzLCAnYXBwbHlUb1dvcmtzaGVldHMnKTtcbiAgICBjb25zdCB1bmlxdWVXb3Jrc2hlZXRzID0gbmV3IFNldChhcHBseVRvV29ya3NoZWV0cyk7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5zZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jKHRoaXMuX3dvcmtzaGVldE5hbWUsIHRoaXMuX2ZpZWxkTmFtZSwgdGhpcy5fZmllbGRJZCwgQXJyYXkuZnJvbSh1bmlxdWVXb3Jrc2hlZXRzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3JpY2FsRmlsdGVyIGV4dGVuZHMgRmlsdGVyIGltcGxlbWVudHMgQ29udHJhY3QuQ2F0ZWdvcmljYWxGaWx0ZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgd29ya3NoZWV0TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkSWQ6IHN0cmluZyxcbiAgICBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlLFxuICAgIHJlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF9hcHBsaWVkVmFsdWVzOiBBcnJheTxDb250cmFjdC5EYXRhVmFsdWU+LFxuICAgIHByaXZhdGUgX2lzRXhjbHVkZU1vZGU6IGJvb2xlYW4sXG4gICAgcHJpdmF0ZSBfaXNBbGxTZWxlY3RlZD86IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHdvcmtzaGVldE5hbWUsIGZpZWxkTmFtZSwgZmlsdGVyVHlwZSwgZmllbGRJZCwgcmVnaXN0cnlJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQWxsU2VsZWN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwcGxpZWRWYWx1ZXMoKTogQXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpZWRWYWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRXhjbHVkZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRXhjbHVkZU1vZGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9tYWluQXN5bmMoZG9tYWluVHlwZT86IEZpbHRlckRvbWFpblR5cGUpOiBQcm9taXNlPENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluPiB7XG4gICAgaWYgKCFkb21haW5UeXBlKSB7XG4gICAgICBkb21haW5UeXBlID0gRmlsdGVyRG9tYWluVHlwZS5SZWxldmFudDtcbiAgICB9XG5cbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPEZpbHRlckRvbWFpblR5cGU+KGRvbWFpblR5cGUsIEZpbHRlckRvbWFpblR5cGUsICdGaWx0ZXJEb21haW5UeXBlJyk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEZpbHRlclNlcnZpY2U+KFNlcnZpY2VOYW1lcy5GaWx0ZXIpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldENhdGVnb3JpY2FsRG9tYWluQXN5bmModGhpcy5fd29ya3NoZWV0TmFtZSwgdGhpcy5fZmllbGRJZCwgZG9tYWluVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoaWNhbERhdGFWYWx1ZSBpbXBsZW1lbnRzIENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlckRhdGFWYWx1ZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogQ29udHJhY3QuRGF0YVZhbHVlLCBwcml2YXRlIF9oaWVyYXJjaGljYWxQYXRoOiBzdHJpbmcsIHByaXZhdGUgX2xldmVsOiBudW1iZXIpIHt9XG5cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBDb250cmFjdC5EYXRhVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGllcmFyY2hpY2FsUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9oaWVyYXJjaGljYWxQYXRoO1xuICB9XG5cbiAgcHVibGljIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGllcmFyY2hpY2FsTGV2ZWxEZXRhaWwgaW1wbGVtZW50cyBDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbERldGFpbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uYW1lOiBzdHJpbmcsIHByaXZhdGUgX2xldmVsU2VsZWN0aW9uU3RhdGU6IEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUpIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxldmVsU2VsZWN0aW9uU3RhdGUoKTogSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsU2VsZWN0aW9uU3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoaWNhbEZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXG4gICAgcmVnaXN0cnlJZDogbnVtYmVyLFxuICAgIHByaXZhdGUgX2RpbWVuc2lvbk5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9oaWVyYXJjaHlDYXB0aW9uOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfbnVtYmVyT2ZMZXZlbHM6IG51bWJlcixcbiAgICBwcml2YXRlIF9sZXZlbERldGFpbHM6IEFycmF5PENvbnRyYWN0LkhpZXJhcmNoaWNhbExldmVsRGV0YWlsPixcbiAgICBwcml2YXRlIF9hcHBsaWVkVmFsdWVzOiBBcnJheTxDb250cmFjdC5IaWVyYXJjaGljYWxGaWx0ZXJEYXRhVmFsdWU+LFxuICAgIHByaXZhdGUgX2lzQWxsU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHdvcmtzaGVldE5hbWUsIGZpZWxkTmFtZSwgZmlsdGVyVHlwZSwgZmllbGRJZCwgcmVnaXN0cnlJZCk7XG4gIH1cbiAgZ2V0RG9tYWluQXN5bmMoZG9tYWluVHlwZT86IENvbnRyYWN0LkZpbHRlckRvbWFpblR5cGUpOiBQcm9taXNlPENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaW1lbnNpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbk5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhpZXJhcmNoeUNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faGllcmFyY2h5Q2FwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbnVtYmVyT2ZMZXZlbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxldmVsRGV0YWlscygpOiBDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbERldGFpbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWxEZXRhaWxzO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0FsbFNlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBhcHBsaWVkVmFsdWVzKCk6IEFycmF5PENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlckRhdGFWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWVkVmFsdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYW5nZUZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LlJhbmdlRmlsdGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHdvcmtzaGVldE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZElkOiBzdHJpbmcsXG4gICAgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcbiAgICByZWdpc3RyeUlkOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfbWluOiBDb250cmFjdC5EYXRhVmFsdWUsXG4gICAgcHJpdmF0ZSBfbWF4OiBDb250cmFjdC5EYXRhVmFsdWUsXG4gICAgcHJpdmF0ZSBfaW5jbHVkZU51bGxWYWx1ZXM6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHdvcmtzaGVldE5hbWUsIGZpZWxkTmFtZSwgZmlsdGVyVHlwZSwgZmllbGRJZCwgcmVnaXN0cnlJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IENvbnRyYWN0LkRhdGFWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgcHVibGljIGdldCBpbmNsdWRlTnVsbFZhbHVlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZU51bGxWYWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9tYWluQXN5bmMoZG9tYWluVHlwZT86IEZpbHRlckRvbWFpblR5cGUpOiBQcm9taXNlPENvbnRyYWN0LlJhbmdlRG9tYWluPiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICBpZiAoIWRvbWFpblR5cGUpIHtcbiAgICAgIGRvbWFpblR5cGUgPSBGaWx0ZXJEb21haW5UeXBlLlJlbGV2YW50O1xuICAgIH1cblxuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8RmlsdGVyRG9tYWluVHlwZT4oZG9tYWluVHlwZSwgRmlsdGVyRG9tYWluVHlwZSwgJ0ZpbHRlckRvbWFpblR5cGUnKTtcblxuICAgIHJldHVybiBzZXJ2aWNlLmdldFJhbmdlRG9tYWluQXN5bmModGhpcy5fd29ya3NoZWV0TmFtZSwgdGhpcy5fZmllbGRJZCwgZG9tYWluVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbGF0aXZlRGF0ZUZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LlJlbGF0aXZlRGF0ZUZpbHRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXG4gICAgcmVnaXN0cnlJZDogbnVtYmVyLFxuICAgIHByaXZhdGUgX2FuY2hvckRhdGU6IENvbnRyYWN0LkRhdGFWYWx1ZSxcbiAgICBwcml2YXRlIF9wZXJpb2RUeXBlOiBQZXJpb2RUeXBlLFxuICAgIHByaXZhdGUgX3JhbmdlVHlwZTogRGF0ZVJhbmdlVHlwZSxcbiAgICBwcml2YXRlIF9yYW5nZU46IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIod29ya3NoZWV0TmFtZSwgZmllbGROYW1lLCBmaWx0ZXJUeXBlLCBmaWVsZElkLCByZWdpc3RyeUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW5jaG9yRGF0ZSgpOiBDb250cmFjdC5EYXRhVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9hbmNob3JEYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCBwZXJpb2RUeXBlKCk6IFBlcmlvZFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9wZXJpb2RUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCByYW5nZVR5cGUoKTogRGF0ZVJhbmdlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmFuZ2VOKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlTjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcmljYWxEb21haW4gaW1wbGVtZW50cyBDb250cmFjdC5DYXRlZ29yaWNhbERvbWFpbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZXM6IEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4sIHByaXZhdGUgX2RvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUpIHt9XG5cbiAgcHVibGljIGdldCB2YWx1ZXMoKTogQXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBGaWx0ZXJEb21haW5UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZG9tYWluVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFuZ2VEb21haW4gaW1wbGVtZW50cyBDb250cmFjdC5SYW5nZURvbWFpbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9taW46IENvbnRyYWN0LkRhdGFWYWx1ZSwgcHJpdmF0ZSBfbWF4OiBDb250cmFjdC5EYXRhVmFsdWUsIHByaXZhdGUgX2RvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUpIHt9XG5cbiAgcHVibGljIGdldCB0eXBlKCk6IEZpbHRlckRvbWFpblR5cGUge1xuICAgIHJldHVybiB0aGlzLl9kb21haW5UeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBtaW4oKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXgoKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVR5cGUsIE1hcmtUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcblxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZSBpbXBsZW1lbnRzIENvbnRyYWN0LkRhdGFUYWJsZSB7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZGF0YTogQXJyYXk8QXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPj4sXG4gICAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8Q29udHJhY3QuQ29sdW1uPixcbiAgICBwcml2YXRlIF90b3RhbFJvd0NvdW50OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfaXNUb3RhbFJvd0NvdW50TGltaXRlZDogYm9vbGVhbixcbiAgICBwcml2YXRlIF9pc1N1bW1hcnlEYXRhOiBib29sZWFuLFxuICAgIHByaXZhdGUgX21hcmtzSW5mbz86IEFycmF5PE1hcmtJbmZvPixcbiAgKSB7XG4gICAgdGhpcy5fbmFtZSA9IF9pc1N1bW1hcnlEYXRhID8gJ1N1bW1hcnkgRGF0YSBUYWJsZScgOiAnVW5kZXJseWluZyBEYXRhIFRhYmxlJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhKCk6IEFycmF5PEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxDb250cmFjdC5Db2x1bW4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFya3NJbmZvKCk6IEFycmF5PENvbnRyYWN0Lk1hcmtJbmZvPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtzSW5mbztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG90YWxSb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFJvd0NvdW50O1xuICB9XG5cbiAgcHVibGljIGdldCBpc1RvdGFsUm93Q291bnRMaW1pdGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc1RvdGFsUm93Q291bnRMaW1pdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1N1bW1hcnlEYXRhKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc1N1bW1hcnlEYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXJrSW5mbyBpbXBsZW1lbnRzIENvbnRyYWN0Lk1hcmtJbmZvIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3R5cGU6IE1hcmtUeXBlLCBwcml2YXRlIF9jb2xvcjogc3RyaW5nLCBwcml2YXRlIF90dXBsZUlkPzogbnVtYmVyKSB7fVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBNYXJrVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICB9XG5cbiAgcHVibGljIGdldCB0dXBsZUlkKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3R1cGxlSWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbiBpbXBsZW1lbnRzIENvbnRyYWN0LkNvbHVtbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9maWVsZE5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9maWVsZElkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfZGF0YVR5cGU6IERhdGFUeXBlLFxuICAgIHByaXZhdGUgX2lzUmVmZXJlbmNlZDogYm9vbGVhbixcbiAgICBwcml2YXRlIF9pbmRleDogbnVtYmVyLFxuICApIHt9XG5cbiAgcHVibGljIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFUeXBlKCk6IERhdGFUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVmZXJlbmNlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNSZWZlcmVuY2VkO1xuICB9XG5cbiAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YVZhbHVlIGltcGxlbWVudHMgQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgLyogdHNsaW50OmRpc2FibGU6bm8tYW55ICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogYW55LCBwcml2YXRlIF9uYXRpdmVWYWx1ZTogYW55LCBwcml2YXRlIF9mb3JtYXR0ZWRWYWx1ZT86IHN0cmluZykge31cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBuYXRpdmVWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9uYXRpdmVWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkVmFsdWU7XG4gIH1cbiAgLyogdHNsaW50OmVuYWJsZTpuby1hbnkgKi9cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBHZXREYXRhU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0dldERhdGFTZXJ2aWNlJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSwgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVSZWFkZXIgaW1wbGVtZW50cyBDb250cmFjdC5EYXRhVGFibGVSZWFkZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIF9pZDogc3RyaW5nLCBwcm90ZWN0ZWQgX3RvdGFsUm93Q291bnQ6IG51bWJlciwgcHJvdGVjdGVkIF9wYWdlUm93Q291bnQsIHByaXZhdGUgX3JlZ2lzdHJ5SWQ6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VDb3VudCA9IE1hdGguY2VpbChfdG90YWxSb3dDb3VudCAvIF9wYWdlUm93Q291bnQpO1xuICB9XG4gIHByb3RlY3RlZCBfcGFnZUNvdW50OiBudW1iZXI7XG5cbiAgcHVibGljIGdldCB0b3RhbFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUm93Q291bnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ291bnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFnZUFzeW5jKHBhZ2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVJhbmdlKHBhZ2VOdW1iZXIsIDAsIHRoaXMuX3BhZ2VDb3VudCk7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldFBhZ2VBc3luYyh0aGlzLl9pZCwgcGFnZU51bWJlciwgdGhpcy5fcGFnZVJvd0NvdW50KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxQYWdlc0FzeW5jKG1heFJvd3M/OiBudW1iZXIpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIGNvbnN0IGZpcnN0UGFnZTogQ29udHJhY3QuRGF0YVRhYmxlID0gYXdhaXQgdGhpcy5nZXRQYWdlQXN5bmMoMCk7XG4gICAgbWF4Um93cyA9IG1heFJvd3MgfHwgdGhpcy50b3RhbFJvd0NvdW50O1xuICAgIGNvbnN0IHJvd3NSZXF1ZXN0ZWQgPSBNYXRoLm1pbihtYXhSb3dzLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuICAgIGNvbnN0IHBhZ2VzUmVxdWVzdGVkID0gTWF0aC5jZWlsKHJvd3NSZXF1ZXN0ZWQgLyB0aGlzLl9wYWdlUm93Q291bnQpO1xuXG4gICAgLy8gRmV0Y2ggdXAgdG8gNDAwIHBhZ2VzLCB3aXRoIGEgZGVmYXVsdCBvZiAxMCwwMDAgcGFnZVJvd0NvdW50IHRoYXQgZ2l2ZXMgdXMgNCwwMDAsMDAwIHJvd3NcbiAgICBjb25zdCBwYWdlc1RvRmV0Y2ggPSBNYXRoLm1pbihwYWdlc1JlcXVlc3RlZCwgNDAwKTtcbiAgICBjb25zdCBpc0RhdGFMaW1pdGVkID0gcGFnZXNUb0ZldGNoIDwgcGFnZXNSZXF1ZXN0ZWQ7XG4gICAgbGV0IHJlbWFpbmluZ0RhdGE6IEFycmF5PEFycmF5PEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4+PiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFnZXNUb0ZldGNoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmdldFBhZ2VBc3luYyhpKTtcbiAgICAgIHJlbWFpbmluZ0RhdGEucHVzaChwYWdlLmRhdGEpO1xuICAgIH1cblxuICAgIGxldCBmdWxsRGF0YSA9IGZpcnN0UGFnZS5kYXRhLmNvbmNhdCguLi5yZW1haW5pbmdEYXRhKTtcbiAgICAvLyBUaGlzIHNsaWNlcyB0aGUgYXJyYXkgb25seSBpZiBtYXhSb3dzIGhhcyBiZWVuIHNldCBhbmQgaXMgbGVzcyB0aGFuIHRvdGFsUm93Q291bnRcbiAgICBmdWxsRGF0YS5sZW5ndGggPSByb3dzUmVxdWVzdGVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGZpcnN0UGFnZS5uYW1lLFxuICAgICAgZGF0YTogZnVsbERhdGEsXG4gICAgICBjb2x1bW5zOiBmaXJzdFBhZ2UuY29sdW1ucyxcbiAgICAgIHRvdGFsUm93Q291bnQ6IGlzRGF0YUxpbWl0ZWQgPyBwYWdlc1RvRmV0Y2ggKiB0aGlzLl9wYWdlUm93Q291bnQgOiByb3dzUmVxdWVzdGVkLFxuICAgICAgaXNUb3RhbFJvd0NvdW50TGltaXRlZDogaXNEYXRhTGltaXRlZCxcbiAgICAgIGlzU3VtbWFyeURhdGE6IGZpcnN0UGFnZS5pc1N1bW1hcnlEYXRhLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVsZWFzZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICByZXR1cm4gc2VydmljZS5yZWxlYXNlQXN5bmModGhpcy5faWQpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBUb29sdGlwQ29udGV4dCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBWaXN1YWxJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogU2VsZWN0aW9uIE1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uTW9kZWwge1xuICBwdWJsaWMgcXVhbGlmaWVkRmllbGRDYXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVmFsdWUgYmFzZWQgc2VsZWN0aW9uIG1vZGVsLiBNZWFudCBmb3IgaGllcmFyY2hpY2FsLCByYW5nZSBhbmQgY2F0ZWdvcmljYWwgc2VsZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbHVlU2VsZWN0aW9uTW9kZWwgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbCB7XG4gIHB1YmxpYyBzZWxlY3RWYWx1ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbn1cblxuLyoqXG4gKiBIaWVyYXJjaGljYWwgdmFsdWUgc2VsZWN0aW9uIG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBIaWVyYXJjaGljYWxTZWxlY3Rpb25Nb2RlbCBleHRlbmRzIFZhbHVlU2VsZWN0aW9uTW9kZWwge31cblxuLyoqXG4gKiBSYW5nZSBiYXNlZCB2YWx1ZSBzZWxlY3Rpb24gbW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlU2VsZWN0aW9uTW9kZWwgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbCB7XG4gIHB1YmxpYyBtaW5WYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgbWF4VmFsdWU6IHN0cmluZztcbiAgcHVibGljIGluY2x1ZGVkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGltZW5zaW9uIHZhbHVlIHNlbGVjdGlvbiBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uU2VsZWN0aW9uTW9kZWwgZXh0ZW5kcyBWYWx1ZVNlbGVjdGlvbk1vZGVsIHt9XG4vKipcbiAqIFR1cGxlIGJhc2VkIHNlbGVjdGlvbiBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgVHVwbGVTZWxlY3Rpb25Nb2RlbCB7XG4gIHB1YmxpYyBzZWxlY3Rpb25UeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBvYmplY3RJZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbn1cblxuLyoqXG4gKiBDb250YWluZXIgY2xhc3MgdG8gcG9wdWxhdGUgYWxsIHRoZSBzZWxlY3Rpb24gbW9kZWxzIHdoZW4gcGFyc2luZyBpbnB1dFxuICovXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyIHtcbiAgcHVibGljIGhpZXJNb2RlbEFycjogQXJyYXk8SGllcmFyY2hpY2FsU2VsZWN0aW9uTW9kZWw+ID0gW107XG4gIHB1YmxpYyBkaW1Nb2RlbEFycjogQXJyYXk8RGltZW5zaW9uU2VsZWN0aW9uTW9kZWw+ID0gW107XG4gIHB1YmxpYyBxdWFudE1vZGVsQXJyOiBBcnJheTxSYW5nZVNlbGVjdGlvbk1vZGVsPiA9IFtdO1xuICBwdWJsaWMgc2VsZWN0aW9uOiBUdXBsZVNlbGVjdGlvbk1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0VHVwbGVzSW50ZXJhY3Rpb25Nb2RlbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmlzdWFsSWRQcmVzTW9kZWw6IFZpc3VhbElkLFxuICAgIHB1YmxpYyB0dXBsZUlkczogQXJyYXk8bnVtYmVyPiA9IFtdLFxuICAgIHB1YmxpYyBzZWxlY3RPcHRpb25zOiBzdHJpbmcsXG4gICAgcHVibGljIHRvb2x0aXBDb250ZXh0PzogVG9vbHRpcENvbnRleHQsXG4gICkge31cbn1cblxuZXhwb3J0IGNsYXNzIEhvdmVyVHVwbGVJbnRlcmFjdGlvbk1vZGVsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyB2aXN1YWxJZFByZXNNb2RlbDogVmlzdWFsSWQsIHB1YmxpYyB0dXBsZUlkOiBudW1iZXIsIHB1YmxpYyB0b29sdGlwQ29udGV4dD86IFRvb2x0aXBDb250ZXh0KSB7fVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcblxuZXhwb3J0IGNsYXNzIFBvaW50IGltcGxlbWVudHMgQ29udHJhY3QuUG9pbnQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfeDogbnVtYmVyLCBwcml2YXRlIF95OiBudW1iZXIpIHt9XG5cbiAgcHVibGljIGdldCB4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3g7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5feTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFZpc3VhbElkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL1NlcnZpY2VSZWdpc3RyeSc7XG5cbi8qKlxuICogRGVmaW5lcyB3aGljaCB0eXBlIG9mIGdldERhdGEgY2FsbCB0byBtYWtlLlxuICovXG5leHBvcnQgZW51bSBHZXREYXRhVHlwZSB7XG4gIFN1bW1hcnkgPSAnc3VtbWFyeScsXG4gIFVuZGVybHlpbmcgPSAndW5kZXJseWluZycsXG59XG5cbi8qKlxuICogU2VydmljZSBmb3IgaW1wbGVtZW50aW5nIHRoZSBsb2dpYyBmb3IgdmFyaW91cyBnZXREYXRhIGNhbGxzXG4gKlxuICogQGludGVyZmFjZSBHZXREYXRhU2VydmljZVxuICogQGV4dGVuZHMge0FwaVNlcnZpY2V9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RGF0YVNlcnZpY2UgZXh0ZW5kcyBBcGlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpbWl0IG9mIHJvd3MgZm9yIGdldFVuZGVybHlpbmdEYXRhQXN5bmNcbiAgICovXG4gIGdldE1heFJvd0xpbWl0KCk6IG51bWJlcjtcblxuICAvKipcbiAgICogR2V0cyB0aGUgdW5kZXJseWluZyBkYXRhIGZvciBhIHBhcnRpY3VsYXIgdmlzdWFsXG4gICAqXG4gICAqIEBwYXJhbSB7VmlzdWFsSWR9IHZpc3VhbElkICBUaGUgdmlzdWFsIGlkXG4gICAqIEBwYXJhbSB7R2V0RGF0YVR5cGV9IGdldFR5cGUgIFRoZSB0eXBlIG9mIGdldERhdGEgY2FsbCB0byBtYWtlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQWxpYXNlcyAgV2hldGhlciBvciBub3QgYWxpYXNlcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZVNlbGVjdGlvbiAgV2hldGhlciBvciBub3Qgc2VsZWN0aW9uIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFsbENvbHVtbnMgIFNob3VsZCBhbGwgY29sdW1ucyBiZSBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5zVG9JbmNsdWRlQnlJZCBPdmVycmlkZXMgaW5jbHVkZUFsbENvbHVtbnMsIGxpc3RzIHRoZSBjb2x1bW5zIHRvIGluY2x1ZGUuIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Um93cyAgTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byByZXR1cm5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPn0gIERhdGEgdGFibGUgd2l0aCB0aGUgcmVxdWVzdGVkIGRhdGFcbiAgICovXG4gIGdldFVuZGVybHlpbmdEYXRhQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIGdldFR5cGU6IEdldERhdGFUeXBlLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgaWdub3JlU2VsZWN0aW9uOiBib29sZWFuLFxuICAgIGluY2x1ZGVBbGxDb2x1bW5zOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtWaXN1YWxJZH0gdmlzdWFsSWQgIFRoZSB2aXN1YWwgaWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VSb3dDb3VudCBUaGUgbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuIFRoZSBkZWZhdWx0IGFuZCBtYXhpbXVtIGlzIDEwLDAwMCByb3dzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUFsaWFzZXMgIFdoZXRoZXIgYWxpYXMgdmFsdWVzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlU2VsZWN0aW9uICBXaGV0aGVyIHNlbGVjdGlvbnMgaW4gdGhpcyB2aXogc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhlIHJldHVybmVkIGRhdGFcbiAgICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQWxsQ29sdW1ucyAgU2hvdWxkIGFsbCBjb2x1bW5zIGJlIGluY2x1ZGVkXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNvbHVtbnNUb0luY2x1ZGVCeUlkIE92ZXJyaWRlcyBpbmNsdWRlQWxsQ29sdW1ucywgbGlzdHMgdGhlIGNvbHVtbnMgdG8gaW5jbHVkZS4gRW1wdHkgbWVhbnMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPn0gIERhdGEgdGFibGUgcmVhZGVyIHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyBkYXRhXG4gICAqL1xuICBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPjtcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG1hcmtzIGZvciBhIGdpdmVuIHZpc3VhbFxuICAgKlxuICAgKiBAcGFyYW0ge1Zpc3VhbElkfSB2aXN1YWxJZCAgVGhlIHZpc3VhbCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBY3RpdmVNYXJrcz59ICBDb2xsZWN0aW9uIG9mIGRhdGEgdGFibGVzIHdpdGggdGhlIGFjdGl2ZSBtYXJrc1xuICAgKi9cbiAgZ2V0U2VsZWN0ZWRNYXJrc0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPjtcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudGx5IGhpZ2hsaWdodGVkIG1hcmtzIGZvciBhIGdpdmVuIHZpc3VhbFxuICAgKlxuICAgKiBAcGFyYW0ge1Zpc3VhbElkfSB2aXN1YWxJZCAgVGhlIHZpc3VhbCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBY3RpdmVNYXJrcz59ICBDb2xsZWN0aW9uIG9mIGRhdGEgdGFibGVzIHdpdGggdGhlIGFjdGl2ZSBtYXJrc1xuICAgKi9cbiAgZ2V0SGlnaGxpZ2h0ZWRNYXJrc0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFzb3VyY2VJZCAgVGhlIGlkIG9mIHRoZSBkYXRhc291cmNlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQWxpYXNlcyAgV2hldGhlciBhbGlhcyB2YWx1ZXMgc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhlIHJldHVybmVkIGRhdGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFJvd3MgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gcmV0cmlldmVcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb2x1bW5zVG9JbmNsdWRlIENvbHVtbnMgd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkIHNwZWNpZmllZCBieSBjYXB0aW9uLiBFbXB0eSBtZWFucyBhbGwgY29sdW1uc1xuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNvbHVtbnNUb0luY2x1ZGVCeUlkIENvbHVtbnMgd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkIHNwZWNpZmllZCBieSBuYW1lLiBFbXB0eSBtZWFucyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+fSAgRGF0YSB0YWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKi9cbiAgZ2V0RGF0YVNvdXJjZURhdGFBc3luYyhcbiAgICBkYXRhc291cmNlSWQ6IHN0cmluZyxcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBjb2x1bW5zVG9JbmNsdWRlOiBBcnJheTxzdHJpbmc+LFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YXNvdXJjZUlkICBUaGUgaWQgb2YgdGhlIGRhdGFzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2ljYWxUYWJsZUlkICBUaGUgaWQgb2YgdGhlIGxvZ2NpYWwgdGFibGVcbiAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVBbGlhc2VzICBXaGV0aGVyIGFsaWFzIHZhbHVlcyBzaG91bGQgYmUgaWdub3JlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Um93cyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNvbHVtbnNUb0luY2x1ZGUgQ29sdW1ucyB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgc3BlY2lmaWVkIGJ5IGNhcHRpb24uIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gY29sdW1uc1RvSW5jbHVkZUJ5SWQgQ29sdW1ucyB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgc3BlY2lmaWVkIGJ5IG5hbWUuIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT59ICBEYXRhIHRhYmxlIHdpdGggdGhlIHJlcXVlc3RlZCBkYXRhXG4gICAqL1xuICBnZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMoXG4gICAgZGF0YXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBjb2x1bW5zVG9JbmNsdWRlOiBBcnJheTxzdHJpbmc+LFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YXNvdXJjZUlkICBUaGUgaWQgb2YgdGhlIGRhdGFzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2ljYWxUYWJsZUlkICBUaGUgaWQgb2YgdGhlIGxvZ2NpYWwgdGFibGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VSb3dDb3VudCBUaGUgbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuIFRoZSBkZWZhdWx0IGFuZCBtYXhpbXVtIGlzIDEwLDAwMCByb3dzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUFsaWFzZXMgIFdoZXRoZXIgYWxpYXMgdmFsdWVzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gY29sdW1uc1RvSW5jbHVkZUJ5SWQgQ29sdW1ucyB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgc3BlY2lmaWVkIGJ5IG5hbWUuIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT59ICBEYXRhIHRhYmxlIHdpdGggdGhlIHJlcXVlc3RlZCBkYXRhXG4gICAqL1xuICBnZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgZGF0YXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGVSZWFkZXI+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Zpc3VhbElkfSB2aXN1YWxJZCAgVGhlIHZpc3VhbCBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naWNhbFRhYmxlSWQgIFRoZSBpZCBvZiB0aGUgbG9nY2lhbCB0YWJsZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUFsaWFzZXMgIFdoZXRoZXIgYWxpYXMgdmFsdWVzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlU2VsZWN0aW9uICBXaGV0aGVyIHNlbGVjdGlvbnMgaW4gdGhpcyB2aXogc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhlIHJldHVybmVkIGRhdGFcbiAgICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQWxsQ29sdW1ucyAgV2hldGhlciB0byBpbmNsdWRlIGFsbCBjb2x1bW5zIG9yIG9ubHkgdGhlIHJlZmVyZW5jZWQgY29sdW1uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5zVG9JbmNsdWRlQnlJZCBPdmVycmlkZXMgaW5jbHVkZUFsbENvbHVtbnMsIGxpc3RzIHRoZSBjb2x1bW5zIHRvIGluY2x1ZGUuIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Um93cyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+fSAgRGF0YSB0YWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKi9cbiAgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgaWdub3JlU2VsZWN0aW9uOiBib29sZWFuLFxuICAgIGluY2x1ZGVBbGxDb2x1bW5zOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtWaXN1YWxJZH0gdmlzdWFsSWQgIFRoZSB2aXN1YWwgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2ljYWxUYWJsZUlkICBUaGUgaWQgb2YgdGhlIGxvZ2NpYWwgdGFibGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VSb3dDb3VudCBUaGUgbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuIFRoZSBkZWZhdWx0IGFuZCBtYXhpbXVtIGlzIDEwLDAwMCByb3dzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUFsaWFzZXMgIFdoZXRoZXIgYWxpYXMgdmFsdWVzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlU2VsZWN0aW9uICBXaGV0aGVyIHNlbGVjdGlvbnMgaW4gdGhpcyB2aXogc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhlIHJldHVybmVkIGRhdGFcbiAgICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlQWxsQ29sdW1ucyAgV2hldGhlciB0byBpbmNsdWRlIGFsbCBjb2x1bW5zIG9yIG9ubHkgdGhlIHJlZmVyZW5jZWQgY29sdW1uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5zVG9JbmNsdWRlQnlJZCBPdmVycmlkZXMgaW5jbHVkZUFsbENvbHVtbnMsIGxpc3RzIHRoZSBjb2x1bW5zIHRvIGluY2x1ZGUuIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+fSAgRGF0YSB0YWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKi9cbiAgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIHBhZ2VSb3dDb3VudDogbnVtYmVyLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgaWdub3JlU2VsZWN0aW9uOiBib29sZWFuLFxuICAgIGluY2x1ZGVBbGxDb2x1bW5zOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGVSZWFkZXI+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Zpc3VhbElkfSB2aXN1YWxJZCAgVGhlIHZpc3VhbCBpZFxuICAgKi9cbiAgZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Db2x1bW4+PjtcblxuICAvKipcbiAgICogQHBhcmFtIHRhYmxlSWQgICAgIFRoZSB0YWJsZSBpZCB1c2VkIHRvIGZldGNoIGRhdGEuXG4gICAqIEBwYXJhbSBwYWdlTnVtYmVyICBUaGUgcGFnZSBudW1iZXIgKHplcm8tYmFzZWQpLlxuICAgKiBAcGFyYW0gcGFnZVNpemUgICAgVGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgb3duaW5nIERhdGFUYWJsZVJlYWRlclxuICAgKiBAcmV0dXJucyAgICAgICAgICAgQSBEYXRhVGFibGUgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIHBhZ2UuIFRoZSBudW1iZXIgb2Ygcm93cyByZXR1cm5lZFxuICAgKiAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGxlc3MgdGhhbiByZXF1ZXN0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBhZ2VBc3luYyh0YWJsZUlkOiBzdHJpbmcsIHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPjtcblxuICAvKipcbiAgICogQHBhcmFtIHRhYmxlSWQgICAgIFRoZSB0YWJsZSBpZCB1c2VkIHRvIGZldGNoIGRhdGEuXG4gICAqL1xuICByZWxlYXNlQXN5bmModGFibGVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB7IEludGVybmFsQXBpRGlzcGF0Y2hlciwgVmVyc2lvbk51bWJlciB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnkgfSBmcm9tICcuL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9BbmltYXRpb25TZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvQW5ub3RhdGlvblNlcnZpY2VJbXBsJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9EYXRhU291cmNlU2VydmljZUltcGwnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvRXhwb3J0U2VydmljZUltcGwnO1xuaW1wb3J0IHsgRXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL0V4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9GaWx0ZXJTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBHZXREYXRhU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvR2V0RGF0YVNlcnZpY2VJbXBsJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL05vdGlmaWNhdGlvblNlcnZpY2VJbXBsJztcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9QYXJhbWV0ZXJzU2VydmljZUltcGwnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvU2VsZWN0aW9uU2VydmljZUltcGwnO1xuaW1wb3J0IHsgU2l6ZVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL1NpemVTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBWaXN1YWxNb2RlbFNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL1Zpc3VhbE1vZGVsU2VydmljZUltcGwnO1xuaW1wb3J0IHsgVml6U2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvVml6U2VydmljZUltcGwnO1xuaW1wb3J0IHsgWm9uZVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL1pvbmVTZXJ2aWNlSW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFsbFNoYXJlZFNlcnZpY2VzKGRpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlciwgcmVnaXN0cnlJZDogbnVtYmVyLCBwbGF0Zm9ybVZlcnNpb24/OiBWZXJzaW9uTnVtYmVyKTogdm9pZCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBBbmltYXRpb25TZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCByZWdpc3RyeUlkKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBEYXRhU291cmNlU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCwgcGxhdGZvcm1WZXJzaW9uKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBFeHBvcnRTZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCByZWdpc3RyeUlkKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBHZXREYXRhU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgRmlsdGVyU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgTm90aWZpY2F0aW9uU2VydmljZUltcGwoZGlzcGF0Y2hlcikpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgUGFyYW1ldGVyc1NlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IFNlbGVjdGlvblNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IEFubm90YXRpb25TZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCByZWdpc3RyeUlkKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBab25lU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgU2l6ZVNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IFZpc3VhbE1vZGVsU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgVml6U2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgRXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbn1cbiIsImltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vVGFibGVhdUVycm9yJztcblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgYW4gYXBpIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIG5hbWUgZm9yIHRoaXMgc2VydmljZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBzZXJ2aWNlIG5hbWUgd2hpY2ggd2lsbCBiZSByZWdpc3RlcmVkIGluIHRoZSBhcGktc2hhcmVkIHByb2plY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2VydmljZU5hbWVzIHtcbiAgQXV0aGVudGljYXRpb24gPSAnYXV0aGVudGljYXRpb24nLFxuICBDbGllbnRJbmZvID0gJ2NsaWVudC1pbmZvLXNlcnZpY2UnLFxuICBEYXRhU291cmNlU2VydmljZSA9ICdkYXRhLXNvdXJjZS1zZXJ2aWNlJyxcbiAgR2V0RGF0YSA9ICdnZXQtZGF0YS1zZXJ2aWNlJyxcbiAgRmlsdGVyID0gJ2ZpbHRlci1zZXJ2aWNlJyxcbiAgTm90aWZpY2F0aW9uID0gJ25vdGlmaWNhdGlvbi1zZXJ2aWNlJyxcbiAgUGFyYW1ldGVycyA9ICdwYXJhbWV0ZXJzLXNlcnZpY2UnLFxuICBTZWxlY3Rpb24gPSAnc2VsZWN0aW9uLXNlcnZpY2UnLFxuICBBbm5vdGF0aW9uID0gJ2Fubm90YXRpb24tc2VydmljZScsXG4gIFpvbmUgPSAnem9uZS1zZXJ2aWNlJyxcbiAgQW5pbWF0aW9uID0gJ2FuaW1hdGlvbi1zZXJ2aWNlJyxcbiAgVml6ID0gJ3Zpei1zZXJ2aWNlJyxcbiAgRXh0ZXJuYWxDb250ZXh0TWVudSA9ICdleHRlcm5hbC1jb250ZXh0LW1lbnUtc2VydmljZScsXG4gIEluaXRpYWxpemF0aW9uID0gJ2luaXRpYWxpemF0aW9uLXNlcnZpY2UnLFxuICBTdG9yeUFjdGl2YXRpb24gPSAnc3RvcnktYWN0aXZhdGlvbi1zZXJ2aWNlJyxcbiAgU2l6ZSA9ICdzaXplLXNlcnZpY2UnLFxuICBFeHBvcnQgPSAnZXhwb3J0LXNlcnZpY2UnLFxuICBWaXN1YWxNb2RlbCA9ICd2aXN1YWwtbW9kZWwtc2VydmljZScsXG59XG5cbi8qKlxuICogRG8gc29tZSBnbG9iYWwgZGVjbGFyYXRpb25zIHNvIHdlIGNhbiBjcmVhdGUgYSBzaW5nbGV0b24gb24gdGhlIHdpbmRvdyBvYmplY3RcbiAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3RhYmxlYXVBcGlTZXJ2aWNlUmVnaXN0cnk6IHsgW3JlZ2lzdHJ5SWQ6IG51bWJlcl06IFNlcnZpY2VSZWdpc3RyeSB9O1xuICB9XG59XG5cbndpbmRvdy5fX3RhYmxlYXVBcGlTZXJ2aWNlUmVnaXN0cnkgPSB3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5IHx8IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VSZWdpc3RyeSB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBuZXcgc2VydmljZSBpbnRvIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBBbnkgZXhpc3Rpbmcgb25lIHdpbGxcbiAgICogYmUgb3ZlcndyaXR0ZW4uIHRoZSBzZXJ2aWNlIGlzIHJlZ2lzdGVyZWQgdW5kZXIgc2VydmljZS5zZXJ2aWNlTmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge0FwaVNlcnZpY2V9IHNlcnZpY2UgVGhlIHNlcnZpdmUgdG8gcmVnaXN0ZXJcbiAgICovXG4gIHJlZ2lzdGVyU2VydmljZShzZXJ2aWNlOiBBcGlTZXJ2aWNlKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBnaXZlbiBzZXJ2aWNlIGZyb20gdGhlIHJlZ2lzdHJ5LiBJZiB0aGVyZSBpcyBub3QgYVxuICAgKiBzZXJ2aWNlIHJlZ2lzdGVyZWQgdW5kZXIgdGhhdCBuYW1lLCB0aHJvd3MgYW5kIGVycm9yXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXJ2aWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZS5cbiAgICogQHJldHVybnMge1R9IFRoZSByZXF1ZXN0ZWQgc2VydmljZVxuICAgKi9cbiAgZ2V0U2VydmljZTxUIGV4dGVuZHMgQXBpU2VydmljZT4oc2VydmljZU5hbWU6IHN0cmluZyk6IFQ7XG59XG5cbmNsYXNzIFNlcnZpY2VSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBTZXJ2aWNlUmVnaXN0cnkge1xuICBwcml2YXRlIF9zZXJ2aWNlczogeyBbc2VydmljZU5hbWU6IHN0cmluZ106IEFwaVNlcnZpY2UgfTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc2VydmljZXMgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclNlcnZpY2Uoc2VydmljZTogQXBpU2VydmljZSk6IHZvaWQge1xuICAgIHRoaXMuX3NlcnZpY2VzW3NlcnZpY2Uuc2VydmljZU5hbWVdID0gc2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXJ2aWNlPFQgZXh0ZW5kcyBBcGlTZXJ2aWNlPihzZXJ2aWNlTmFtZTogc3RyaW5nKTogVCB7XG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlcy5oYXNPd25Qcm9wZXJ0eShzZXJ2aWNlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtzZXJ2aWNlTmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VydmljZXNbc2VydmljZU5hbWVdIGFzIFQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBmb3IgZ2V0dGluZyBhY2Nlc3MgdG8gdGhlIHNpbmdsZSBpbnN0YW5jZVxuICogb2YgdGhlIEFwaVNlcnZpY2VSZWdpc3RyeSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZ2lzdHJ5SWQuXG4gKlxuICogRXh0ZW5zaW9ucyBieSBkZXNpZ24gZG9uJ3QgbmVlZCB0byBzdG9yZS9hY2Nlc3MgbXVsdGlwbGUgc2VydmljZSByZWdpc3RyaWVzLiBUaGVpciBzaW5nbGUgaW5zdGFuY2Ugb2YgU2VydmljZVJlZ2lzdHJ5IGlzXG4gKiBzdG9yZWQvYWNjZXNzIHdpdGggcmVnaXN0cnlJZCA9IDAuXG4gKlxuICogV2hlcmVhcyBFbWJlZGRpbmcgbmVlZHMgdG8gYmUgYXdhcmUgb2Ygd2hpY2ggU2VydmljZVJlZ2lzdHJ5IHRvIHVzZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSB2aXp6ZXMgZW1iZWRkZWQuXG4gKiBBbiBleGFtcGxlIG9mIGhvdyB3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5IHdpbGwgbG9vayB3aGVuIHRoZXJlIGFyZSB0d28gdml6emVzOiB7IDAgOiBTZXJ2aWNlUmVnaXN0cnksIDEgOiBTZXJ2aWNlUmVnaXN0cnl9XG4gKiB3aGVyZSByZWdpc3RyeSBJRCBvZiAwICYgMSByZWZlcnMgdG8gdml6J3MgaW50ZXJuYWwgaWRlbnRpZmllciAod2hpY2ggaXMgZ2VuZXJhdGVkIGJ5IFZpek1hbmFnZXIpLlxuICovXG5leHBvcnQgY2xhc3MgQXBpU2VydmljZVJlZ2lzdHJ5IHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgU2VydmljZVJlZ2lzdHJ5XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldChyZWdpc3RyeUlkOiBudW1iZXIpOiBTZXJ2aWNlUmVnaXN0cnkge1xuICAgIGlmICghd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeSB8fCAhd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeVtyZWdpc3RyeUlkXSkge1xuICAgICAgQXBpU2VydmljZVJlZ2lzdHJ5LnNldEluc3RhbmNlKHJlZ2lzdHJ5SWQsIG5ldyBTZXJ2aWNlUmVnaXN0cnlJbXBsKCkpO1xuICAgIH1cblxuICAgIGlmICghd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeVtyZWdpc3RyeUlkXSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdTZXJ2aWNlIHJlZ2lzdHJ5IGZhaWxlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5W3JlZ2lzdHJ5SWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdGhhdCBzZXRzIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGluc3RhbmNlIGZvciB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RyeUlkLiBDYW4gYmUgdXNlZCBieSB1bml0IHRlc3RzXG4gICAqXG4gICAqIEBwYXJhbSB7U2VydmljZVJlZ2lzdHJ5fSBzZXJ2aWNlUmVnaXN0cnkgVGhlIG5ldyByZWdpc3RyeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXRJbnN0YW5jZShyZWdpc3RyeUlkOiBudW1iZXIsIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5KTogdm9pZCB7XG4gICAgaWYgKCF3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5KSB7XG4gICAgICB3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5ID0ge307XG4gICAgfVxuICAgIHdpbmRvdy5fX3RhYmxlYXVBcGlTZXJ2aWNlUmVnaXN0cnlbcmVnaXN0cnlJZF0gPSBzZXJ2aWNlUmVnaXN0cnk7XG4gIH1cblxuICAvKipcbiAgICogT25seSB1c2VkIGJ5IHVuaXQgdGVzdHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJSZWdpc3RyeSgpOiB2b2lkIHtcbiAgICB3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5ID0ge307XG4gIH1cblxuICAvLyBQcml2YXRlIHRvIGF2b2lkIGFueW9uZSBjb25zdHJ1Y3RpbmcgdGhpc1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cbiIsImltcG9ydCB7IFJlcGxheVNwZWVkVHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJJZCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyBhcyBFeHRlcm5hbEVudW1Db252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9FbnVtTWFwcGluZ3MvRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzJztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uLy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vQW5pbWF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBBbmltYXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuQW5pbWF0aW9uO1xuICB9XG5cbiAgcHVibGljIHJlcGxheUFzeW5jKHJlcGxheVNwZWVkOiBSZXBsYXlTcGVlZFR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLlJlcGxheVNwZWVkXTogMS4wLFxuICAgIH07XG5cbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPFJlcGxheVNwZWVkVHlwZT4ocmVwbGF5U3BlZWQsIFJlcGxheVNwZWVkVHlwZSwgJ1JlcGxheVNwZWVkVHlwZScpO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuUmVwbGF5U3BlZWRdID0gRXh0ZXJuYWxFbnVtQ29udmVydGVyLnNldFJlcGxheVNwZWVkVHlwZS5jb252ZXJ0KHJlcGxheVNwZWVkKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlJlcGxheUFuaW1hdGlvbiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEFubm90YXRlRW51bSwgQW5ub3RhdGlvbiwgRXhlY3V0ZVBhcmFtZXRlcnMsIFBhcmFtZXRlcklkLCBWZXJiSWQsIFZpc3VhbElkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4uLy4uL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyLCBUdXBsZVNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vTW9kZWxzL1NlbGVjdGlvbk1vZGVscyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi8uLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgQW5ub3RhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9Bbm5vdGF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgQW5ub3RhdGlvblNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgQW5ub3RhdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5Bbm5vdGF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBhbm5vdGF0ZSBhIG1hcmsgb24gdGhlIGdpdmVuIHdvcmtzaGVldC5cbiAgICpcbiAgICogQHBhcmFtIHZpc3VhbElkXG4gICAqIEBwYXJhbSBtYXJrXG4gICAqIEBwYXJhbSBhbm5vdGF0aW9uVGV4dFxuICAgKi9cbiAgcHVibGljIGFubm90YXRlTWFya0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCwgbWFyazogQ29udHJhY3QuTWFya0luZm8sIGFubm90YXRpb25UZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyID0gdGhpcy5wYXJzZU1hcmtTZWxlY3Rpb25JZHMoW21hcmtdKTtcbiAgICBjb25zdCBkdW1teVRhcmdldFBvaW50ID0geyB4OiAwLCB5OiAwIH07XG4gICAgY29uc3QgZm9ybWF0dGVkVGV4dCA9IGA8Zm9ybWF0dGVkLXRleHQ+PHJ1bj4ke2Fubm90YXRpb25UZXh0fTwvcnVuPjwvZm9ybWF0dGVkLXRleHQ+YDtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhbm5vdGF0ZU1hcmtBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Bbm5vdGF0ZUVudW1dOiBBbm5vdGF0ZUVudW0uTWFyayxcbiAgICAgIFtQYXJhbWV0ZXJJZC5UYXJnZXRQb2ludF06IGR1bW15VGFyZ2V0UG9pbnQsXG4gICAgICBbUGFyYW1ldGVySWQuU2VsZWN0aW9uTGlzdF06IFtzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5zZWxlY3Rpb25dLFxuICAgICAgW1BhcmFtZXRlcklkLkZvcm1hdHRlZFRleHRdOiBmb3JtYXR0ZWRUZXh0LFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuQ3JlYXRlQW5ub3RhdGlvbiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIEV4cGVjdGluZyBhbiBlbXB0eSBtb2RlbCBhbmQgaGVuY2UgdGhlIHZvaWQgcmVzcG9uc2UuXG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJldHJpZXZlIGFubm90YXRpb25zIGZvciB0aGUgZ2l2ZW4gd29ya3NoZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmlzdWFsSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8QW5ub3RhdGlvbj4+fVxuICAgKi9cbiAgcHVibGljIGdldEFubm90YXRpb25zQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Bbm5vdGF0aW9uPj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRBbm5vdGF0aW9uc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0QW5ub3RhdGlvbnMsIHBhcmFtZXRlcnMpLnRoZW48QXJyYXk8Q29udHJhY3QuQW5ub3RhdGlvbj4+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvbnNMaXN0ID0gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PEFubm90YXRpb24+O1xuICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbkZpbHRlck1hcChhbm5vdGF0aW9uc0xpc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byByZW1vdmUgYW4gYW5ub3RhdGlvbiBmcm9tIGEgZ2l2ZW4gd29ya3NoZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmlzdWFsSWRcbiAgICogQHBhcmFtIGFubm90YXRpb25cbiAgICovXG4gIHB1YmxpYyByZW1vdmVBbm5vdGF0aW9uQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkLCBhbm5vdGF0aW9uOiBDb250cmFjdC5Bbm5vdGF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZWxDb250YWluZXI6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciA9IHRoaXMucGFyc2VBbm5vdGF0aW9uU2VsZWN0aW9uSWRzKFthbm5vdGF0aW9uXSk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmVtb3ZlQW5ub3RhdGlvbkFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgICAgW1BhcmFtZXRlcklkLlNlbGVjdGlvbkxpc3RdOiBbc2VsZWN0aW9uTW9kZWxDb250YWluZXIuc2VsZWN0aW9uXSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlJlbW92ZUFubm90YXRpb24sIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBFeHBlY3RpbmcgYW4gZW1wdHkgbW9kZWwgYW5kIGhlbmNlIHRoZSB2b2lkIHJlc3BvbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBwcmVwYXJlIHRoZSBwcmVzIG1vZGVscyBmb3Igc2VsZWN0aW9uIGJ5IE1hcmtzSW5mb1xuICAgKiBAcGFyYW0gbWFya3NcbiAgICovXG4gIHByaXZhdGUgcGFyc2VNYXJrU2VsZWN0aW9uSWRzKG1hcmtzOiBBcnJheTxDb250cmFjdC5NYXJrSW5mbz4pOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIge1xuICAgIGNvbnN0IGlkczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIgPSBuZXcgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyKCk7XG4gICAgbWFya3MuZm9yRWFjaCgobWFyaykgPT4ge1xuICAgICAgY29uc3QgdHVwbGVJZDogbnVtYmVyIHwgdW5kZWZpbmVkID0gbWFyay50dXBsZUlkO1xuICAgICAgaWYgKHR1cGxlSWQgIT09IHVuZGVmaW5lZCAmJiB0dXBsZUlkICE9PSBudWxsICYmIHR1cGxlSWQgPiAwKSB7XG4gICAgICAgIGlkcy5wdXNoKHR1cGxlSWQudG9TdHJpbmcoKSk7IC8vIGNvbGxlY3QgdGhlIHR1cGxlIGlkc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdpbnZhbGlkIHR1cGxlSWQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgLy8gdHVwbGUgaWRzIGJhc2VkIHNlbGVjdGlvblxuICAgICAgY29uc3QgdHVwbGVTZWxlY3Rpb25Nb2RlbDogVHVwbGVTZWxlY3Rpb25Nb2RlbCA9IG5ldyBUdXBsZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICB0dXBsZVNlbGVjdGlvbk1vZGVsLnNlbGVjdGlvblR5cGUgPSAndHVwbGVzJztcbiAgICAgIHR1cGxlU2VsZWN0aW9uTW9kZWwub2JqZWN0SWRzID0gaWRzO1xuICAgICAgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuc2VsZWN0aW9uID0gdHVwbGVTZWxlY3Rpb25Nb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBwcmVwYXJlIHRoZSBwcmVzIG1vZGVscyBmb3Igc2VsZWN0aW9uIGJ5IE1hcmtBbm5vdGF0aW9uSW5mb1xuICAgKiBAcGFyYW0gbWFya3NcbiAgICovXG4gIHByaXZhdGUgcGFyc2VBbm5vdGF0aW9uU2VsZWN0aW9uSWRzKGFubm90YXRpb25zOiBBcnJheTxDb250cmFjdC5Bbm5vdGF0aW9uPik6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciB7XG4gICAgY29uc3QgaWRzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZWxDb250YWluZXI6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciA9IG5ldyBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIoKTtcbiAgICBhbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IGFubm90YXRpb24uYW5ub3RhdGlvbklkO1xuICAgICAgaWYgKGFubm90YXRpb25JZCAhPT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25JZCAhPT0gbnVsbCAmJiBhbm5vdGF0aW9uSWQgPj0gMCkge1xuICAgICAgICBpZHMucHVzaChhbm5vdGF0aW9uSWQudG9TdHJpbmcoKSk7IC8vIGNvbGxlY3QgdGhlIGFubm90YXRpb24gaWRzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ2ludmFsaWQgYW5ub3RhdGlvbklkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IDApIHtcbiAgICAgIC8vIGFubm90YXRpb24gaWRzIGJhc2VkIHNlbGVjdGlvblxuICAgICAgY29uc3QgdHVwbGVTZWxlY3Rpb25Nb2RlbDogVHVwbGVTZWxlY3Rpb25Nb2RlbCA9IG5ldyBUdXBsZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICB0dXBsZVNlbGVjdGlvbk1vZGVsLnNlbGVjdGlvblR5cGUgPSAnYW5ub3RhdGlvbnMnO1xuICAgICAgdHVwbGVTZWxlY3Rpb25Nb2RlbC5vYmplY3RJZHMgPSBpZHM7XG4gICAgICBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5zZWxlY3Rpb24gPSB0dXBsZVNlbGVjdGlvbk1vZGVsO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0aW9uTW9kZWxDb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIG1hcCBBbm5vdGF0aW9uIHRvIE1hcmtBbm5vdGF0aW9uSW5mb1xuICAgKiBAcGFyYW0gYW5ub3RhdGlvblxuICAgKiBAcmV0dXJucyB7QW5ub3RhdGlvbn1cbiAgICovXG4gIHByaXZhdGUgbWFwQW5ub3RhdGlvbihhbm5vdGF0aW9uOiBBbm5vdGF0aW9uKTogQ29udHJhY3QuQW5ub3RhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFubm90YXRpb25IVE1MOiBhbm5vdGF0aW9uLmFubm90YXRpb25UZXh0LFxuICAgICAgYW5ub3RhdGlvbklkOiBhbm5vdGF0aW9uLmFubm90YXRpb25JZCxcbiAgICAgIGFubm90YXRpb25UZXh0OiBhbm5vdGF0aW9uLmFubm90YXRpb25QbGFpblRleHQsXG4gICAgICBhbm5vdGF0aW9uVHlwZTogSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzLmFubm90YXRpb25UeXBlLmNvbnZlcnQoYW5ub3RhdGlvbi5hbm5vdGF0ZUVudW0pLFxuICAgICAgdHVwbGVJZDogYW5ub3RhdGlvbi50dXBsZUlkISxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgQW5ub3RhdGlvbnMgdG8gTWFyayBBbm5vdGF0aW9ucywgYW5kIG1hcCB0aGVtIHRvIE1hcmtBbm5vdGF0aW9uSW5mb1xuICAgKiBAcGFyYW0gYW5ub3RhdGlvbnNcbiAgICogQHJldHVybnMge0FycmF5PEFubm90YXRpb24+fVxuICAgKi9cbiAgcHJpdmF0ZSBhbm5vdGF0aW9uRmlsdGVyTWFwKGFubm90YXRpb25zOiBBcnJheTxBbm5vdGF0aW9uPik6IEFycmF5PENvbnRyYWN0LkFubm90YXRpb24+IHtcbiAgICBjb25zdCBhbm5vdGF0aW9uSW5mb3MgPSBhbm5vdGF0aW9ucy5tYXAoKGFubm90YXRpb24pID0+IHRoaXMubWFwQW5ub3RhdGlvbihhbm5vdGF0aW9uKSk7XG5cbiAgICByZXR1cm4gYW5ub3RhdGlvbkluZm9zO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFbWJlZGRpbmdCb290c3RyYXBJbmZvLCBFeGVjdXRlUGFyYW1ldGVycywgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDbGllbnRJbmZvU2VydmljZSB9IGZyb20gJy4uL0NsaWVudEluZm9TZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBDbGllbnRJbmZvU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBDbGllbnRJbmZvU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLkNsaWVudEluZm87XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xpZW50SW5mb0FzeW5jKCk6IFByb21pc2U8RW1iZWRkaW5nQm9vdHN0cmFwSW5mbz4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuR2V0RW1iZWRkaW5nQ2xpZW50SW5mbztcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0Q2xpZW50SW5mb0FzeW5jJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPEVtYmVkZGluZ0Jvb3RzdHJhcEluZm8+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50SW5mbyA9IHJlc3BvbnNlLnJlc3VsdCBhcyBFbWJlZGRpbmdCb290c3RyYXBJbmZvO1xuICAgICAgcmV0dXJuIGNsaWVudEluZm87XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCAqIGFzIEludGVybmFsQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25EZXNjcmlwdGlvblN1bW1hcnksXG4gIERhdGFTY2hlbWEsXG4gIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICBJbnRlcm5hbEFwaURpc3BhdGNoZXIsXG4gIExvZ2ljYWxUYWJsZUluZm8sXG4gIFBhcmFtZXRlcklkLFxuICBUYWJsZUluZm8sXG4gIFRhYmxlSW5mb3MsXG4gIFZlcmJJZCxcbiAgVmlzdWFsSWQsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vRGF0YVNvdXJjZSc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uLy4uL0ZpZWxkJztcbmltcG9ydCB7IERhdGFTb3VyY2VJbXBsIH0gZnJvbSAnLi4vLi4vSW1wbC9EYXRhU291cmNlSW1wbCc7XG5pbXBvcnQgeyBGaWVsZEltcGwgfSBmcm9tICcuLi8uLi9JbXBsL0ZpZWxkSW1wbCc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi8uLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi9EYXRhU291cmNlU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY29uc3QgU0VOVElORUxfTE9HSUNBTF9UQUJMRV9JTkZPOiBMb2dpY2FsVGFibGVJbmZvID0ge1xuICBpZDogSW50ZXJuYWxDb250cmFjdC5BcGlTaG93RGF0YVRhYmxlU2VudGluZWwuU2luZ2xlVGFibGVJZCxcbiAgY2FwdGlvbjogSW50ZXJuYWxDb250cmFjdC5BcGlTaG93RGF0YVRhYmxlU2VudGluZWwuU2luZ2xlVGFibGVDYXB0aW9uLFxufTtcblxuLy8gVGhlIG1pbmltdW0gcGxhdGZvcm0gdmVyc2lvbiB3aGVuIE9iamVjdCBNb2RlbCB3YXMgc3VwcG9ydGVkXG5jb25zdCBwbGF0Zm9ybVZlcnNpb25PYmplY3RNb2RlbFN1cHBvcnQgPSB7IG1ham9yOiAxLCBtaW5vcjogMjAsIGZpeDogMSB9O1xuXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgRGF0YVNvdXJjZVNlcnZpY2Uge1xuICAvLyBTaW5jZSBPYmplY3QgTW9kZWwgaXMgc3VwcG9ydGVkIHNpbmNlIFRhYmxlYXUgMjAyMC4yLCBEYXRhU291cmNlU2VydmljZUltcGwgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggdGhlXG4gIC8vIHBsYXRmb3JtIHZlcnNpb24gd2hlbiBPTSB3YXMgc3VwcG9ydGVkLiBPbmNlIHdlIGRyb3Agc3VwcG9ydCBmb3IgVGFibGVhdSB2ZXJzaW9ucyA8PSAyMDIwLjEsIGFsbCBhZGRpdGlvbmFsXG4gIC8vIGNvZGUgaW4gaGVyZSBmb3IgT2JqZWN0IE1vZGVsIGNhbiBiZSByZW1vdmVkLlxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICAgIHJlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF9wbGF0Zm9ybVZlcnNpb246IEludGVybmFsQ29udHJhY3QuVmVyc2lvbk51bWJlciA9IHBsYXRmb3JtVmVyc2lvbk9iamVjdE1vZGVsU3VwcG9ydCxcbiAgKSB7XG4gICAgc3VwZXIoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCk7XG4gIH1cbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuRGF0YVNvdXJjZVNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaEFzeW5jKGRhdGFTb3VyY2VJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdyZWZyZXNoQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkRlbHRhVGltZU1zXTogMCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaG91bGRSZWZyZXNoRFNdOiB0cnVlLFxuICAgIH07XG5cbiAgICAvLyBPbiBzZXJ2ZXI6IE5vdCBwYXNzaW5nIHRoZSBkYXRhc291cmNlIGlkIHdpbGwgcmVmcmVzaCBhbGwgZGF0YXNvdXJjZXMuXG4gICAgaWYgKGRhdGFTb3VyY2VJZCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5EYXRhU291cmNlSWRdID0gZGF0YVNvdXJjZUlkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlJlZnJlc2hEYXRhU291cmNlLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZVRhYmxlc0FzeW5jKGRhdGFTb3VyY2VJZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxUYWJsZUluZm8+PiB7XG4gICAgY29uc3Qgam9pblBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRBY3RpdmVUYWJsZXNBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuRGF0YVNvdXJjZUlkXTogZGF0YVNvdXJjZUlkLFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0YWJsZXMgdXNlZCBieSB0aGlzIGNvbm5lY3Rpb25cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRBY3RpdmVUYWJsZXMsIGpvaW5QYXJhbWV0ZXJzKS50aGVuPEFycmF5PFRhYmxlSW5mbz4+KChqb2luUmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlSW5mb3MgPSBqb2luUmVzcG9uc2UucmVzdWx0IGFzIFRhYmxlSW5mb3M7XG5cbiAgICAgIC8vIGdldEFjdGl2ZVRhYmxlcyBpcyB1bnN1cHBvcnRlZCBmb3IgY3ViZXMgYW5kIEdBLiBXZSBkbyBub3QgaGF2ZSBhIGNvbm5lY3Rpb24gdHlwZSBwcm9wZXJ0eVxuICAgICAgLy8gYXZhaWxhYmxlIGZyb20gdGhlIHBsYXRmb3JtIChpbnRlbnRpb25hbGx5LCB0byByZWR1Y2UgY29kZSBjaHVybiBhcyBuZXcgY29ubmVjdGlvbnMgYXJlIGFkZGVkKS5cbiAgICAgIC8vIEluc3RlYWQsanVzdCBjaGVjayBpZiBhbnkgdGFibGVzIGFyZSByZXR1cm5lZC4gVGhpcyBhcnJheSB3aWxsIGJlIGVtcHR5IGZvciBhbnkgbm9uLXRhYmxlIGJhc2VkIGRhdGFzb3VyY2UuXG4gICAgICBpZiAodGFibGVJbmZvcy50YWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5VbnN1cHBvcnRlZE1ldGhvZEZvckRhdGFTb3VyY2VUeXBlLCBgZ2V0QWN0aXZlVGFibGVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yOiAke2RhdGFTb3VyY2VJZH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhYmxlSW5mb3MudGFibGVzO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFTb3VyY2VzQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxEYXRhU2NoZW1hPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldERhdGFTb3VyY2VzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXREYXRhU291cmNlcywgcGFyYW1ldGVycykudGhlbjxEYXRhU2NoZW1hPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTY2hlbWEgPSByZXNwb25zZS5yZXN1bHQgYXMgRGF0YVNjaGVtYTtcbiAgICAgIHJldHVybiBkYXRhU2NoZW1hO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEFsbERhdGFTb3VyY2VzQXN5bmMoKTogUHJvbWlzZTxEYXRhU2NoZW1hPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldEFsbERhdGFTb3VyY2VzQXN5bmMnLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0QWxsRGF0YVNvdXJjZXMsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVNjaGVtYT4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhU2NoZW1hID0gcmVzcG9uc2UucmVzdWx0IGFzIERhdGFTY2hlbWE7XG4gICAgICByZXR1cm4gZGF0YVNjaGVtYTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0aW9uU3VtbWFyaWVzQXN5bmMoZGF0YVNvdXJjZUlkOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25EZXNjcmlwdGlvblN1bW1hcnlbXT4ge1xuICAgIGNvbnN0IHBhcmFtczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldENvbm5lY3Rpb25TdW1tYXJpZXNBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuRGF0YVNvdXJjZUlkXTogZGF0YVNvdXJjZUlkLFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0YWJsZXMgdXNlZCBieSB0aGlzIGNvbm5lY3Rpb25cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRDb25uZWN0aW9uRGVzY3JpcHRpb25TdW1tYXJpZXMsIHBhcmFtcykudGhlbjxDb25uZWN0aW9uRGVzY3JpcHRpb25TdW1tYXJ5W10+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25TdW1tYXJpZXMgPSByZXNwb25zZS5yZXN1bHQgYXMgQ29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyeVtdO1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uU3VtbWFyaWVzO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEZpZWxkQXN5bmMoZ2xvYmFsZmllbGROYW1lOiBzdHJpbmcpOiBQcm9taXNlPENvbnRyYWN0LkZpZWxkPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5HZXRGaWVsZEFuZERhdGFTb3VyY2U7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldEZpZWxkQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkZpZWxkSWRdOiBnbG9iYWxmaWVsZE5hbWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxDb250cmFjdC5GaWVsZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gcmVzcG9uc2UucmVzdWx0W1BhcmFtZXRlcklkLkRhdGFTb3VyY2VdIGFzIEludGVybmFsQ29udHJhY3QuRGF0YVNvdXJjZTtcbiAgICAgIGNvbnN0IGZpZWxkID0gcmVzcG9uc2UucmVzdWx0W1BhcmFtZXRlcklkLkZpZWxkXSBhcyBGaWVsZDtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGaWVsZChmaWVsZCwgdGhpcy5jb252ZXJ0RGF0YVNvdXJjZShkYXRhU291cmNlKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9naWNhbFRhYmxlc0FzeW5jKGRhdGFTb3VyY2VJZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxMb2dpY2FsVGFibGVJbmZvPj4ge1xuICAgIGlmICghdGhpcy5pc09iamVjdE1vZGVsU3VwcG9ydGVkQnlQbGF0Zm9ybSgpKSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgc2VudGluZWwgSUQgY2FuIGJlIHBhc3NlZCB0byBkYXRhc291cmNlLmdldExvZ2ljYWxUYWJsZURhdGEuXG4gICAgICAgKiBPbmNlIHRoZSBkZXNrdG9wIGlzIHVwZ3JhZGVkIHRvIGEgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIG9iamVjdCBtb2RlbCxcbiAgICAgICAqIHRoZSBzZW50aW5lbCBJRCB3aWxsIGF1dG9tYXRpY2FsbHkgZmV0Y2ggdGhlIHVwZ3JhZGVkIHRhYmxlLlxuICAgICAgICogKi9cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxBcnJheTxMb2dpY2FsVGFibGVJbmZvPj4oKHJlc29sdmUpID0+IHJlc29sdmUoW1NFTlRJTkVMX0xPR0lDQUxfVEFCTEVfSU5GT10pKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRMb2dpY2FsVGFibGVzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFTb3VyY2VJZF06IGRhdGFTb3VyY2VJZCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldExvZ2ljYWxUYWJsZXMsIHBhcmFtcykudGhlbjxBcnJheTxMb2dpY2FsVGFibGVJbmZvPj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PExvZ2ljYWxUYWJsZUluZm8+O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdUYWJsZXNBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQpOiBQcm9taXNlPEFycmF5PExvZ2ljYWxUYWJsZUluZm8+PiB7XG4gICAgaWYgKCF0aGlzLmlzT2JqZWN0TW9kZWxTdXBwb3J0ZWRCeVBsYXRmb3JtKCkpIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBzZW50aW5lbCBJRCBjYW4gYmUgcGFzc2VkIHRvIHdvcmtzaGVldC5nZXRVbmRlcmx5aW5nVGFibGVEYXRhLlxuICAgICAgICogT25jZSB0aGUgZGVza3RvcCBpcyB1cGdyYWRlZCB0byBhIHZlcnNpb24gdGhhdCBzdXBwb3J0cyBvYmplY3QgbW9kZWwsXG4gICAgICAgKiB0aGUgc2VudGluZWwgSUQgd2lsbCBhdXRvbWF0aWNhbGx5IGZldGNoIHRoZSB1cGdyYWRlZCB0YWJsZS5cbiAgICAgICAqICovXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8QXJyYXk8TG9naWNhbFRhYmxlSW5mbz4+KChyZXNvbHZlKSA9PiByZXNvbHZlKFtTRU5USU5FTF9MT0dJQ0FMX1RBQkxFX0lORk9dKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0VW5kZXJseWluZ1RhYmxlc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0VW5kZXJseWluZ1RhYmxlcywgcGFyYW1zKS50aGVuPEFycmF5PExvZ2ljYWxUYWJsZUluZm8+PigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQgYXMgQXJyYXk8TG9naWNhbFRhYmxlSW5mbz47XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGaWVsZChmaWVsZDogSW50ZXJuYWxDb250cmFjdC5GaWVsZCwgZGF0YVNvdXJjZTogQ29udHJhY3QuRGF0YVNvdXJjZSk6IENvbnRyYWN0LkZpZWxkIHtcbiAgICByZXR1cm4gbmV3IEZpZWxkKG5ldyBGaWVsZEltcGwoZmllbGQsIGRhdGFTb3VyY2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGFTb3VyY2UoZGF0YVNvdXJjZTogSW50ZXJuYWxDb250cmFjdC5EYXRhU291cmNlKTogQ29udHJhY3QuRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU291cmNlKG5ldyBEYXRhU291cmNlSW1wbChkYXRhU291cmNlLCB0aGlzLl9yZWdpc3RyeUlkKSk7XG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0TW9kZWxTdXBwb3J0ZWRCeVBsYXRmb3JtKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbk5vT2JqZWN0TW9kZWxTdXBwb3J0ID0geyBtYWpvcjogMSwgbWlub3I6IDEzLCBmaXg6IDAgfTtcbiAgICByZXR1cm4gSW50ZXJuYWxDb250cmFjdC5WZXJzaW9uTGVzc1RoYW4ocGxhdGZvcm1WZXJzaW9uTm9PYmplY3RNb2RlbFN1cHBvcnQsIHRoaXMuX3BsYXRmb3JtVmVyc2lvbik7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICBFeHBvcnRDcm9zc3RhYlNoZWV0TWFwLFxuICBFeHBvcnRGaWxlLFxuICBFeHBvcnRQREZPcHRpb25zIGFzIEludGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgUGFyYW1ldGVySWQsXG4gIFZlcmJJZCxcbiAgVmlzdWFsSWQsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBDcm9zc3RhYkZpbGVGb3JtYXQsXG4gIEV4cG9ydERhdGFPcHRpb25zLFxuICBFeHBvcnRQREZPcHRpb25zIGFzIEV4dGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgRXhwb3J0U2NlbmFyaW9zRm9yUERGQW5kUG93ZXJQb2ludCxcbiAgU2hhcmVkRXJyb3JDb2RlcyxcbiAgU2hlZXRUeXBlIGFzIEV4dGVybmFsU2hlZXRUeXBlLFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi4vLi4vRW51bU1hcHBpbmdzL0V4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQgeyBFeHBvcnRIZWxwZXJzIH0gZnJvbSAnLi4vLi4vVXRpbHMvRXhwb3J0SGVscGVycyc7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vRXhwb3J0U2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uLy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIEV4cG9ydFNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5FeHBvcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwb3J0Q3Jvc3N0YWJTaGVldE1hcEFzeW5jKGN1cnJlbnRTaGVldFR5cGU6IEV4dGVybmFsU2hlZXRUeXBlKTogUHJvbWlzZTxFeHBvcnRDcm9zc3RhYlNoZWV0TWFwPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5HZXRFeHBvcnRDcm9zc3RhYlNoZWV0TWFwO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRFeHBvcnRDcm9zc3RhYlNoZWV0TWFwQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkN1cnJlbnRTaGVldFR5cGVdOiBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hlZXRUeXBlLmNvbnZlcnQoY3VycmVudFNoZWV0VHlwZSksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48RXhwb3J0Q3Jvc3N0YWJTaGVldE1hcD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgRXhwb3J0Q3Jvc3N0YWJTaGVldE1hcDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhwb3J0Q3Jvc3N0YWJBc3luYyhcbiAgICBzaGVldE5hbWU6IHN0cmluZyxcbiAgICBmb3JtYXQ6IENyb3NzdGFiRmlsZUZvcm1hdCxcbiAgICBleHBvcnRhYmxlV29ya3NoZWV0TmFtZXM6IEFycmF5PHN0cmluZz4sXG4gICAgY3VycmVudFNoZWV0VHlwZTogRXh0ZXJuYWxTaGVldFR5cGUsXG4gICk6IFByb21pc2U8RXhwb3J0RmlsZT4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlTaGVldE5hbWUoZXhwb3J0YWJsZVdvcmtzaGVldE5hbWVzLCBzaGVldE5hbWUpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8Q3Jvc3N0YWJGaWxlRm9ybWF0Pihmb3JtYXQsIENyb3NzdGFiRmlsZUZvcm1hdCwgJ0Nyb3NzdGFiRmlsZUZvcm1hdCcpO1xuXG4gICAgLy8gVGhlIHByZXMgbGF5ZXIgY29tbWFuZCBmb3IgZXhwb3J0aW5nIENyb3NzdGFiIHVzZXMgU2ltcGxlU2hlZXRJZGVudGlmaWVycyBpbnN0ZWFkIG9mIHNoZWV0IG5hbWVzLlxuICAgIC8vIFRoZSBleHRlbnNpb25zLWFuZC1lbWJlZGRpbmctYXBpIGN1cnJlbnQgZG9lcyBub3Qgc3RvcmUgcmVmZXJlbmNlcyB0byB0aGUgU2ltcGxlU2hlZXRJZGVudGlmaWVycyBvZiBpdHMgc2hlZXRzXG4gICAgLy8gc28gd2UgY2FsbCBhIHByZXMgbGF5ZXIgY29tbWFuZCB0aGF0IGdpdmVzIHVzIHRoZSBTaW1wbGVTaGVldElkZW50aWZpZXIgZm9yIGVhY2ggc2hlZXQgbmFtZSB0aGF0IGFwcGVhcnMgaW4gdGhlXG4gICAgLy8gZXhwb3J0IENyb3NzdGFiIGRpYWxvZyBwb3B1cC5cbiAgICBjb25zdCBzaGVldE5hbWVUb0lkTWFwID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRDcm9zc3RhYlNoZWV0TWFwQXN5bmMoY3VycmVudFNoZWV0VHlwZSk7XG4gICAgaWYgKCFzaGVldE5hbWVUb0lkTWFwW3NoZWV0TmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnbWlzc2luZyBzaGVldCBkb2MgaWQgZnJvbSBzaGVldE1hcCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdleHBvcnRDcm9zc3RhYkFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaGVldElkZW50aWZpZXJdOiBzaGVldE5hbWVUb0lkTWFwW3NoZWV0TmFtZV0sXG4gICAgICBbUGFyYW1ldGVySWQuU2VuZE5vdGlmaWNhdGlvbnNdOiB0cnVlLCAvLyBzZW5kIG5vdGlmaWNhdGlvbiBvbiBwcmVzIGxheWVyIHRoYXQgdHJpZ2dlcnMgZmlsZSBkb3dubG9hZFxuICAgIH07XG5cbiAgICAvLyBwcmVzIGxheWVyIGNvbW1hbmQgaW52b2tlZCBkZXBlbmRzIG9uIHRoZSBjcm9zc3RhYiBmaWxlIGZvcm1hdFxuICAgIGxldCB2ZXJiO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIENyb3NzdGFiRmlsZUZvcm1hdC5DU1Y6XG4gICAgICAgIHZlcmIgPSBWZXJiSWQuRXhwb3J0Q3Jvc3N0YWJDc3ZEb3dubG9hZDtcbiAgICAgICAgLy8gQ1NWIG9ubHkgcGFyYW1ldGVyOiBzZWUgYnJvd3Nlci1jbGllbnRzL2V4cG9ydC1jcm9zc3RhYi1vcHRpb25zLWRpYWxvZyByZXBvXG4gICAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVXNlVGFiRGVsaW1pdGVyc10gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ3Jvc3N0YWJGaWxlRm9ybWF0LkV4Y2VsOlxuICAgICAgICB2ZXJiID0gVmVyYklkLkV4cG9ydENyb3NzdGFiRXhjZWxEb3dubG9hZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ3Vuc3VwcG9ydGVkIENyb3NzdGFiIGZpbGUgZm9ybWF0LicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycylcbiAgICAgIC50aGVuPEV4cG9ydEZpbGU+KChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgRXhwb3J0RmlsZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuQ3Jvc3N0YWJDcmVhdGlvbkVycm9yLCAnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZW5lcmF0aW5nIHRoZSBkb2N1bWVudC4nKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGV4cG9ydERhdGFBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQsIG9wdGlvbnM6IEV4cG9ydERhdGFPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUV4cG9ydERhdGFPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gUmVtb3ZlIGFueSBkdXBsaWNhdGVzIGZyb20gdGhlIGlucHV0IGFycmF5XG4gICAgY29uc3QgY29sdW1uc0FzU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQob3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCk7XG4gICAgY29uc3QgY29sdW1uc1RvSW5jbHVkZUJ5SWQgPSBBcnJheS5mcm9tKGNvbHVtbnNBc1NldCk7XG5cbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkV4cG9ydERhdGFEb3dubG9hZDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZXhwb3J0RGF0YUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZUFsaWFzZXNdOiBvcHRpb25zLmlnbm9yZUFsaWFzZXMgPz8gZmFsc2UsXG4gICAgICBbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZUJ5SWRdOiBjb2x1bW5zVG9JbmNsdWRlQnlJZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKVxuICAgICAgLnRoZW48dm9pZD4oKCkgPT4ge30pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuRGF0YUNyZWF0aW9uRXJyb3IsICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIHdoaWxlIGdlbmVyYXRpbmcgdGhlIGRvY3VtZW50LicpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0UG93ZXJQb2ludEFzeW5jKHNoZWV0TmFtZXM6IEFycmF5PHN0cmluZz4sIGV4cG9ydFNjZW5hcmlvczogRXhwb3J0U2NlbmFyaW9zRm9yUERGQW5kUG93ZXJQb2ludCk6IFByb21pc2U8RXhwb3J0RmlsZT4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlTaGVldE5hbWVzRm9yUERGQW5kUFBUKHNoZWV0TmFtZXMsIGV4cG9ydFNjZW5hcmlvcyk7XG5cbiAgICAvLyBOb3RlOiB0aGUgRXhwb3J0T3JpZ2luVXJsIHBhcmFtIGlzIGxpc3RlZCBhcyBvcHRpb25hbCBmb3IgdGhlIHByZXMgbGF5ZXIgY29tbWFuZCB3ZSBhcmUgaW52b2tpbmc7IGhvd2V2ZXIsXG4gICAgLy8gcmVjZW50IGNoYW5nZXMgd2VyZSBtYWRlIHRoYXQgZW5mb3JjZWQgdGhlIHVzZSBvZiB0aGUgZW1wdHkgc3RyaW5nIHdoZW4gaW52b2tpbmcgdGhpcyBjb21tYW5kIHdpdGggbm8gRXhwb3J0T3JpZ2luVXJsLlxuICAgIC8vIHNlZSBicm93c2VyLWNsaWVudHMvZXhwb3J0LXBvd2VycG9pbnQtb3B0aW9ucy1kaWFsb2cgcmVwby5cbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkV4cG9ydFBvd2VycG9pbnREb3dubG9hZDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZXhwb3J0UG93ZXJQb2ludEFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5FeHBvcnRPcmlnaW5VcmxdOiAnJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TZWxlY3RlZFNoZWV0TmFtZXNdOiBzaGVldE5hbWVzLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpXG4gICAgICAudGhlbjxFeHBvcnRGaWxlPigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IGFzIEV4cG9ydEZpbGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgICBTaGFyZWRFcnJvckNvZGVzLlBvd2VyUG9pbnRDcmVhdGlvbkVycm9yLFxuICAgICAgICAgICdBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUgdGhlIFBvd2VyUG9pbnQgZmlsZS4nLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhwb3J0UERGQXN5bmMoXG4gICAgc2hlZXROYW1lczogQXJyYXk8c3RyaW5nPixcbiAgICBleHRlcm5hbEV4cG9ydFBkZk9wdGlvbnM6IEV4dGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgICBleHBvcnRTY2VuYXJpb3M6IEV4cG9ydFNjZW5hcmlvc0ZvclBERkFuZFBvd2VyUG9pbnQsXG4gICk6IFByb21pc2U8RXhwb3J0RmlsZT4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFeHBvcnRQREZPcHRpb25zKGV4dGVybmFsRXhwb3J0UGRmT3B0aW9ucyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVNoZWV0TmFtZXNGb3JQREZBbmRQUFQoc2hlZXROYW1lcywgZXhwb3J0U2NlbmFyaW9zKTtcblxuICAgIGNvbnN0IGludGVybmFsRXhwb3J0UGRmT3B0aW9uczogSW50ZXJuYWxFeHBvcnRQREZPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRQREZPcHRpb25zQXN5bmMoKTtcbiAgICBFeHBvcnRIZWxwZXJzLnVwZGF0ZUludGVybmFsRXhwb3J0UERGT3B0aW9ucyhpbnRlcm5hbEV4cG9ydFBkZk9wdGlvbnMsIGV4dGVybmFsRXhwb3J0UGRmT3B0aW9ucywgc2hlZXROYW1lcyk7XG5cbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkV4cG9ydFBkZkRvd25sb2FkO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdleHBvcnRQREZBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuRXhwb3J0UGRmT3B0aW9uc106IGludGVybmFsRXhwb3J0UGRmT3B0aW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKVxuICAgICAgLnRoZW48RXhwb3J0RmlsZT4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBFeHBvcnRGaWxlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5QREZDcmVhdGlvbkVycm9yLCAnVW5hYmxlIHRvIGNyZWF0ZSBQREYgYmVjYXVzZSBzb21ldGhpbmcgd2VudCB3cm9uZy4gVHJ5IGFnYWluLicpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwb3J0UERGT3B0aW9uc0FzeW5jKCk6IFByb21pc2U8SW50ZXJuYWxFeHBvcnRQREZPcHRpb25zPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5HZXRFeHBvcnRQZGZPcHRpb25zO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRFeHBvcnRQZGZPcHRpb25zQXN5bmMnLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPEludGVybmFsRXhwb3J0UERGT3B0aW9ucz4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgSW50ZXJuYWxFeHBvcnRQREZPcHRpb25zO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBpTWVudVR5cGUsIENvbnRleHRNZW51T3B0aW9ucyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeHRlcm5hbENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4uL0V4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbENvbnRleHRNZW51U2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBFeHRlcm5hbENvbnRleHRNZW51U2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLkV4dGVybmFsQ29udGV4dE1lbnU7XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kQ29udGV4dE1lbnVBc3luYyhzaGVldE5hbWU6IHN0cmluZywgdGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIGNvbmZpZzogQ29udGV4dE1lbnVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkFwcGVuZEV4dGVybmFsTWVudUl0ZW07XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2FwcGVuZENvbnRleHRNZW51QXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLldvcmtzaGVldE5hbWVdOiBzaGVldE5hbWUsXG4gICAgICBbUGFyYW1ldGVySWQuRXh0ZXJuYWxNZW51SXRlbURpc3BsYXlOYW1lXTogY29uZmlnLmRpc3BsYXlOYW1lLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IG5ld01lbnVJdGVtSWQgPSByZXNwb25zZS5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgcmV0dXJuIG5ld01lbnVJdGVtSWQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29udGV4dE1lbnVBc3luYyhzaGVldE5hbWU6IHN0cmluZywgdGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIG1lbnVJdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuUmVtb3ZlRXh0ZXJuYWxNZW51SXRlbTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmVtb3ZlQ29udGV4dE1lbnVBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuV29ya3NoZWV0TmFtZV06IHNoZWV0TmFtZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5FeHRlcm5hbE1lbnVJdGVtSWRdOiBtZW51SXRlbUlkLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZUNvbnRleHRNZW51QXN5bmMoc2hlZXROYW1lOiBzdHJpbmcsIHRhcmdldE1lbnU6IEFwaU1lbnVUeXBlLCBtZW51SXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkV4ZWN1dGVFeHRlcm5hbE1lbnVJdGVtO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdleGVjdXRlQ29udGV4dE1lbnVBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuV29ya3NoZWV0TmFtZV06IHNoZWV0TmFtZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5FeHRlcm5hbE1lbnVJdGVtSWRdOiBtZW51SXRlbUlkLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVuYW1lQ29udGV4dE1lbnVBc3luYyhzaGVldE5hbWU6IHN0cmluZywgdGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIG1lbnVIZWFkZXI6IHN0cmluZywgbWVudURlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLlJlbmFtZUV4dGVybmFsTWVudTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmVuYW1lQ29udGV4dE1lbnVBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuV29ya3NoZWV0TmFtZV06IHNoZWV0TmFtZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5FeHRlcm5hbE1lbnVIZWFkZXJdOiBtZW51SGVhZGVyLFxuICAgICAgW1BhcmFtZXRlcklkLkV4dGVybmFsTWVudURlc2NyaXB0aW9uXTogbWVudURlc2NyaXB0aW9uLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBEYXRlUmFuZ2VUeXBlLFxuICBFbWJlZGRpbmdFcnJvckNvZGVzLFxuICBFcnJvckNvZGVzLFxuICBGaWx0ZXJEb21haW5UeXBlLFxuICBGaWx0ZXJUeXBlIGFzIEV4dGVybmFsRmlsdGVyVHlwZSxcbiAgU2hhcmVkRXJyb3JDb2Rlcyxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCAqIGFzIEludGVybmFsQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBGaWx0ZXJUeXBlLCBQYXJhbWV0ZXJJZCwgVmVyYklkLCBWaXN1YWxJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9BcGlTaGFyZWQnO1xuaW1wb3J0IHsgRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzIGFzIEV4dGVybmFsRW51bUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL0VudW1NYXBwaW5ncy9FeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHsgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIGFzIEludGVybmFsRW51bUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHtcbiAgQ2F0ZWdvcmljYWxEb21haW4sXG4gIENhdGVnb3JpY2FsRmlsdGVyLFxuICBIaWVyYXJjaGljYWxEYXRhVmFsdWUsXG4gIEhpZXJhcmNoaWNhbEZpbHRlcixcbiAgSGllcmFyY2hpY2FsTGV2ZWxEZXRhaWwsXG4gIFJhbmdlRG9tYWluLFxuICBSYW5nZUZpbHRlcixcbiAgUmVsYXRpdmVEYXRlRmlsdGVyLFxufSBmcm9tICcuLi8uLi9Nb2RlbHMvRmlsdGVyTW9kZWxzJztcbmltcG9ydCB7IERhdGFWYWx1ZSB9IGZyb20gJy4uLy4uL01vZGVscy9HZXREYXRhTW9kZWxzJztcbmltcG9ydCB7IERhdGFWYWx1ZUZhY3RvcnkgfSBmcm9tICcuLi8uLi9VdGlscy9EYXRhVmFsdWVGYWN0b3J5JztcbmltcG9ydCB7IFBhcmFtIH0gZnJvbSAnLi4vLi4vVXRpbHMvUGFyYW0nO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL0ZpbHRlclNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgRmlsdGVyU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLkZpbHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlckFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IEFycmF5PHN0cmluZz4sXG4gICAgdXBkYXRlVHlwZTogQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSxcbiAgICBmaWx0ZXJPcHRpb25zOiBDb250cmFjdC5GaWx0ZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuQXBwbHlDYXRlZ29yaWNhbEZpbHRlcjtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYXBwbHlGaWx0ZXJBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHZpc3VhbElkO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGROYW1lXSA9IGZpZWxkTmFtZTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICd2YWx1ZXMgcGFyYW1ldGVyIGZvciBhcHBseUZpbHRlckFzeW5jIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJWYWx1ZXNdID0gdmFsdWVzO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyVXBkYXRlVHlwZV0gPSBFeHRlcm5hbEVudW1Db252ZXJ0ZXIuZmlsdGVyVXBkYXRlVHlwZS5jb252ZXJ0KHVwZGF0ZVR5cGUpO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuSXNFeGNsdWRlTW9kZV0gPVxuICAgICAgZmlsdGVyT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlck9wdGlvbnMuaXNFeGNsdWRlTW9kZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBmaWx0ZXJPcHRpb25zLmlzRXhjbHVkZU1vZGU7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZE5hbWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlSYW5nZUZpbHRlckFzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCwgZmllbGROYW1lOiBzdHJpbmcsIGZpbHRlck9wdGlvbnM6IENvbnRyYWN0LlJhbmdlRmlsdGVyT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5BcHBseVJhbmdlRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhcHBseVJhbmdlRmlsdGVyQXN5bmMnLFxuICAgIH07XG5cbiAgICBpZiAoZmlsdGVyT3B0aW9ucy5taW4gIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJPcHRpb25zLm1pbiAhPT0gbnVsbCkge1xuICAgICAgbGV0IG1pbjogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgaWYgKGZpbHRlck9wdGlvbnMubWluIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBtaW4gPSBQYXJhbS5zZXJpYWxpemVEYXRlRm9yUGxhdGZvcm0oZmlsdGVyT3B0aW9ucy5taW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluID0gZmlsdGVyT3B0aW9ucy5taW47XG4gICAgICB9XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpbHRlclJhbmdlTWluXSA9IG1pbjtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyT3B0aW9ucy5tYXggIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJPcHRpb25zLm1heCAhPT0gbnVsbCkge1xuICAgICAgbGV0IG1heDogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgaWYgKGZpbHRlck9wdGlvbnMubWF4IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBtYXggPSBQYXJhbS5zZXJpYWxpemVEYXRlRm9yUGxhdGZvcm0oZmlsdGVyT3B0aW9ucy5tYXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4ID0gZmlsdGVyT3B0aW9ucy5tYXg7XG4gICAgICB9XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpbHRlclJhbmdlTWF4XSA9IG1heDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbnVsbCBvcHRpb24gaXMgdXNlZCB3aXRoIG1pbittYXggZm9yICdpbmNsdWRlLXJhbmdlJyBvciAnaW5jbHVkZS1yYW5nZS1vci1udWxsJ1xuICAgIGlmIChmaWx0ZXJPcHRpb25zLm51bGxPcHRpb24pIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyUmFuZ2VOdWxsT3B0aW9uXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5udWxsT3B0aW9ucy5jb252ZXJ0KGZpbHRlck9wdGlvbnMubnVsbE9wdGlvbik7XG4gICAgfVxuXG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZE5hbWVdID0gZmllbGROYW1lO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0gdmlzdWFsSWQ7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuYXBpRmlsdGVySGFuZGxlckNoZWNrRm9yQ29tbWFuZEVycm9yKHJlc3BvbnNlLnJlc3VsdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTtcbiAgICAgIHJldHVybiBmaWVsZE5hbWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBBcnJheTxzdHJpbmc+IHwgQ29udHJhY3QuSGllcmFyY2hpY2FsTGV2ZWxzLFxuICAgIHVwZGF0ZVR5cGU6IENvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUsXG4gICAgZmlsdGVyT3B0aW9uczogQ29udHJhY3QuRmlsdGVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkhpZXJhcmNoaWNhbEZpbHRlcjtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHZpc3VhbElkO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGROYW1lXSA9IGZpZWxkTmFtZTtcblxuICAgIGNvbnN0IGhpZXJhcmNoaWNhbExldmVscyA9ICh2YWx1ZXMgYXMgQ29udHJhY3QuSGllcmFyY2hpY2FsTGV2ZWxzKS5sZXZlbHM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoaWVyYXJjaGljYWxMZXZlbHMpICYmIGhpZXJhcmNoaWNhbExldmVscy5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpbHRlckxldmVsc10gPSBoaWVyYXJjaGljYWxMZXZlbHM7XG4gICAgfSBlbHNlIGlmICgodmFsdWVzIGFzIEFycmF5PFN0cmluZz4pLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyVmFsdWVzXSA9IHZhbHVlcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIHNlcnZlciBjb21tYW5kIGV4cGVjdHMgZW1wdHkgbGlzdCBmb3IgY2xlYXJpbmcgdGhlIGZpbHRlclxuICAgICAgLy8gaXQgYWxzbyBleHBlY3RzIGVpdGhlcnMgRmlsdGVyTGV2ZWxzIG9yIEZpbHRlclZhbHVlcyB0byBiZSBzZXRcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyTGV2ZWxzXSA9IFtdO1xuICAgIH1cblxuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyVXBkYXRlVHlwZV0gPSBFeHRlcm5hbEVudW1Db252ZXJ0ZXIuZmlsdGVyVXBkYXRlVHlwZS5jb252ZXJ0KHVwZGF0ZVR5cGUpO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuSXNFeGNsdWRlTW9kZV0gPSBmaWx0ZXJPcHRpb25zICYmICEhZmlsdGVyT3B0aW9ucy5pc0V4Y2x1ZGVNb2RlO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPHN0cmluZz4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gZmllbGROYW1lO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFyRmlsdGVyQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkLCBmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5DbGVhckZpbHRlcjtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnY2xlYXJGaWx0ZXJBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHZpc3VhbElkO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGROYW1lXSA9IGZpZWxkTmFtZTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9zbmUpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZE5hbWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlSZWxhdGl2ZURhdGVGaWx0ZXJBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQsIGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zOiBDb250cmFjdC5SZWxhdGl2ZURhdGVGaWx0ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5BcHBseVJlbGF0aXZlRGF0ZUZpbHRlcjtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYXBwbHlSZWxhdGl2ZURhdGVGaWx0ZXJBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHZpc3VhbElkO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGROYW1lXSA9IGZpZWxkTmFtZTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlBlcmlvZFR5cGVdID0gRXh0ZXJuYWxFbnVtQ29udmVydGVyLnBlcmlvZFR5cGUuY29udmVydChvcHRpb25zLnBlcmlvZFR5cGUpO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRGF0ZVJhbmdlVHlwZV0gPSBFeHRlcm5hbEVudW1Db252ZXJ0ZXIuZGF0ZVJhbmdlVHlwZS5jb252ZXJ0KG9wdGlvbnMucmFuZ2VUeXBlKTtcbiAgICBpZiAob3B0aW9ucy5yYW5nZVR5cGUgPT09IERhdGVSYW5nZVR5cGUuTGFzdE4gfHwgb3B0aW9ucy5yYW5nZVR5cGUgPT09IERhdGVSYW5nZVR5cGUuTmV4dE4pIHtcbiAgICAgIGlmIChvcHRpb25zLnJhbmdlTiA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMucmFuZ2VOID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICAgICAgRW1iZWRkaW5nRXJyb3JDb2Rlcy5NaXNzaW5nUmFuZ2VORm9yUmVsYXRpdmVEYXRlRmlsdGVycyxcbiAgICAgICAgICAnTWlzc2luZyByYW5nZU4gZmllbGQgZm9yIGEgcmVsYXRpdmUgZGF0ZSBmaWx0ZXIgb2YgTEFTVE4gb3IgTkVYVE4uJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuUmFuZ2VOXSA9IG9wdGlvbnMucmFuZ2VOO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFuY2hvckRhdGUgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmFuY2hvckRhdGUgIT09IG51bGwpIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuQW5jaG9yRGF0ZV0gPSB0aGlzLmNvbnZlcnRBbmNob3JEYXRlKG9wdGlvbnMuYW5jaG9yRGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPHN0cmluZz4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0IGFzIHN0cmluZztcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJzQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5GaWx0ZXI+PiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5HZXRGaWx0ZXJzO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRGaWx0ZXJzQXN5bmMnLFxuICAgIH07XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5WaXN1YWxJZF0gPSB2aXN1YWxJZDtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48QXJyYXk8Q29udHJhY3QuRmlsdGVyPj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PEludGVybmFsQ29udHJhY3QuRmlsdGVyPjtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnREb21haW5GaWx0ZXJzKGZpbHRlcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENhdGVnb3JpY2FsRG9tYWluQXN5bmMoXG4gICAgd29ya3NoZWV0TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkSWQ6IHN0cmluZyxcbiAgICBkb21haW5UeXBlOiBGaWx0ZXJEb21haW5UeXBlLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5HZXRDYXRlZ29yaWNhbERvbWFpbjtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0Q2F0ZWdvcmljYWxEb21haW5Bc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHtcbiAgICAgIHdvcmtzaGVldDogd29ya3NoZWV0TmFtZSxcbiAgICB9O1xuXG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZElkXSA9IGZpZWxkSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5Eb21haW5UeXBlXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5maWx0ZXJEb21haW5UeXBlLmNvbnZlcnQoZG9tYWluVHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGRvbWFpbiA9IHJlc3BvbnNlLnJlc3VsdCBhcyBJbnRlcm5hbENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluO1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydENhdGVnb3JpY2FsRG9tYWluKGRvbWFpbiwgZG9tYWluVHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmFuZ2VEb21haW5Bc3luYyh3b3Jrc2hlZXROYW1lOiBzdHJpbmcsIGZpZWxkSWQ6IHN0cmluZywgZG9tYWluVHlwZTogRmlsdGVyRG9tYWluVHlwZSk6IFByb21pc2U8Q29udHJhY3QuUmFuZ2VEb21haW4+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldFJhbmdlRG9tYWluO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRSYW5nZURvbWFpbkFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0ge1xuICAgICAgd29ya3NoZWV0OiB3b3Jrc2hlZXROYW1lLFxuICAgIH07XG5cbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpZWxkSWRdID0gZmllbGRJZDtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkRvbWFpblR5cGVdID0gRXh0ZXJuYWxFbnVtQ29udmVydGVyLmZpbHRlckRvbWFpblR5cGUuY29udmVydChkb21haW5UeXBlKTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48Q29udHJhY3QuUmFuZ2VEb21haW4+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgZG9tYWluID0gcmVzcG9uc2UucmVzdWx0IGFzIEludGVybmFsQ29udHJhY3QuUmFuZ2VEb21haW47XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRSYW5nZURvbWFpbihkb21haW4sIGRvbWFpblR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERhc2hib2FyZEZpbHRlcnNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkZpbHRlcj4+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldERhc2hib2FyZEZpbHRlcnM7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldERhc2hib2FyZEZpbHRlcnNBc3luYycsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48QXJyYXk8Q29udHJhY3QuRmlsdGVyPj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PEludGVybmFsQ29udHJhY3QuRmlsdGVyPjtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnREb21haW5GaWx0ZXJzKGZpbHRlcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGx5RGFzaGJvYXJkRmlsdGVyQXN5bmMoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIHVwZGF0ZVR5cGU6IENvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUsXG4gICAgZmlsdGVyT3B0aW9uczogQ29udHJhY3QuRmlsdGVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkRhc2hib2FyZENhdGVnb3JpY2FsRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhcHBseURhc2hib2FyZEZpbHRlckFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGROYW1lXSA9IGZpZWxkTmFtZTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpbHRlclZhbHVlc10gPSB2YWx1ZXM7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJVcGRhdGVUeXBlXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5maWx0ZXJVcGRhdGVUeXBlLmNvbnZlcnQodXBkYXRlVHlwZSk7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5Jc0V4Y2x1ZGVNb2RlXSA9IGZpbHRlck9wdGlvbnMgJiYgISFmaWx0ZXJPcHRpb25zLmlzRXhjbHVkZU1vZGU7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQgYXMgc3RyaW5nO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMod29ya3NoZWV0TmFtZTogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXJNb2RlbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUdldEFwcGxpZWRXb3Jrc2hlZXRzKHdvcmtzaGVldE5hbWUsIGZpZWxkSWQsICdnZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jJyk7XG4gICAgY29uc3Qgd29ya3NoZWV0TmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgc2hhcmVkRmlsdGVyTW9kZWwud29ya3NoZWV0cz8ubWFwKCh3b3Jrc2hlZXRJbmZvOiBJbnRlcm5hbENvbnRyYWN0LlNoYXJlZEZpbHRlcldvcmtzaGVldE1vZGVsKSA9PiB7XG4gICAgICBpZiAod29ya3NoZWV0SW5mby5pc1NlbGVjdGVkKSB7XG4gICAgICAgIHdvcmtzaGVldE5hbWVzLnB1c2god29ya3NoZWV0SW5mby53b3Jrc2hlZXROYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd29ya3NoZWV0TmFtZXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0QXBwbGllZFdvcmtzaGVldHNBc3luYyhcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIGFwcGx5VG9Xb3Jrc2hlZXRzOiBBcnJheTxzdHJpbmc+LFxuICApOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXJNb2RlbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUdldEFwcGxpZWRXb3Jrc2hlZXRzKHdvcmtzaGVldE5hbWUsIGZpZWxkSWQsICdnZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jSW50ZXJuYWwnKTtcbiAgICBpZiAoIXNoYXJlZEZpbHRlck1vZGVsIHx8ICFzaGFyZWRGaWx0ZXJNb2RlbC53b3Jrc2hlZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ1RoaXMgZmlsdGVyIGRvZXMgbm90IGFwcGx5IHRvIG11bHRpcGxlIHdvcmtzaGVldHMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd2VkV29ya3NoZWV0czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgYWN0aXZlV29ya3NoZWV0ID0gJyc7XG4gICAgc2hhcmVkRmlsdGVyTW9kZWwud29ya3NoZWV0cy5mb3JFYWNoKCh3b3Jrc2hlZXQpID0+IHtcbiAgICAgIC8vIEdldCBhY3RpdmUgd29ya3NoZWV0XG4gICAgICBpZiAod29ya3NoZWV0LmlzQWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZVdvcmtzaGVldCA9IHdvcmtzaGVldC53b3Jrc2hlZXROYW1lO1xuICAgICAgfVxuXG4gICAgICAvLyBQb3B1bGF0ZSBhbGxvd2VkIHdvcmtzaGVldHNcbiAgICAgIGlmICh3b3Jrc2hlZXQuaXNTZWxlY3RlZCB8fCB3b3Jrc2hlZXQuaXNFbmFibGVkKSB7XG4gICAgICAgIGFsbG93ZWRXb3Jrc2hlZXRzLnB1c2god29ya3NoZWV0LndvcmtzaGVldE5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGFjdGl2ZVdvcmtzaGVldCA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnTm8gYWN0aXZlIHdvcmtzaGVldCcpO1xuICAgIH1cblxuICAgIGlmICghYXBwbHlUb1dvcmtzaGVldHMuaW5jbHVkZXMoYWN0aXZlV29ya3NoZWV0KSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGAke2FjdGl2ZVdvcmtzaGVldH0gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgYXBwbGllZCB3b3Jrc2hlZXRzYCk7XG4gICAgfVxuXG4gICAgYXBwbHlUb1dvcmtzaGVldHMuZm9yRWFjaCgoc2hlZXQpID0+IHtcbiAgICAgIC8vIGNoZWNrIGlmIGl0J3MgcHJlc2VudCB3aXRoaW4gY29tcGF0aWJsZSBzaGVldHNcbiAgICAgIGlmICghYWxsb3dlZFdvcmtzaGVldHMuaW5jbHVkZXMoc2hlZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgVGhlIGZpZWxkICR7ZmllbGROYW1lfSBpc24ndCBhcHBsaWNhYmxlIHRvIHRoZSB3b3Jrc2hlZXQgJHtzaGVldH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuQ2hhbmdlU2hhcmVkRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge307XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdID0gJ3NldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMnO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0ge1xuICAgICAgd29ya3NoZWV0OiB3b3Jrc2hlZXROYW1lLFxuICAgIH07XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZElkXSA9IGZpZWxkSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5TaGFyZWRGaWx0ZXJTaGVldHNdID0gYXBwbHlUb1dvcmtzaGVldHM7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nW10+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuIGFwcGx5VG9Xb3Jrc2hlZXRzO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBwcml2YXRlIGV4ZWN1dGVHZXRBcHBsaWVkV29ya3NoZWV0cyhcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIHRlbGVtZXRyeUZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPEludGVybmFsQ29udHJhY3QuU2hhcmVkRmlsdGVyTW9kZWw+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldFNoYXJlZEZpbHRlcjtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHt9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXSA9IHRlbGVtZXRyeUZ1bmN0aW9uTmFtZTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHtcbiAgICAgIHdvcmtzaGVldDogd29ya3NoZWV0TmFtZSxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGRJZF0gPSBmaWVsZElkO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPEludGVybmFsQ29udHJhY3QuU2hhcmVkRmlsdGVyTW9kZWw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3Qgc2hhcmVkRmlsdGVyTW9kZWwgPSByZXNwb25zZS5yZXN1bHQgYXMgSW50ZXJuYWxDb250cmFjdC5TaGFyZWRGaWx0ZXJNb2RlbDtcbiAgICAgIHJldHVybiBzaGFyZWRGaWx0ZXJNb2RlbDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERvbWFpbkZpbHRlcnMoZG9tYWluRmlsdGVyczogQXJyYXk8SW50ZXJuYWxDb250cmFjdC5GaWx0ZXI+KTogQXJyYXk8Q29udHJhY3QuRmlsdGVyPiB7XG4gICAgY29uc3QgZmlsdGVyczogQXJyYXk8Q29udHJhY3QuRmlsdGVyPiA9IFtdO1xuICAgIGRvbWFpbkZpbHRlcnMuZm9yRWFjaCgoZG9tYWluRmlsdGVyKSA9PiB7XG4gICAgICBzd2l0Y2ggKGRvbWFpbkZpbHRlci5maWx0ZXJUeXBlKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5DYXRlZ29yaWNhbDoge1xuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGRvbWFpbkZpbHRlciBhcyBJbnRlcm5hbENvbnRyYWN0LkNhdGVnb3JpY2FsRmlsdGVyO1xuICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmNvbnZlcnRDYXRlZ29yaWNhbEZpbHRlcihmaWx0ZXIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENhdGVnb3JpY2FsIEZpbHRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5IaWVyYXJjaGljYWw6IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBkb21haW5GaWx0ZXIgYXMgSW50ZXJuYWxDb250cmFjdC5IaWVyYXJjaGljYWxGaWx0ZXI7XG4gICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuY29udmVydEhpZXJhcmNoaWNhbEZpbHRlcihmaWx0ZXIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhpZXJhcmNoaWNhbCBGaWx0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZpbHRlclR5cGUuUmFuZ2U6IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBkb21haW5GaWx0ZXIgYXMgSW50ZXJuYWxDb250cmFjdC5SYW5nZUZpbHRlcjtcbiAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5jb252ZXJ0UmFuZ2VGaWx0ZXIoZmlsdGVyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBSYW5nZSBGaWx0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIEZpbHRlclR5cGUuUmVsYXRpdmVEYXRlOiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gZG9tYWluRmlsdGVyIGFzIEludGVybmFsQ29udHJhY3QuUmVsYXRpdmVEYXRlRmlsdGVyO1xuICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmNvbnZlcnRSZWxhdGl2ZURhdGVGaWx0ZXIoZmlsdGVyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBSZWxhdGl2ZSBEYXRlIEZpbHRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Q2F0ZWdvcmljYWxGaWx0ZXIoZG9tYWluRmlsdGVyOiBJbnRlcm5hbENvbnRyYWN0LkNhdGVnb3JpY2FsRmlsdGVyKTogQ29udHJhY3QuQ2F0ZWdvcmljYWxGaWx0ZXIge1xuICAgIGNvbnN0IGFwcGxpZWRWYWx1ZXM6IEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4gPSBkb21haW5GaWx0ZXIudmFsdWVzLm1hcCgoZHYpID0+IHtcbiAgICAgIHJldHVybiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VGaWx0ZXJEYXRhVmFsdWUoZHYpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBDYXRlZ29yaWNhbEZpbHRlcihcbiAgICAgIGRvbWFpbkZpbHRlci52aXN1YWxJZC53b3Jrc2hlZXQsXG4gICAgICBkb21haW5GaWx0ZXIuZmllbGRDYXB0aW9uLFxuICAgICAgZG9tYWluRmlsdGVyLmZpZWxkTmFtZSxcbiAgICAgIEZpbHRlclR5cGUuQ2F0ZWdvcmljYWwsXG4gICAgICB0aGlzLl9yZWdpc3RyeUlkLFxuICAgICAgYXBwbGllZFZhbHVlcyxcbiAgICAgIGRvbWFpbkZpbHRlci5pc0V4Y2x1ZGUsXG4gICAgICBkb21haW5GaWx0ZXIuaXNBbGxTZWxlY3RlZCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SGllcmFyY2hpY2FsRmlsdGVyKGRvbWFpbkZpbHRlcjogSW50ZXJuYWxDb250cmFjdC5IaWVyYXJjaGljYWxGaWx0ZXIpOiBDb250cmFjdC5IaWVyYXJjaGljYWxGaWx0ZXIge1xuICAgIGNvbnN0IGFwcGxpZWRWYWx1ZXM6IEFycmF5PENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlckRhdGFWYWx1ZT4gPSBkb21haW5GaWx0ZXIudmFsdWVzLm1hcCgoaGllcmFyY2hpY2FsRGF0YVZhbHVlKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEhpZXJhcmNoaWNhbERhdGFWYWx1ZShcbiAgICAgICAgRGF0YVZhbHVlRmFjdG9yeS5NYWtlRmlsdGVyRGF0YVZhbHVlKGhpZXJhcmNoaWNhbERhdGFWYWx1ZS52YWx1ZSksXG4gICAgICAgIGhpZXJhcmNoaWNhbERhdGFWYWx1ZS5oaWVyYXJjaGljYWxQYXRoLFxuICAgICAgICBoaWVyYXJjaGljYWxEYXRhVmFsdWUubGV2ZWwsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGV2ZWxEZXRhaWxzOiBBcnJheTxDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbERldGFpbD4gPSBkb21haW5GaWx0ZXIubGV2ZWxJbmZvLm1hcCgoYUxldmVsKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEhpZXJhcmNoaWNhbExldmVsRGV0YWlsKFxuICAgICAgICBhTGV2ZWwubmFtZSxcbiAgICAgICAgSW50ZXJuYWxFbnVtQ29udmVydGVyLmhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUuY29udmVydChhTGV2ZWwubGV2ZWxTZWxlY3Rpb25TdGF0ZSksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaGljYWxGaWx0ZXIoXG4gICAgICBkb21haW5GaWx0ZXIudmlzdWFsSWQud29ya3NoZWV0LFxuICAgICAgZG9tYWluRmlsdGVyLmZpZWxkQ2FwdGlvbixcbiAgICAgIGRvbWFpbkZpbHRlci5maWVsZE5hbWUsXG4gICAgICBGaWx0ZXJUeXBlLkhpZXJhcmNoaWNhbCxcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5SWQsXG4gICAgICBkb21haW5GaWx0ZXIuZGltZW5zaW9uTmFtZSxcbiAgICAgIGRvbWFpbkZpbHRlci5oaWVyYXJjaHlDYXB0aW9uLFxuICAgICAgZG9tYWluRmlsdGVyLmxldmVscyxcbiAgICAgIGxldmVsRGV0YWlscyxcbiAgICAgIGFwcGxpZWRWYWx1ZXMsXG4gICAgICBkb21haW5GaWx0ZXIuaXNBbGxTZWxlY3RlZCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmFuZ2VGaWx0ZXIoZG9tYWluRmlsdGVyOiBJbnRlcm5hbENvbnRyYWN0LlJhbmdlRmlsdGVyKTogQ29udHJhY3QuUmFuZ2VGaWx0ZXIge1xuICAgIGNvbnN0IG1pblZhbHVlOiBEYXRhVmFsdWUgPSBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VGaWx0ZXJEYXRhVmFsdWUoZG9tYWluRmlsdGVyLm1pbik7XG4gICAgY29uc3QgbWF4VmFsdWU6IERhdGFWYWx1ZSA9IERhdGFWYWx1ZUZhY3RvcnkuTWFrZUZpbHRlckRhdGFWYWx1ZShkb21haW5GaWx0ZXIubWF4KTtcbiAgICByZXR1cm4gbmV3IFJhbmdlRmlsdGVyKFxuICAgICAgZG9tYWluRmlsdGVyLnZpc3VhbElkLndvcmtzaGVldCxcbiAgICAgIGRvbWFpbkZpbHRlci5maWVsZENhcHRpb24sXG4gICAgICBkb21haW5GaWx0ZXIuZmllbGROYW1lLFxuICAgICAgRmlsdGVyVHlwZS5SYW5nZSxcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5SWQsXG4gICAgICBtaW5WYWx1ZSxcbiAgICAgIG1heFZhbHVlLFxuICAgICAgZG9tYWluRmlsdGVyLmluY2x1ZGVOdWxsVmFsdWVzLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSZWxhdGl2ZURhdGVGaWx0ZXIoZG9tYWluRmlsdGVyOiBJbnRlcm5hbENvbnRyYWN0LlJlbGF0aXZlRGF0ZUZpbHRlcik6IENvbnRyYWN0LlJlbGF0aXZlRGF0ZUZpbHRlciB7XG4gICAgY29uc3QgYW5jaG9yRGF0ZVZhbHVlOiBEYXRhVmFsdWUgPSBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VGaWx0ZXJEYXRhVmFsdWUoZG9tYWluRmlsdGVyLmFuY2hvckRhdGUpO1xuICAgIHJldHVybiBuZXcgUmVsYXRpdmVEYXRlRmlsdGVyKFxuICAgICAgZG9tYWluRmlsdGVyLnZpc3VhbElkLndvcmtzaGVldCxcbiAgICAgIGRvbWFpbkZpbHRlci5maWVsZENhcHRpb24sXG4gICAgICBkb21haW5GaWx0ZXIuZmllbGROYW1lLFxuICAgICAgRXh0ZXJuYWxGaWx0ZXJUeXBlLlJlbGF0aXZlRGF0ZSxcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5SWQsXG4gICAgICBhbmNob3JEYXRlVmFsdWUsXG4gICAgICBJbnRlcm5hbEVudW1Db252ZXJ0ZXIuZGF0ZVN0ZXBQZXJpb2QuY29udmVydChkb21haW5GaWx0ZXIucGVyaW9kVHlwZSksXG4gICAgICBJbnRlcm5hbEVudW1Db252ZXJ0ZXIuZGF0ZVJhbmdlVHlwZS5jb252ZXJ0KGRvbWFpbkZpbHRlci5yYW5nZVR5cGUpLFxuICAgICAgZG9tYWluRmlsdGVyLnJhbmdlTixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Q2F0ZWdvcmljYWxEb21haW4oZG9tYWluOiBJbnRlcm5hbENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluLCBkb21haW5UeXBlOiBGaWx0ZXJEb21haW5UeXBlKTogQ29udHJhY3QuQ2F0ZWdvcmljYWxEb21haW4ge1xuICAgIGNvbnN0IHZhbHVlczogQXJyYXk8RGF0YVZhbHVlPiA9IGRvbWFpbi52YWx1ZXMubWFwKChkb21haW5EdikgPT4ge1xuICAgICAgcmV0dXJuIERhdGFWYWx1ZUZhY3RvcnkuTWFrZUZpbHRlckRhdGFWYWx1ZShkb21haW5Edik7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBDYXRlZ29yaWNhbERvbWFpbih2YWx1ZXMsIGRvbWFpblR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmFuZ2VEb21haW4oZG9tYWluOiBJbnRlcm5hbENvbnRyYWN0LlJhbmdlRG9tYWluLCBkb21haW5UeXBlOiBGaWx0ZXJEb21haW5UeXBlKTogQ29udHJhY3QuUmFuZ2VEb21haW4ge1xuICAgIGNvbnN0IG1pbjogRGF0YVZhbHVlID0gRGF0YVZhbHVlRmFjdG9yeS5NYWtlRmlsdGVyRGF0YVZhbHVlKGRvbWFpbi5taW4pO1xuICAgIGNvbnN0IG1heDogRGF0YVZhbHVlID0gRGF0YVZhbHVlRmFjdG9yeS5NYWtlRmlsdGVyRGF0YVZhbHVlKGRvbWFpbi5tYXgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VEb21haW4obWluLCBtYXgsIGRvbWFpblR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QW5jaG9yRGF0ZShhbmNob3JEYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAvLyBDb252ZXJ0cyBhIERhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgZm9ybWF0IHRoYXQgdGhlIHNlcnZlciBleHBlY3RzIGZvciBkYXRlL3RpbWUgdmFsdWVzLlxuICAgIC8vIElmIGFuY2hvckRhdGUgZG9lc24ndCByZXByZXNlbnQgYSB2YWxpZCBEYXRlIG9iamVjdCwgYW55IG9mIHRoZXNlIHdvdWxkIGJlIE5hTi5cbiAgICBjb25zdCB5ZWFyID0gYW5jaG9yRGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoID0gYW5jaG9yRGF0ZS5nZXRVVENNb250aCgpICsgMTtcbiAgICBjb25zdCBkYXkgPSBhbmNob3JEYXRlLmdldFVUQ0RhdGUoKTtcbiAgICBjb25zdCBoaCA9IGFuY2hvckRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBjb25zdCBtbSA9IGFuY2hvckRhdGUuZ2V0VVRDTWludXRlcygpO1xuICAgIGNvbnN0IHNlYyA9IGFuY2hvckRhdGUuZ2V0VVRDU2Vjb25kcygpO1xuXG4gICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSB8fCBpc05hTihkYXkpIHx8IGlzTmFOKGhoKSB8fCBpc05hTihtbSkgfHwgaXNOYU4oc2VjKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWREYXRlUGFyYW1ldGVyLCAnSW52YWxpZCBkYXRlIHBhcmFtZXRlcjogYW5jaG9yRGF0ZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fSAke2hofToke21tfToke3NlY31gO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGFwaUZpbHRlckhhbmRsZXJDaGVja0ZvckNvbW1hbmRFcnJvcihzZXJ2ZXJQbTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGlmICghc2VydmVyUG1bSW50ZXJuYWxDb250cmFjdC5QYXJhbWV0ZXJJZC5QYXJhbWV0ZXJFcnJvcl0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNlcnZlclBtW0ludGVybmFsQ29udHJhY3QuUGFyYW1ldGVySWQuSW52YWxpZEZpZWxkQ2FwdGlvbl0pIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkRmlsdGVyRmllbGROYW1lLCBzZXJ2ZXJQbVtJbnRlcm5hbENvbnRyYWN0LlBhcmFtZXRlcklkLkludmFsaWRGaWVsZENhcHRpb25dKTtcbiAgICB9XG4gICAgaWYgKHNlcnZlclBtW0ludGVybmFsQ29udHJhY3QuUGFyYW1ldGVySWQuSW52YWxpZFZhbHVlc10pIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkRmlsdGVyRmllbGRWYWx1ZSwgc2VydmVyUG1bSW50ZXJuYWxDb250cmFjdC5QYXJhbWV0ZXJJZC5JbnZhbGlkVmFsdWVzXSk7XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJQbVtJbnRlcm5hbENvbnRyYWN0LlBhcmFtZXRlcklkLkludmFsaWRBZ2dGaWVsZE5hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZEFnZ3JlZ2F0aW9uRmllbGROYW1lLCBzZXJ2ZXJQbVtJbnRlcm5hbENvbnRyYWN0LlBhcmFtZXRlcklkLkludmFsaWRBZ2dGaWVsZE5hbWVdKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLlNlcnZlckVycm9yLCAnU2VydmVyIEVycm9yJyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGVzLCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBBcGlTaG93RGF0YVRhYmxlRm9ybWF0LFxuICBEYXRhVGFibGUgYXMgRGF0YVRhYmxlSW50ZXJuYWxDb250cmFjdCxcbiAgRGF0YVRhYmxlUmVhZGVyIGFzIERhdGFUYWJsZVJlYWRlckludGVybmFsQ29udHJhY3QsXG4gIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICBIaWdobGlnaHRlZE1hcmtzVGFibGUsXG4gIFBhcmFtZXRlcklkLFxuICBTZWxlY3RlZE1hcmtzVGFibGUsXG4gIFVuZGVybHlpbmdEYXRhVGFibGUsXG4gIFZlcmJJZCxcbiAgVmlzdWFsSWQsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uLy4uLy4uL0FwaVNoYXJlZCc7XG5pbXBvcnQgeyBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MgfSBmcm9tICcuLi8uLi9FbnVtTWFwcGluZ3MvRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzJztcbmltcG9ydCB7IENvbHVtbiwgRGF0YVRhYmxlLCBNYXJrSW5mbyB9IGZyb20gJy4uLy4uL01vZGVscy9HZXREYXRhTW9kZWxzJztcbmltcG9ydCB7IERhdGFUYWJsZVJlYWRlciB9IGZyb20gJy4uLy4uL01vZGVscy9HZXREYXRhVGFibGVSZWFkZXJNb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVZhbHVlRmFjdG9yeSB9IGZyb20gJy4uLy4uL1V0aWxzL0RhdGFWYWx1ZUZhY3RvcnknO1xuaW1wb3J0IHsgR2V0RGF0YVNlcnZpY2UsIEdldERhdGFUeXBlIH0gZnJvbSAnLi4vR2V0RGF0YVNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIEdldERhdGFTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIEdldERhdGFTZXJ2aWNlIHtcbiAgLy8gVGhlIGV4dGVuc2lvbi9lbWJlZGRpbmcgaW5zdGFuY2UgdXNlcyB0aGUgc2FtZSBjYWNoZSBmb3IgYWxsIERhdGFUYWJsZVJlYWRlcnMuXG4gIHByaXZhdGUgdmlld0RhdGFUYWJsZUNhY2hlSWQ6IHN0cmluZyA9IHV1aWR2NCgpO1xuXG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLkdldERhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWF4Um93TGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMTAwMDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Vmlld0RhdGFUYWJsZUNhY2hlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52aWV3RGF0YVRhYmxlQ2FjaGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGltaXRlZE1heFJvd3MocmVxdWVzdGVkUm93czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCByb3dDb3VudExpbWl0ID0gdGhpcy5nZXRNYXhSb3dMaW1pdCgpICsgMTtcbiAgICByZXR1cm4gcmVxdWVzdGVkUm93cyA+IDAgJiYgcmVxdWVzdGVkUm93cyA8IHJvd0NvdW50TGltaXQgPyByZXF1ZXN0ZWRSb3dzIDogcm93Q291bnRMaW1pdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nRGF0YUFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBnZXRUeXBlOiBHZXREYXRhVHlwZSxcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBtYXhSb3dzOiBudW1iZXIsXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPERhdGFUYWJsZT4ge1xuICAgIC8vIENyZWF0ZSBhbGwgb2Ygb3VyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IGdldFR5cGUgPT09IEdldERhdGFUeXBlLlN1bW1hcnk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gc3VtbWFyeURhdGEgPyAnZ2V0U3VtbWFyeURhdGFBc3luYycgOiAnZ2V0VW5kZXJseWluZ0RhdGFBc3luYyc7XG4gICAgY29uc3QgdmVyYiA9IHN1bW1hcnlEYXRhID8gVmVyYklkLkdldERhdGFTdW1tYXJ5RGF0YSA6IFZlcmJJZC5HZXRVbmRlcmx5aW5nRGF0YTtcbiAgICBjb25zdCByZXF1ZXN0TWF4Um93cyA9IHZlcmIgPT09IFZlcmJJZC5HZXRVbmRlcmx5aW5nRGF0YSA/IHRoaXMuZ2V0TGltaXRlZE1heFJvd3MobWF4Um93cykgOiBtYXhSb3dzO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06IGZ1bmN0aW9uTmFtZSxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0gdmlzdWFsSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5JZ25vcmVBbGlhc2VzXSA9IGlnbm9yZUFsaWFzZXM7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5JZ25vcmVTZWxlY3Rpb25dID0gaWdub3JlU2VsZWN0aW9uO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuSW5jbHVkZUFsbENvbHVtbnNdID0gaW5jbHVkZUFsbENvbHVtbnM7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlQnlJZF0gPSB0aGlzLnZlcmlmeUluY2x1ZGVDb2x1bW5BcnJheShjb2x1bW5zVG9JbmNsdWRlQnlJZCk7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5NYXhSb3dzXSA9IHJlcXVlc3RNYXhSb3dzO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuU2hvd0RhdGFUYWJsZUZvcm1hdF0gPSBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUuY29udmVydChpbmNsdWRlRGF0YVZhbHVlc09wdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3VsdHNUYWJsZShyZXNwb25zZURhdGEuZGF0YSwgcmVzcG9uc2VEYXRhLmlzU3VtbWFyeSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VtbWFyeURhdGFSZWFkZXJBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgcGFnZVJvd0NvdW50OiBudW1iZXIsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBpZ25vcmVTZWxlY3Rpb246IGJvb2xlYW4sXG4gICAgaW5jbHVkZUFsbENvbHVtbnM6IGJvb2xlYW4sXG4gICAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ6IEFycmF5PHN0cmluZz4sXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPERhdGFUYWJsZVJlYWRlcj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaWV3RGF0YVRhYmxlQ2FjaGVJZF06IHRoaXMuZ2V0Vmlld0RhdGFUYWJsZUNhY2hlSWQoKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgICAgW1BhcmFtZXRlcklkLlBhZ2VSb3dDb3VudF06IHBhZ2VSb3dDb3VudCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVBbGlhc2VzXTogaWdub3JlQWxpYXNlcyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVTZWxlY3Rpb25dOiBpZ25vcmVTZWxlY3Rpb24sXG4gICAgICBbUGFyYW1ldGVySWQuSW5jbHVkZUFsbENvbHVtbnNdOiBpbmNsdWRlQWxsQ29sdW1ucyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlQnlJZF06IHRoaXMudmVyaWZ5SW5jbHVkZUNvbHVtbkFycmF5KGNvbHVtbnNUb0luY2x1ZGVCeUlkKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaG93RGF0YVRhYmxlRm9ybWF0XTogRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzLnNob3dEYXRhVGFibGVGb3JtYXRUeXBlLmNvbnZlcnQoaW5jbHVkZURhdGFWYWx1ZXNPcHRpb24pLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXREYXRhU3VtbWFyeURhdGFSZWFkZXIsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlUmVhZGVyPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBEYXRhVGFibGVSZWFkZXJJbnRlcm5hbENvbnRyYWN0O1xuXG4gICAgICByZXR1cm4gbmV3IERhdGFUYWJsZVJlYWRlcihyZXNwb25zZURhdGEuaWQsIHJlc3BvbnNlRGF0YS50b3RhbFJvd0NvdW50LCBwYWdlUm93Q291bnQsIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFN1bW1hcnlDb2x1bW5zSW5mb0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuQ29sdW1uPj4ge1xuICAgIC8vIENyZWF0ZSBhbGwgdGhlIHBhcmFtZXRlcnMgZm9yIEdldERhdGFUeXBlIG9mIFN1bW1hcnkgd2l0aCAxIHJvdywgYW5kIG9ubHkgbmF0aXZlIHZhbHVlc1xuICAgIC8vIFRoZW4gcmV0dXJuIGp1c3QgdGhlIGNvbHVtbnNcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldERhdGFTdW1tYXJ5RGF0YTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlQWxpYXNlc106IHRydWUsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlU2VsZWN0aW9uXTogdHJ1ZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JbmNsdWRlQWxsQ29sdW1uc106IHRydWUsXG4gICAgICBbUGFyYW1ldGVySWQuTWF4Um93c106IDEsXG4gICAgICBbUGFyYW1ldGVySWQuU2hvd0RhdGFUYWJsZUZvcm1hdF06IEFwaVNob3dEYXRhVGFibGVGb3JtYXQuTmF0aXZlVmFsdWVzT25seSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPEFycmF5PENvbnRyYWN0LkNvbHVtbj4+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgdW5kZXJseWluZ0RhdGFUYWJsZSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICAgICAgY29uc3QgZGF0YVRhYmxlID0gdW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhO1xuICAgICAgY29uc3QgY29sdW1ucyA9IGRhdGFUYWJsZS5oZWFkZXJzLm1hcCgoaCkgPT4gbmV3IENvbHVtbihoLmZpZWxkQ2FwdGlvbiwgaC5maWVsZE5hbWUsIGguZGF0YVR5cGUsIGguaXNSZWZlcmVuY2VkLCBoLmluZGV4KSk7XG4gICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZE1hcmtzQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0U2VsZWN0ZWRNYXJrc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0U2VsZWN0ZWRNYXJrcywgcGFyYW1ldGVycykudGhlbjxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIFNlbGVjdGVkTWFya3NUYWJsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YS5kYXRhLm1hcCgodGFibGUpID0+IHRoaXMucHJvY2Vzc1Jlc3VsdHNUYWJsZSh0YWJsZSwgdHJ1ZSkpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaWdobGlnaHRlZE1hcmtzQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0SGlnaGxpZ2h0ZWRNYXJrc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0SGlnaGxpZ2h0ZWRNYXJrcywgcGFyYW1ldGVycykudGhlbjxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIEhpZ2hsaWdodGVkTWFya3NUYWJsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YS5kYXRhLm1hcCgodGFibGUpID0+IHRoaXMucHJvY2Vzc1Jlc3VsdHNUYWJsZSh0YWJsZSwgdHJ1ZSkpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhU291cmNlRGF0YUFzeW5jKFxuICAgIGRhdGFTb3VyY2VJZDogc3RyaW5nLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgbWF4Um93czogbnVtYmVyLFxuICAgIGNvbHVtbnNUb0luY2x1ZGU6IEFycmF5PHN0cmluZz4sXG4gICAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ6IEFycmF5PHN0cmluZz4sXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPERhdGFUYWJsZT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXREYXRhU291cmNlRGF0YUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXRhU291cmNlSWRdOiBkYXRhU291cmNlSWQsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlQWxpYXNlc106IGlnbm9yZUFsaWFzZXMsXG4gICAgICBbUGFyYW1ldGVySWQuTWF4Um93c106IHRoaXMuZ2V0TGltaXRlZE1heFJvd3MobWF4Um93cyksXG4gICAgICBbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZV06IHRoaXMudmVyaWZ5SW5jbHVkZUNvbHVtbkFycmF5KGNvbHVtbnNUb0luY2x1ZGUpLFxuICAgICAgW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXTogdGhpcy52ZXJpZnlJbmNsdWRlQ29sdW1uQXJyYXkoY29sdW1uc1RvSW5jbHVkZUJ5SWQpLFxuICAgICAgW1BhcmFtZXRlcklkLlNob3dEYXRhVGFibGVGb3JtYXRdOiBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUuY29udmVydChpbmNsdWRlRGF0YVZhbHVlc09wdGlvbiksXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldERhdGFTb3VyY2VEYXRhLCBwYXJhbWV0ZXJzKS50aGVuPERhdGFUYWJsZT4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQgYXMgVW5kZXJseWluZ0RhdGFUYWJsZTtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXN1bHRzVGFibGUocmVzcG9uc2VEYXRhLmRhdGEsIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMoXG4gICAgZGF0YXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBjb2x1bW5zVG9JbmNsdWRlOiBBcnJheTxzdHJpbmc+LFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxEYXRhVGFibGU+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0TG9naWNhbFRhYmxlRGF0YUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlXTogY29sdW1uc1RvSW5jbHVkZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlQnlJZF06IHRoaXMudmVyaWZ5SW5jbHVkZUNvbHVtbkFycmF5KGNvbHVtbnNUb0luY2x1ZGVCeUlkKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXRhU291cmNlSWRdOiBkYXRhc291cmNlSWQsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlQWxpYXNlc106IGlnbm9yZUFsaWFzZXMsXG4gICAgICBbUGFyYW1ldGVySWQuTG9naWNhbFRhYmxlSWRdOiBsb2dpY2FsVGFibGVJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5NYXhSb3dzXTogdGhpcy5nZXRMaW1pdGVkTWF4Um93cyhtYXhSb3dzKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaG93RGF0YVRhYmxlRm9ybWF0XTogRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzLnNob3dEYXRhVGFibGVGb3JtYXRUeXBlLmNvbnZlcnQoaW5jbHVkZURhdGFWYWx1ZXNPcHRpb24pLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRMb2dpY2FsVGFibGVEYXRhLCBwYXJhbWV0ZXJzKS50aGVuPERhdGFUYWJsZT4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQgYXMgVW5kZXJseWluZ0RhdGFUYWJsZTtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXN1bHRzVGFibGUocmVzcG9uc2VEYXRhLmRhdGEsIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgZGF0YXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxEYXRhVGFibGVSZWFkZXI+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlckFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaWV3RGF0YVRhYmxlQ2FjaGVJZF06IHRoaXMuZ2V0Vmlld0RhdGFUYWJsZUNhY2hlSWQoKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXRhU291cmNlSWRdOiBkYXRhc291cmNlSWQsXG4gICAgICBbUGFyYW1ldGVySWQuTG9naWNhbFRhYmxlSWRdOiBsb2dpY2FsVGFibGVJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5QYWdlUm93Q291bnRdOiBwYWdlUm93Q291bnQsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlQWxpYXNlc106IGlnbm9yZUFsaWFzZXMsXG4gICAgICBbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZUJ5SWRdOiB0aGlzLnZlcmlmeUluY2x1ZGVDb2x1bW5BcnJheShjb2x1bW5zVG9JbmNsdWRlQnlJZCksXG4gICAgICBbUGFyYW1ldGVySWQuU2hvd0RhdGFUYWJsZUZvcm1hdF06IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncy5zaG93RGF0YVRhYmxlRm9ybWF0VHlwZS5jb252ZXJ0KGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlciwgcGFyYW1ldGVycykudGhlbjxEYXRhVGFibGVSZWFkZXI+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIERhdGFUYWJsZVJlYWRlckludGVybmFsQ29udHJhY3Q7XG5cbiAgICAgIHJldHVybiBuZXcgRGF0YVRhYmxlUmVhZGVyKHJlc3BvbnNlRGF0YS5pZCwgcmVzcG9uc2VEYXRhLnRvdGFsUm93Q291bnQsIHBhZ2VSb3dDb3VudCwgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgaWdub3JlU2VsZWN0aW9uOiBib29sZWFuLFxuICAgIGluY2x1ZGVBbGxDb2x1bW5zOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldFVuZGVybHlpbmdUYWJsZURhdGFBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Mb2dpY2FsVGFibGVJZF06IGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZUFsaWFzZXNdOiBpZ25vcmVBbGlhc2VzLFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZVNlbGVjdGlvbl06IGlnbm9yZVNlbGVjdGlvbixcbiAgICAgIFtQYXJhbWV0ZXJJZC5JbmNsdWRlQWxsQ29sdW1uc106IGluY2x1ZGVBbGxDb2x1bW5zLFxuICAgICAgW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXTogdGhpcy52ZXJpZnlJbmNsdWRlQ29sdW1uQXJyYXkoY29sdW1uc1RvSW5jbHVkZUJ5SWQpLFxuICAgICAgW1BhcmFtZXRlcklkLk1heFJvd3NdOiB0aGlzLmdldExpbWl0ZWRNYXhSb3dzKG1heFJvd3MpLFxuICAgICAgW1BhcmFtZXRlcklkLlNob3dEYXRhVGFibGVGb3JtYXRdOiBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUuY29udmVydChpbmNsdWRlRGF0YVZhbHVlc09wdGlvbiksXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldFVuZGVybHlpbmdUYWJsZURhdGEsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3VsdHNUYWJsZShyZXNwb25zZURhdGEuZGF0YSwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlld0RhdGFUYWJsZUNhY2hlSWRdOiB0aGlzLmdldFZpZXdEYXRhVGFibGVDYWNoZUlkKCksXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Mb2dpY2FsVGFibGVJZF06IGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZUFsaWFzZXNdOiBpZ25vcmVBbGlhc2VzLFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZVNlbGVjdGlvbl06IGlnbm9yZVNlbGVjdGlvbixcbiAgICAgIFtQYXJhbWV0ZXJJZC5JbmNsdWRlQWxsQ29sdW1uc106IGluY2x1ZGVBbGxDb2x1bW5zLFxuICAgICAgW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXTogdGhpcy52ZXJpZnlJbmNsdWRlQ29sdW1uQXJyYXkoY29sdW1uc1RvSW5jbHVkZUJ5SWQpLFxuICAgICAgW1BhcmFtZXRlcklkLlNob3dEYXRhVGFibGVGb3JtYXRdOiBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUuY29udmVydChpbmNsdWRlRGF0YVZhbHVlc09wdGlvbiksXG4gICAgICBbUGFyYW1ldGVySWQuUGFnZVJvd0NvdW50XTogcGFnZVJvd0NvdW50LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRVbmRlcmx5aW5nVGFibGVEYXRhUmVhZGVyLCBwYXJhbWV0ZXJzKS50aGVuPERhdGFUYWJsZVJlYWRlcj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQgYXMgRGF0YVRhYmxlUmVhZGVySW50ZXJuYWxDb250cmFjdDtcblxuICAgICAgcmV0dXJuIG5ldyBEYXRhVGFibGVSZWFkZXIocmVzcG9uc2VEYXRhLmlkLCByZXNwb25zZURhdGEudG90YWxSb3dDb3VudCwgcGFnZVJvd0NvdW50LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHN1bW1hcnlUYWJsZUlkID0gJyc7XG5cbiAgcHVibGljIGdldFBhZ2VBc3luYyh0YWJsZUlkOiBzdHJpbmcsIHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldFBhZ2VBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlld0RhdGFUYWJsZUNhY2hlSWRdOiB0aGlzLmdldFZpZXdEYXRhVGFibGVDYWNoZUlkKCksXG4gICAgICBbUGFyYW1ldGVySWQuVmlld0RhdGFUYWJsZUlkXTogdGFibGVJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXRhUm93SW5kZXhdOiBwYWdlTnVtYmVyICogcGFnZVNpemUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldERhdGFUYWJsZVJlYWRlclBhZ2UsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBEYXRhVGFibGVJbnRlcm5hbENvbnRyYWN0O1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3VsdHNQYWdlKHJlc3BvbnNlRGF0YSwgdGFibGVJZCA9PT0gR2V0RGF0YVNlcnZpY2VJbXBsLnN1bW1hcnlUYWJsZUlkID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWxlYXNlQXN5bmModGFibGVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3JlbGVhc2UnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpZXdEYXRhVGFibGVDYWNoZUlkXTogdGhpcy5nZXRWaWV3RGF0YVRhYmxlQ2FjaGVJZCgpLFxuICAgICAgW1BhcmFtZXRlcklkLlZpZXdEYXRhVGFibGVJZF06IHRhYmxlSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlJlbGVhc2VEYXRhVGFibGVSZWFkZXIsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUluY2x1ZGVDb2x1bW5BcnJheShjb2x1bW5zOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgLy8gY29sdW1ucyBtdXN0IGJlIGEgdmFsaWQgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1ucykpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCAnY29sdW1uc1RvSW5jbHVkZSBhbmQgY29sdW1uc1RvSW5jbHVkZUJ5SWQgbXVzdCBiZSB2YWxpZCBhcnJheXMnKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYW55IGR1cGxpY2F0ZXMgZnJvbSB0aGUgaW5wdXQgYXJyYXlcbiAgICBjb25zdCBjb2x1bW5zQXNTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldChjb2x1bW5zKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb2x1bW5zQXNTZXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzVGFibGUocmVzcG9uc2VEYXRhOiBEYXRhVGFibGVJbnRlcm5hbENvbnRyYWN0LCBpc1N1bW1hcnk6IGJvb2xlYW4pOiBEYXRhVGFibGUge1xuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZURhdGEuaGVhZGVycy5tYXAoKGgpID0+IG5ldyBDb2x1bW4oaC5maWVsZENhcHRpb24sIGguZmllbGROYW1lLCBoLmRhdGFUeXBlLCBoLmlzUmVmZXJlbmNlZCwgaC5pbmRleCkpO1xuXG4gICAgLy8gVE9ETyBUaGlzIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBhcGkgd2lsbCByZXNwb25kIG1hcmtzIGluZm8gb3Igbm90XG4gICAgbGV0IG1hcmtzO1xuICAgIGlmIChyZXNwb25zZURhdGEubWFya3MpIHtcbiAgICAgIG1hcmtzID0gcmVzcG9uc2VEYXRhLm1hcmtzLm1hcCgoaCkgPT4gbmV3IE1hcmtJbmZvKGgudHlwZSwgaC5jb2xvciwgaC50dXBsZUlkKSk7XG4gICAgfVxuXG4gICAgLy8gTGltaXQrMSBpcyBvdXIgc2VudGluYWwgdGhhdCB1bmRlcmx5aW5nIGRhdGEgY29udGFpbnMgbW9yZSByb3dzIHRoYW4gdXNlciBpcyBhbGxvd2VkIHRvIGZldGNoLlxuICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50IHNvIHdlIGFsd2F5cyByZXR1cm4gTWF4Um93TGltaXRcbiAgICBjb25zdCBpc1RvdGFsUm93Q291bnRMaW1pdGVkID0gaXNTdW1tYXJ5ID09PSBmYWxzZSAmJiByZXNwb25zZURhdGEuZGF0YVRhYmxlLmxlbmd0aCA9PT0gdGhpcy5nZXRNYXhSb3dMaW1pdCgpICsgMTtcbiAgICBpZiAoaXNUb3RhbFJvd0NvdW50TGltaXRlZCkge1xuICAgICAgcmVzcG9uc2VEYXRhLmRhdGFUYWJsZS5sZW5ndGggLT0gMTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZSA9IHJlc3BvbnNlRGF0YS5kYXRhVGFibGUubWFwKChyb3cpID0+IHtcbiAgICAgIHJldHVybiByb3cubWFwKChjZWxsLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gRGF0YVZhbHVlRmFjdG9yeS5NYWtlVGFibGVEYXRhVmFsdWUoY2VsbCwgaGVhZGVyc1tpbmRleF0uZGF0YVR5cGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAobWFya3MpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVRhYmxlKHRhYmxlLCBoZWFkZXJzLCB0YWJsZS5sZW5ndGgsIGlzVG90YWxSb3dDb3VudExpbWl0ZWQsIGlzU3VtbWFyeSwgbWFya3MpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGFUYWJsZSh0YWJsZSwgaGVhZGVycywgdGFibGUubGVuZ3RoLCBpc1RvdGFsUm93Q291bnRMaW1pdGVkLCBpc1N1bW1hcnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzUGFnZShyZXNwb25zZURhdGE6IERhdGFUYWJsZUludGVybmFsQ29udHJhY3QsIGlzU3VtbWFyeTogYm9vbGVhbik6IERhdGFUYWJsZSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlRGF0YS5oZWFkZXJzLm1hcCgoaCkgPT4gbmV3IENvbHVtbihoLmZpZWxkQ2FwdGlvbiwgaC5maWVsZE5hbWUsIGguZGF0YVR5cGUsIGguaXNSZWZlcmVuY2VkLCBoLmluZGV4KSk7XG5cbiAgICBsZXQgbWFya3M7XG4gICAgaWYgKHJlc3BvbnNlRGF0YS5tYXJrcykge1xuICAgICAgbWFya3MgPSByZXNwb25zZURhdGEubWFya3MubWFwKChoKSA9PiBuZXcgTWFya0luZm8oaC50eXBlLCBoLmNvbG9yLCBoLnR1cGxlSWQpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZSA9IHJlc3BvbnNlRGF0YS5kYXRhVGFibGUubWFwKChyb3cpID0+IHtcbiAgICAgIHJldHVybiByb3cubWFwKChjZWxsLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gRGF0YVZhbHVlRmFjdG9yeS5NYWtlVGFibGVEYXRhVmFsdWUoY2VsbCwgaGVhZGVyc1tpbmRleF0uZGF0YVR5cGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAobWFya3MpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVRhYmxlKHRhYmxlLCBoZWFkZXJzLCB0YWJsZS5sZW5ndGgsIGZhbHNlLCBpc1N1bW1hcnksIG1hcmtzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRhVGFibGUodGFibGUsIGhlYWRlcnMsIHRhYmxlLmxlbmd0aCwgZmFsc2UsIGlzU3VtbWFyeSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9Ob3RpZmljYXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL05vdGlmaWNhdGlvblNlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlSW1wbCBleHRlbmRzIE5vdGlmaWNhdGlvblNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIE5vdGlmaWNhdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5Ob3RpZmljYXRpb247XG4gIH1cbn1cbiIsImltcG9ydCB7IEludGVybmFsQXBpRGlzcGF0Y2hlciwgTW9kZWwsIE5vdGlmaWNhdGlvbiwgTm90aWZpY2F0aW9uSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVW5yZWdpc3RlckZuIH0gZnJvbSAnLi4vTm90aWZpY2F0aW9uU2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RyYXRpb24ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfZmlsdGVyRm46IChub3RpZmljYXRpb25Nb2RlbDogTW9kZWwpID0+IGJvb2xlYW4sIHByaXZhdGUgX2NhbGxiYWNrRm46IChub3RpZmljYXRpb25Nb2RlbDogTW9kZWwpID0+IHZvaWQpIHtcbiAgICAvLyBOb3RoaW5nIEhlcmVcbiAgfVxuXG4gIHB1YmxpYyBvbk5vdGlmaWNhdGlvbihub3RpZmljYXRpb25Nb2RlbDogTW9kZWwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZmlsdGVyRm4obm90aWZpY2F0aW9uTW9kZWwpKSB7XG4gICAgICB0aGlzLl9jYWxsYmFja0ZuKG5vdGlmaWNhdGlvbk1vZGVsKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2VJbXBsQmFzZSB7XG4gIHByaXZhdGUgX2hhbmRsZXJzOiB7IFtub3RpZmljYXRpb25JZDogc3RyaW5nXTogQXJyYXk8UmVnaXN0cmF0aW9uPiB9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlcikge1xuICAgIHRoaXMuX2hhbmRsZXJzID0ge307XG4gICAgdGhpcy5kaXNwYXRjaGVyLnJlZ2lzdGVyTm90aWZpY2F0aW9uSGFuZGxlcih0aGlzLm9uTm90aWZpY2F0aW9uLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVySGFuZGxlcihpZDogTm90aWZpY2F0aW9uSWQsIGZpbHRlckZuOiAobW9kZWw6IE1vZGVsKSA9PiBib29sZWFuLCBoYW5kbGVyOiAobW9kZWw6IE1vZGVsKSA9PiB2b2lkKTogVW5yZWdpc3RlckZuIHtcbiAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuX2hhbmRsZXJzW2lkXSB8fCBuZXcgQXJyYXk8UmVnaXN0cmF0aW9uPigpO1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IG5ldyBSZWdpc3RyYXRpb24oZmlsdGVyRm4sIGhhbmRsZXIpO1xuICAgIGhhbmRsZXJzLnB1c2gocmVnaXN0cmF0aW9uKTtcbiAgICB0aGlzLl9oYW5kbGVyc1tpZF0gPSBoYW5kbGVycztcbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZW1vdmVSZWdpc3RyYXRpb24oaWQsIHJlZ2lzdHJhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGhhc0hhbmRsZXJzRm9yTm90aWZpY2F0aW9uVHlwZShpZDogTm90aWZpY2F0aW9uSWQpOiBib29sZWFuIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Ob3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzSGFuZGxlcnNGb3JOb3RpZmljYXRpb25UeXBlKG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHbyB0aHJvdWdoIGFuZCBjaGVjayBmb3IgYWxsIHRoZSBoYW5kbGVycyBvZiB0aGlzIHBhcnRpY3VsYXIgbm90aWZpY2F0aW9uXG4gICAgdGhpcy5faGFuZGxlcnNbbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkXS5mb3JFYWNoKChoKSA9PiBoLm9uTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbi5kYXRhKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlZ2lzdHJhdGlvbihpZDogTm90aWZpY2F0aW9uSWQsIHJlZ2lzdHJhdGlvbjogUmVnaXN0cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0hhbmRsZXJzRm9yTm90aWZpY2F0aW9uVHlwZShpZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVyc1tpZF0gPSB0aGlzLl9oYW5kbGVyc1tpZF0uZmlsdGVyKChyZWcpID0+IHJlZyAhPT0gcmVnaXN0cmF0aW9uKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgTW9kZWwsIFBhcmFtZXRlcklkLCBQYXJhbWV0ZXJJbmZvLCBTaGVldFBhdGgsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJJbXBsIH0gZnJvbSAnLi4vLi4vSW1wbC9QYXJhbWV0ZXJJbXBsJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uLy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBQYXJhbWV0ZXJzU2VydmljZSB9IGZyb20gJy4uL1BhcmFtZXRlcnNTZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJzU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBQYXJhbWV0ZXJzU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLlBhcmFtZXRlcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyYW1ldGVyc0ZvclNoZWV0QXN5bmMoc2hlZXRQYXRoOiBTaGVldFBhdGgpOiBQcm9taXNlPEFycmF5PFBhcmFtZXRlckltcGw+PiB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0UGFyYW1ldGVyc0ZvclNoZWV0QXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlNoZWV0UGF0aF06IHNoZWV0UGF0aCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFyYW1ldGVyc0FzeW5jKHBhcmFtZXRlcnMpO1xuICB9XG5cbiAgcHVibGljIGdldEFsbFBhcmFtZXRlcnNBc3luYygpOiBQcm9taXNlPEFycmF5PFBhcmFtZXRlckltcGw+PiB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0UGFyYW1ldGVyc0ZvclNoZWV0QXN5bmMnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRQYXJhbWV0ZXJzQXN5bmMocGFyYW1ldGVycyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtZXRlcnNBc3luYyhpbnB1dFBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogUHJvbWlzZTxBcnJheTxQYXJhbWV0ZXJJbXBsPj4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldFBhcmFtZXRlcnNGb3JTaGVldCwgaW5wdXRQYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PFBhcmFtZXRlckluZm8+O1xuICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoKHBhcmFtZXRlckluZm8pID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJJbXBsKHBhcmFtZXRlckluZm8sIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFyYW1ldGVyVmFsdWVBc3luYyhmaWVsZE5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZyk6IFByb21pc2U8UGFyYW1ldGVySW5mbz4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2NoYW5nZVBhcmFtZXRlclZhbHVlQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlBhcmFtZXRlckZpZWxkTmFtZV06IGZpZWxkTmFtZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5QYXJhbWV0ZXJWYWx1ZV06IG5ld1ZhbHVlLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5DaGFuZ2VQYXJhbWV0ZXJWYWx1ZSwgcGFyYW1ldGVycykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBQYXJhbWV0ZXJJbmZvO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kUGFyYW1ldGVyQnlOYW1lQXN5bmMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxQYXJhbWV0ZXJJbXBsIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFBhcmFtZXRlckFzeW5jKG5hbWUsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwdWJsaWMgZmluZFBhcmFtZXRlckJ5R2xvYmFsRmllbGROYW1lQXN5bmMoZmllbGROYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBhcmFtZXRlckltcGwgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maW5kUGFyYW1ldGVyQXN5bmModW5kZWZpbmVkLCBmaWVsZE5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyYW1ldGVyQXN5bmMobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmaWVsZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8UGFyYW1ldGVySW1wbCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdmaW5kUGFyYW1ldGVyQXN5bmMnLFxuICAgIH07XG4gICAgaWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5QYXJhbWV0ZXJDYXB0aW9uXSA9IG5hbWU7XG4gICAgfSBlbHNlIGlmIChmaWVsZE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5QYXJhbWV0ZXJGaWVsZE5hbWVdID0gZmllbGROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ25hbWUgb3IgZmllbGROYW1lIG11c3QgYmUgcHJvdmlkZWQgdG8gZmluZCBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5GaW5kUGFyYW1ldGVyLCBwYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2VPZlBhcmFtZXRlckluZm8gPSAob2JqZWN0OiBNb2RlbCk6IG9iamVjdCBpcyBQYXJhbWV0ZXJJbmZvID0+IHtcbiAgICAgICAgcmV0dXJuICdmaWVsZE5hbWUnIGluIG9iamVjdDtcbiAgICAgIH07XG5cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHdlIGdvdCBhIHZhbGlkIHJlc3BvbnNlIGJhY2sgYWdhaW5cbiAgICAgIGlmIChpbnN0YW5jZU9mUGFyYW1ldGVySW5mbyhyZXNwb25zZS5yZXN1bHQpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJJbXBsKHJlc3VsdCwgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgRXhlY3V0ZVBhcmFtZXRlcnMsXG4gIFBhcmFtZXRlcklkLFxuICBRdWFudGl0YXRpdmVJbmNsdWRlZFZhbHVlcyxcbiAgU2VsZWN0T3B0aW9ucyBhcyBTZWxlY3RPcHRpb25zSW50ZXJuYWwsXG4gIFNlbGVjdGlvblVwZGF0ZVR5cGUgYXMgU2VsZWN0aW9uVXBkYXRlVHlwZUludGVybmFsLFxuICBWZXJiSWQsXG4gIFZpc3VhbElkLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgRGltZW5zaW9uU2VsZWN0aW9uTW9kZWwsXG4gIEhpZXJhcmNoaWNhbFNlbGVjdGlvbk1vZGVsLFxuICBIb3ZlclR1cGxlSW50ZXJhY3Rpb25Nb2RlbCxcbiAgUmFuZ2VTZWxlY3Rpb25Nb2RlbCxcbiAgU2VsZWN0VHVwbGVzSW50ZXJhY3Rpb25Nb2RlbCxcbiAgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyLFxuICBUdXBsZVNlbGVjdGlvbk1vZGVsLFxuICBWYWx1ZVNlbGVjdGlvbk1vZGVsLFxufSBmcm9tICcuLi8uLi9Nb2RlbHMvU2VsZWN0aW9uTW9kZWxzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uLy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBQYXJhbSB9IGZyb20gJy4uLy4uL1V0aWxzL1BhcmFtJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9TZWxlY3Rpb25TZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25TZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFNlbGVjdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5TZWxlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGNsZWFyIGFsbCB0aGUgc2VsZWN0ZWQgbWFya3MgZm9yIHRoZSBnaXZlbiB3b3Jrc2hlZXQuXG4gICAqXG4gICAqIEBwYXJhbSB2aXN1YWxJZFxuICAgKi9cbiAgcHVibGljIGNsZWFyU2VsZWN0ZWRNYXJrc0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdjbGVhclNlbGVjdGVkTWFya3NBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkNsZWFyU2VsZWN0ZWRNYXJrcywgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjsgLy8gRXhwZWN0aW5nIGFuIGVtcHR5IG1vZGVsIGFuZCBoZW5jZSB0aGUgdm9pZCByZXNwb25zZS5cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gc2VsZWN0IG1hcmtzIGZvciB0aGUgZ2l2ZW4gd29ya3NoZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmlzdWFsSWRcbiAgICogQHBhcmFtIHNlbGVjdGlvbkNyaXRlcmlhXG4gICAqIEBwYXJhbSBzZWxlY3Rpb25VcGRhdGVUeXBlXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIHNlbGVjdGlvbkNyaXRlcmlhczogQXJyYXk8Q29udHJhY3QuU2VsZWN0aW9uQ3JpdGVyaWE+LFxuICAgIHNlbGVjdGlvblVwZGF0ZVR5cGU6IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChzZWxlY3Rpb25Dcml0ZXJpYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ1NlbGVjdGlvbiBjcml0ZXJpYSBtaXNzaW5nIGZvciBzZWxlY3RpbmcgbWFya3MgYnkgdmFsdWUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRlU2VsZWN0aW9uVXBkYXRlVHlwZShzZWxlY3Rpb25VcGRhdGVUeXBlKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyID0gdGhpcy5wYXJzZVNlbGVjdGlvbk1hcmtzKHNlbGVjdGlvbkNyaXRlcmlhcyk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgICBbUGFyYW1ldGVySWQuU2VsZWN0aW9uVXBkYXRlVHlwZV06IHNlbGVjdGlvblR5cGUsXG4gICAgfTtcblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5oaWVyTW9kZWxBcnIgJiYgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuaGllck1vZGVsQXJyLmxlbmd0aCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5IaWVyVmFsU2VsZWN0aW9uTW9kZWxzXSA9IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLmhpZXJNb2RlbEFycjtcbiAgICB9XG4gICAgaWYgKHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLnF1YW50TW9kZWxBcnIgJiYgc2VsZWN0aW9uTW9kZWxDb250YWluZXIucXVhbnRNb2RlbEFyci5sZW5ndGgpIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuUXVhbnRSYW5nZVNlbGVjdGlvbk1vZGVsc10gPSBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5xdWFudE1vZGVsQXJyO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0aW9uTW9kZWxDb250YWluZXIuZGltTW9kZWxBcnIgJiYgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuZGltTW9kZWxBcnIubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkRpbVZhbFNlbGVjdGlvbk1vZGVsc10gPSBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5kaW1Nb2RlbEFycjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TZWxlY3RCeVZhbHVlLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5hcGlGaWx0ZXJIYW5kbGVyQ2hlY2tGb3JDb21tYW5kRXJyb3IocmVzcG9uc2UucmVzdWx0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBleGVjdXRlIGhvdmVyIGFjdGlvbnMgYW5kIHJlbmRlciB0b29sdGlwIGZvciBhIGdpdmVuIHR1cGxlIHJlcHJlc2VudGluZyBhIG1hcmsgaW4gdGhlIHZpc3VhbGl6YXRpb24uXG4gICAqIElmIHRoZSB0b29sdGlwIHBhcmFtZXRlciBpcyBpbmNsdWRlZCBpdCB3aWxsIHNob3cgdGhlIHRvb2x0aXAgb24gaG92ZXIuIElmIG5vdCwgbm8gdG9vbHRpcCBpcyBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHZpc3VhbElkXG4gICAqIEBwYXJhbSBob3ZlcmVkVHVwbGVcbiAgICogQHBhcmFtIHRvb2x0aXBcbiAgICogQHJldHVybnMgZW1wdHkgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV4dGVuc2lvbiBob3N0IGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBpbmZvcm1lZCBvZiB0aGUgcmVxdWVzdCBhbmQgcmVqZWN0cyBvbiBlcnJvclxuICAgKi9cbiAgcHVibGljIGhvdmVyVHVwbGVBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQsIGhvdmVyZWRUdXBsZTogbnVtYmVyLCB0b29sdGlwPzogQ29udHJhY3QuVG9vbHRpcENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgaW50ZXJhY3Rpb25Nb2RlbCA9IG5ldyBIb3ZlclR1cGxlSW50ZXJhY3Rpb25Nb2RlbCh2aXN1YWxJZCwgaG92ZXJlZFR1cGxlLCB0b29sdGlwKTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdob3ZlclR1cGxlQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkhvdmVyVHVwbGVJbnRlcmFjdGlvbl06IGludGVyYWN0aW9uTW9kZWwsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlJhaXNlSG92ZXJUdXBsZU5vdGlmaWNhdGlvbiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gbW9kaWZ5IHNlbGVjdGlvbiwgZXhlY3V0ZSBzZWxlY3QgYWN0aW9ucyBhbmQgcmVuZGVyIHRvb2x0aXAgZm9yIGEgZ2l2ZW4gbGlzdCBvZiB0dXBsZXMgcmVwcmVzZW50aW5nIGEgbWFyayBvciBtYXJrcyBpbiB0aGUgdmlzdWFsaXphdGlvbi5cbiAgICogSWYgdGhlIHRvb2x0aXAgcGFyYW1ldGVyIGlzIGluY2x1ZGVkIGl0IHdpbGwgc2hvdyB0aGUgdG9vbHRpcCBvbiBzZWxlY3QuIElmIG5vdCwgbm8gdG9vbHRpcCBpcyBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHZpc3VhbElkXG4gICAqIEBwYXJhbSBzZWxlY3RlZFR1cGxlc1xuICAgKiBAcGFyYW0gc2VsZWN0T3B0aW9uXG4gICAqIEBwYXJhbSB0b29sdGlwXG4gICAqIEByZXR1cm5zIGVtcHR5IHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBleHRlbnNpb24gaG9zdCBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gaW5mb3JtZWQgb2YgdGhlIHJlcXVlc3QgYW5kIHJlamVjdHMgb24gZXJyb3JcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RUdXBsZXNBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgc2VsZWN0ZWRUdXBsZXM6IEFycmF5PG51bWJlcj4sXG4gICAgc2VsZWN0T3B0aW9uOiBDb250cmFjdC5TZWxlY3RPcHRpb25zLFxuICAgIHRvb2x0aXA/OiBDb250cmFjdC5Ub29sdGlwQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3B0aW9uOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRlU2VsZWN0T3B0aW9uKHNlbGVjdE9wdGlvbik7XG4gICAgbGV0IGludGVyYWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0VHVwbGVzSW50ZXJhY3Rpb25Nb2RlbCh2aXN1YWxJZCwgc2VsZWN0ZWRUdXBsZXMsIG9wdGlvbiwgdG9vbHRpcCk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2VsZWN0VHVwbGVzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlNlbGVjdFR1cGxlc0ludGVyYWN0aW9uXTogaW50ZXJhY3Rpb25Nb2RlbCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuUmFpc2VTZWxlY3RUdXBsZXNOb3RpZmljYXRpb24sIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwaUZpbHRlckhhbmRsZXJDaGVja0ZvckNvbW1hbmRFcnJvcihzZXJ2ZXJQbTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGlmICghc2VydmVyUG1bUGFyYW1ldGVySWQuUGFyYW1ldGVyRXJyb3JdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJQbVtQYXJhbWV0ZXJJZC5JbnZhbGlkRmllbGRzXSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkludmFsaWRTZWxlY3Rpb25GaWVsZE5hbWUsIHNlcnZlclBtW1BhcmFtZXRlcklkLkludmFsaWRGaWVsZHNdKTtcbiAgICB9XG4gICAgaWYgKHNlcnZlclBtW1BhcmFtZXRlcklkLkludmFsaWRWYWx1ZXNdKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFNlbGVjdGlvblZhbHVlLCBzZXJ2ZXJQbVtQYXJhbWV0ZXJJZC5JbnZhbGlkVmFsdWVzXSk7XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJQbVtQYXJhbWV0ZXJJZC5JbnZhbGlkRGF0ZXNdKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFNlbGVjdGlvbkRhdGUsIHNlcnZlclBtW1BhcmFtZXRlcklkLkludmFsaWREYXRlc10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gc2VsZWN0IG1hcmtzIGZvciB0aGUgZ2l2ZW4gd29ya3NoZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmlzdWFsSWRcbiAgICogQHBhcmFtIE1hcmtJbmZvXG4gICAqIEBwYXJhbSBzZWxlY3Rpb25VcGRhdGVUeXBlXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0TWFya3NCeUlkQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIG1hcmtzOiBBcnJheTxDb250cmFjdC5NYXJrSW5mbz4sXG4gICAgc2VsZWN0aW9uVXBkYXRlVHlwZTogQ29udHJhY3QuU2VsZWN0aW9uVXBkYXRlVHlwZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKG1hcmtzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICdNYXJrcyBpbmZvIG1pc3NpbmcgZm9yIHNlbGVjdGluZyBtYXJrcyBieSBJZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGlvblR5cGU6IHN0cmluZyA9IHRoaXMudmFsaWRhdGVTZWxlY3Rpb25VcGRhdGVUeXBlKHNlbGVjdGlvblVwZGF0ZVR5cGUpO1xuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIgPSB0aGlzLnBhcnNlU2VsZWN0aW9uSWRzKG1hcmtzKTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdzZWxlY3RNYXJrc0J5SWRBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TZWxlY3Rpb25VcGRhdGVUeXBlXTogc2VsZWN0aW9uVHlwZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TZWxlY3Rpb25dOiBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5zZWxlY3Rpb24sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TZWxlY3RCeVZhbHVlLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gRXhwZWN0aW5nIGFuIGVtcHR5IG1vZGVsIGFuZCBoZW5jZSB0aGUgdm9pZCByZXNwb25zZS5cbiAgICAgIHJldHVybjtcbiAgICAgIC8vIFRPRE8gSW52ZXN0aWdhdGUgdGhlIGVycm9yIHJlc3BvbnNlIHdpdGggbXVsdGlwbGUgb3V0cHV0IHBhcmFtcyBhbmQgdGhyb3cgZXJyb3IgYWNjb3JkaW5nbHkuXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHByZXBhcmUgdGhlIHByZXMgbW9kZWxzIGZvciBzZWxlY3Rpb24gYnkgTWFya3NJbmZvXG4gICAqIEBwYXJhbSBtYXJrc1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVNlbGVjdGlvbklkcyhtYXJrczogQXJyYXk8Q29udHJhY3QuTWFya0luZm8+KTogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyIHtcbiAgICBjb25zdCBpZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyID0gbmV3IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lcigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHR1cGxlSWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IG1hcmtzW2ldLnR1cGxlSWQ7XG4gICAgICBpZiAodHVwbGVJZCAhPT0gdW5kZWZpbmVkICYmIHR1cGxlSWQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdHVwbGUgaWQgaXMgcHJvdmlkZWQgdXNlIHRoYXQgaW5zdGVhZCBvZiBwYWlyXG4gICAgICAgIGlkcy5wdXNoKHR1cGxlSWQudG9TdHJpbmcoKSk7IC8vIGNvbGxlY3QgdGhlIHR1cGxlIGlkc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLkludGVybmFsRXJyb3IsICd0dXBsZUlkIHBhcnNpbmcgZXJyb3InKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IDApIHtcbiAgICAgIC8vIHR1cGxlIGlkcyBiYXNlZCBzZWxlY3Rpb25cbiAgICAgIGNvbnN0IHR1cGxlU2VsZWN0aW9uTW9kZWw6IFR1cGxlU2VsZWN0aW9uTW9kZWwgPSBuZXcgVHVwbGVTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgdHVwbGVTZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb25UeXBlID0gJ3R1cGxlcyc7XG4gICAgICB0dXBsZVNlbGVjdGlvbk1vZGVsLm9iamVjdElkcyA9IGlkcztcbiAgICAgIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLnNlbGVjdGlvbiA9IHR1cGxlU2VsZWN0aW9uTW9kZWw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gcHJlcGFyZSB0aGUgcHJlcyBtb2RlbHMgZm9yIHNlbGVjdGlvbiBieSB2YWx1ZXMuXG4gICAqXG4gICAqIFN1cHBvcnRzIDMgdHlwZXMgZm9yIHNlbGVjdGlvbjpcbiAgICogMSkgSGllcmFyY2hpY2FsIHZhbHVlIGJhc2VkIHNlbGVjdGlvblxuICAgKiAyKSBSYW5nZSB2YWx1ZSBiYXNlZCBzZWxlY3Rpb25cbiAgICogMykgRGltZW5zaW9uIHZhbHVlIGJhc2VkIHNlbGVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbWFya3NcbiAgICovXG4gIHByaXZhdGUgcGFyc2VTZWxlY3Rpb25NYXJrcyhzZWxlY3Rpb25Dcml0ZXJpYXM6IEFycmF5PENvbnRyYWN0LlNlbGVjdGlvbkNyaXRlcmlhPik6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciB7XG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZWxDb250YWluZXI6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciA9IG5ldyBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uQ3JpdGVyaWFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdCA9IHNlbGVjdGlvbkNyaXRlcmlhc1tpXTtcbiAgICAgIGlmICghKHN0LmZpZWxkTmFtZSAmJiBzdC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHN0LnZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ1NlbGVjdGlvbiBDcml0ZXJpYSBwYXJzaW5nIGVycm9yJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnKFtbQS1aYS16MC05XStdKS4qJywgJ2cnKTtcbiAgICAgIGNvbnN0IHJhbmdlT3B0aW9uID0gc3QudmFsdWUgYXMgQ29udHJhY3QuUmFuZ2VWYWx1ZTtcbiAgICAgIGlmIChjYXRSZWdleC50ZXN0KHN0LmZpZWxkTmFtZSkpIHtcbiAgICAgICAgLy8gSGllcmFyY2hpY2FsIHZhbHVlIHNlbGVjdGlvblxuICAgICAgICBjb25zdCBoaWVyTW9kZWw6IEhpZXJhcmNoaWNhbFNlbGVjdGlvbk1vZGVsID0gdGhpcy5hZGRUb1BhcmFtc0xpc3Qoc3QuZmllbGROYW1lLCBzdC52YWx1ZSkgYXMgSGllcmFyY2hpY2FsU2VsZWN0aW9uTW9kZWw7XG4gICAgICAgIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLmhpZXJNb2RlbEFyci5wdXNoKGhpZXJNb2RlbCk7XG4gICAgICB9IGVsc2UgaWYgKHJhbmdlT3B0aW9uLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJhbmdlT3B0aW9uLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFJhbmdlIHZhbHVlIHNlbGVjdGlvblxuICAgICAgICBjb25zdCBxdWFudE1vZGVsOiBSYW5nZVNlbGVjdGlvbk1vZGVsID0gdGhpcy5hZGRUb1JhbmdlUGFyYW1zTGlzdChzdC5maWVsZE5hbWUsIHJhbmdlT3B0aW9uKTtcbiAgICAgICAgc2VsZWN0aW9uTW9kZWxDb250YWluZXIucXVhbnRNb2RlbEFyci5wdXNoKHF1YW50TW9kZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGltZW5zaW9uIHZhbHVlIHNlbGVjdGlvblxuICAgICAgICBjb25zdCBkaW1Nb2RlbDogRGltZW5zaW9uU2VsZWN0aW9uTW9kZWwgPSB0aGlzLmFkZFRvUGFyYW1zTGlzdChzdC5maWVsZE5hbWUsIHN0LnZhbHVlKSBhcyBEaW1lbnNpb25TZWxlY3Rpb25Nb2RlbDtcbiAgICAgICAgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuZGltTW9kZWxBcnIucHVzaChkaW1Nb2RlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB0cmFuc2Zvcm0gdGhlIGtleSB2YWx1ZSBwYWlyIGludG8gdmFsdWUgYmFzZWQgcHJlcyBtb2RlbCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVNlbGVjdGlvbk1vZGVsXG4gICAqIEBwYXJhbSBmaWVsZE5hbWVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGFkZFRvUGFyYW1zTGlzdChmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IENvbnRyYWN0LkNhdGVnb3JpY2FsVmFsdWUgfCBDb250cmFjdC5SYW5nZVZhbHVlKTogVmFsdWVTZWxlY3Rpb25Nb2RlbCB7XG4gICAgY29uc3QgdmFsdWVTZWxlY3Rpb25Nb2RlbDogVmFsdWVTZWxlY3Rpb25Nb2RlbCA9IG5ldyBWYWx1ZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgY29uc3QgbWFya1ZhbHVlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGNvbnN0IHZhbHVlQXJyOiBBcnJheTxzdHJpbmc+ID0gdmFsdWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hcmtWYWx1ZXMucHVzaChQYXJhbS5zZXJpYWxpemVQYXJhbWV0ZXJWYWx1ZSh2YWx1ZUFycltpXSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrVmFsdWVzLnB1c2goUGFyYW0uc2VyaWFsaXplUGFyYW1ldGVyVmFsdWUodmFsdWUpKTtcbiAgICB9XG5cbiAgICB2YWx1ZVNlbGVjdGlvbk1vZGVsLnF1YWxpZmllZEZpZWxkQ2FwdGlvbiA9IGZpZWxkTmFtZTtcbiAgICB2YWx1ZVNlbGVjdGlvbk1vZGVsLnNlbGVjdFZhbHVlcyA9IG1hcmtWYWx1ZXM7XG4gICAgcmV0dXJuIHZhbHVlU2VsZWN0aW9uTW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHRyYW5zZm9ybSB0aGUga2V5IHZhbHVlIHBhaXIgaW50byByYW5nZSBiYXNlZCBzZWxlY3Rpb24gcHJlcyBtb2RlbC5cbiAgICpcbiAgICogVE9ETzogTmVlZCB0byBoYW5kbGUgdGhlIHBhcnNpbmcgb2YgZGF0ZSB0eXBlIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlU2VsZWN0aW9uTW9kZWxcbiAgICogQHBhcmFtIGZpZWxkTmFtZVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHByaXZhdGUgYWRkVG9SYW5nZVBhcmFtc0xpc3QoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBDb250cmFjdC5SYW5nZVZhbHVlKTogUmFuZ2VTZWxlY3Rpb25Nb2RlbCB7XG4gICAgY29uc3QgcmFuZ2VTZWxlY3Rpb25Nb2RlbDogUmFuZ2VTZWxlY3Rpb25Nb2RlbCA9IG5ldyBSYW5nZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgcmFuZ2VTZWxlY3Rpb25Nb2RlbC5xdWFsaWZpZWRGaWVsZENhcHRpb24gPSBmaWVsZE5hbWU7XG4gICAgaWYgKHZhbHVlLm1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLm1heCAhPT0gbnVsbCkge1xuICAgICAgcmFuZ2VTZWxlY3Rpb25Nb2RlbC5tYXhWYWx1ZSA9IFBhcmFtLnNlcmlhbGl6ZVBhcmFtZXRlclZhbHVlKHZhbHVlLm1heCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5taW4gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5taW4gIT09IG51bGwpIHtcbiAgICAgIHJhbmdlU2VsZWN0aW9uTW9kZWwubWluVmFsdWUgPSBQYXJhbS5zZXJpYWxpemVQYXJhbWV0ZXJWYWx1ZSh2YWx1ZS5taW4pO1xuICAgIH1cbiAgICByYW5nZVNlbGVjdGlvbk1vZGVsLmluY2x1ZGVkID0gdGhpcy52YWxpZGF0ZU51bGxPcHRpb25UeXBlKHZhbHVlLm51bGxPcHRpb24pO1xuICAgIHJldHVybiByYW5nZVNlbGVjdGlvbk1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgc2VsZWN0aW9uIHVwZGF0ZSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZWN0aW9uVXBkYXRlVHlwZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGVjdGlvblVwZGF0ZVR5cGUoc2VsZWN0aW9uVXBkYXRlVHlwZTogQ29udHJhY3QuU2VsZWN0aW9uVXBkYXRlVHlwZSk6IHN0cmluZyB7XG4gICAgaWYgKHNlbGVjdGlvblVwZGF0ZVR5cGUgPT09IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUuUmVwbGFjZSkge1xuICAgICAgcmV0dXJuIFNlbGVjdGlvblVwZGF0ZVR5cGVJbnRlcm5hbC5SZXBsYWNlO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uVXBkYXRlVHlwZSA9PT0gQ29udHJhY3QuU2VsZWN0aW9uVXBkYXRlVHlwZS5BZGQpIHtcbiAgICAgIHJldHVybiBTZWxlY3Rpb25VcGRhdGVUeXBlSW50ZXJuYWwuQWRkO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uVXBkYXRlVHlwZSA9PT0gQ29udHJhY3QuU2VsZWN0aW9uVXBkYXRlVHlwZS5SZW1vdmUpIHtcbiAgICAgIHJldHVybiBTZWxlY3Rpb25VcGRhdGVUeXBlSW50ZXJuYWwuUmVtb3ZlO1xuICAgIH1cbiAgICByZXR1cm4gU2VsZWN0aW9uVXBkYXRlVHlwZUludGVybmFsLlJlcGxhY2U7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHZhbGlkYXRlIHRoZSBpbmNsdWRlIHR5cGUgZm9yIHJhbmdlIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIG51bGxPcHRpb25cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVOdWxsT3B0aW9uVHlwZShudWxsT3B0aW9uOiBDb250cmFjdC5GaWx0ZXJOdWxsT3B0aW9uIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAobnVsbE9wdGlvbikge1xuICAgICAgaWYgKG51bGxPcHRpb24gPT09IENvbnRyYWN0LkZpbHRlck51bGxPcHRpb24uTnVsbFZhbHVlcykge1xuICAgICAgICByZXR1cm4gUXVhbnRpdGF0aXZlSW5jbHVkZWRWYWx1ZXMuSW5jbHVkZU51bGw7XG4gICAgICB9IGVsc2UgaWYgKG51bGxPcHRpb24gPT09IENvbnRyYWN0LkZpbHRlck51bGxPcHRpb24uTm9uTnVsbFZhbHVlcykge1xuICAgICAgICByZXR1cm4gUXVhbnRpdGF0aXZlSW5jbHVkZWRWYWx1ZXMuSW5jbHVkZU5vbk51bGw7XG4gICAgICB9IGVsc2UgaWYgKG51bGxPcHRpb24gPT09IENvbnRyYWN0LkZpbHRlck51bGxPcHRpb24uQWxsVmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBRdWFudGl0YXRpdmVJbmNsdWRlZFZhbHVlcy5JbmNsdWRlQWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBRdWFudGl0YXRpdmVJbmNsdWRlZFZhbHVlcy5JbmNsdWRlQWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgc2VsZWN0IG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdE9wdGlvblxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGVjdE9wdGlvbihzZWxlY3RPcHRpb246IENvbnRyYWN0LlNlbGVjdE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmIChzZWxlY3RPcHRpb24gPT09IENvbnRyYWN0LlNlbGVjdE9wdGlvbnMuU2ltcGxlKSB7XG4gICAgICByZXR1cm4gU2VsZWN0T3B0aW9uc0ludGVybmFsLlNpbXBsZTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdE9wdGlvbiA9PT0gQ29udHJhY3QuU2VsZWN0T3B0aW9ucy5Ub2dnbGUpIHtcbiAgICAgIHJldHVybiBTZWxlY3RPcHRpb25zSW50ZXJuYWwuVG9nZ2xlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ09ubHkgc2ltcGxlIGFuZCB0b2dnbGUgc2VsZWN0IG9wdGlvbnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEV4ZWN1dGVSZXNwb25zZSwgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLCBJbnRlcm5hbFRhYmxlYXVFcnJvciwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4uLy4uL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IFNob3VsZFRocm93IH0gZnJvbSAnLi4vLi4vVXRpbHMvRW51bUNvbnZlcnRlcic7XG5cbi8qKlxuICogRWFjaCBTZXJ2Y2VJbXBsIHNob3VsZCBleHRlbmQgdGhpcyBiYXNlIGNsYXNzIGZvciB0aGUgc2FrZSBvZlxuICogcHJvcGVyIGVycm9yIGhhbmRsaW5nLiAgVGhpcyBiYXNlIGhhbmRsZXMgdGhlIGNvbnZlcnNpb25cbiAqIGZyb20gaW50ZXJuYWwgZXJyb3JzIHRvIGV4dGVybmFsIGVycm9ycyB0aGF0IHdlIHRocm93IHRvIGRldmVsb3BlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZpY2VJbXBsQmFzZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kaXNwYXRjaGVyOiBJbnRlcm5hbEFwaURpc3BhdGNoZXIsIHByb3RlY3RlZCBfcmVnaXN0cnlJZDogbnVtYmVyKSB7fVxuXG4gIHByb3RlY3RlZCBleGVjdXRlKHZlcmI6IFZlcmJJZCwgcGFyYW1zOiBFeGVjdXRlUGFyYW1ldGVycyk6IFByb21pc2U8RXhlY3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoZXIuZXhlY3V0ZSh2ZXJiLCBwYXJhbXMpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgLy8gQW55IGludGVybmFsIGVycm9yIHRoYXQgY29tZXMgZnJvbSB0aGUgZGlzcGF0Y2hlciBzaG91bGQgYmUgY29udmVydGVkXG4gICAgICAvLyB0byBhbiBleHRlcm5hbCBlcnJvciB1c2luZyB0aGUgZW51bSBtYXBwZXIgZm9yIGVycm9yIGNvZGVzLlxuICAgICAgY29uc3QgaW50ZXJuYWxFcnJvciA9IGVycm9yIGFzIEludGVybmFsVGFibGVhdUVycm9yO1xuICAgICAgY29uc3QgZXh0ZXJuYWxFcnJvckNvZGU6IEVycm9yQ29kZXMgPSBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MuZXJyb3JDb2RlLmNvbnZlcnQoaW50ZXJuYWxFcnJvci5lcnJvckNvZGUsIFNob3VsZFRocm93Lk5vKTtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoZXh0ZXJuYWxFcnJvckNvZGUsIGludGVybmFsRXJyb3IubWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFNoZWV0U2l6ZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2l6ZVNlcnZpY2UgfSBmcm9tICcuLi9TaXplU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBTaXplU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBTaXplU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLlNpemU7XG4gIH1cblxuICBjaGFuZ2VTaXplQXN5bmMobmFtZTogc3RyaW5nLCBuZXdTaXplOiBTaGVldFNpemUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnY2hhbmdlU2l6ZUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaGVldE5hbWVdOiBuYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLk1pbkhlaWdodF06IG5ld1NpemUubWluU2l6ZT8uaGVpZ2h0IHx8IDAsXG4gICAgICBbUGFyYW1ldGVySWQuTWluV2lkdGhdOiBuZXdTaXplLm1pblNpemU/LndpZHRoIHx8IDAsXG4gICAgICBbUGFyYW1ldGVySWQuTWF4SGVpZ2h0XTogbmV3U2l6ZS5tYXhTaXplPy5oZWlnaHQgfHwgMCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5NYXhXaWR0aF06IG5ld1NpemUubWF4U2l6ZT8ud2lkdGggfHwgMCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuU2V0U2hlZXRTaXplLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChfcmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIFBhcmFtZXRlcklkLCBTdG9yeVBvaW50TW9kZWwsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU3RvcnlBY3RpdmF0aW9uU2VydmljZSB9IGZyb20gJy4uL1N0b3J5QWN0aXZhdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgU3RvcnlBY3RpdmF0aW9uU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBTdG9yeUFjdGl2YXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuU3RvcnlBY3RpdmF0aW9uO1xuICB9XG5cbiAgYWN0aXZhdGVOZXh0U3RvcnlQb2ludEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuQWN0aXZhdGVOZXh0U3RvcnlQb2ludDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYWN0aXZhdGVOZXh0U3RvcnlQb2ludEFzeW5jJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgYWN0aXZhdGVQcmV2aW91c1N0b3J5UG9pbnRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkFjdGl2YXRlUHJldmlvdXNTdG9yeVBvaW50O1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhY3RpdmF0ZVByZXZpb3VzU3RvcnlQb2ludEFzeW5jJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgYWN0aXZhdGVTdG9yeVBvaW50QXN5bmMoaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuQWN0aXZhdGVTdG9yeVBvaW50O1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhY3RpdmF0ZVN0b3J5UG9pbnRBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlN0b3J5UG9pbnRJbmRleF0gPSBpbmRleDtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIHJldmVydFN0b3J5UG9pbnRBc3luYyhpbmRleDogbnVtYmVyKTogUHJvbWlzZTxTdG9yeVBvaW50TW9kZWw+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLlJldmVydFN0b3J5UG9pbnQ7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3JldmVydFN0b3J5UG9pbnRBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlN0b3J5UG9pbnRJbmRleF0gPSBpbmRleDtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxTdG9yeVBvaW50TW9kZWw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdCBhcyBTdG9yeVBvaW50TW9kZWw7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgUGFyYW1ldGVySWQsIFZlcmJJZCwgVmlzdWFsSWQsIFZpc3VhbFNwZWNpZmljYXRpb24gfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFZpc3VhbE1vZGVsU2VydmljZSB9IGZyb20gJy4uL1Zpc3VhbE1vZGVsU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBWaXN1YWxNb2RlbFNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgVmlzdWFsTW9kZWxTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuVmlzdWFsTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmlzdWFsU3BlY2lmaWNhdGlvbkFzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8Q29udHJhY3QuVmlzdWFsU3BlY2lmaWNhdGlvbj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRWaXN1YWxTcGVjaWZpY2F0aW9uQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLldvcmtzaGVldE5hbWVdOiB2aXN1YWxJZC53b3Jrc2hlZXQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldFZpc3VhbFNwZWNpZmljYXRpb24sIHBhcmFtZXRlcnMpLnRoZW48Q29udHJhY3QuVmlzdWFsU3BlY2lmaWNhdGlvbj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgVmlzdWFsU3BlY2lmaWNhdGlvbjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEN1c3RvbVZpZXdNb2RlbCwgRXhlY3V0ZVBhcmFtZXRlcnMsIFBhcmFtZXRlcklkLCBWZXJiSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQ3VzdG9tVmlld0ltcGwgfSBmcm9tICcuLi8uLi9JbXBsL0N1c3RvbVZpZXdJbXBsJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBWaXpTZXJ2aWNlIH0gZnJvbSAnLi4vVml6U2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBWaXpTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFZpelNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5WaXo7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVml6SW1hZ2VBc3luYyhpbnB1dFNwZWM6IG9iamVjdCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2NyZWF0ZVZpekltYWdlQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpekFQSUlucHV0SnNvbl06IEpTT04uc3RyaW5naWZ5KGlucHV0U3BlYyksXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlZpekFQSSwgcGFyYW1ldGVycykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlU2hlZXRBc3luYyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYWN0aXZhdGVTaGVldEFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Td2l0Y2hUb1NoZWV0TmFtZV06IG5hbWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkFjdGl2YXRlU2hlZXQsIHBhcmFtZXRlcnMpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEN1c3RvbVZpZXdzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDdXN0b21WaWV3SW1wbD4+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0Q3VzdG9tVmlld3NBc3luYycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldEN1c3RvbVZpZXdzLCBwYXJhbWV0ZXJzKS50aGVuPEFycmF5PEN1c3RvbVZpZXdJbXBsPj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21WaWV3cyA9IHJlc3BvbnNlLnJlc3VsdCBhcyBBcnJheTxDdXN0b21WaWV3TW9kZWw+O1xuICAgICAgcmV0dXJuIGN1c3RvbVZpZXdzLm1hcCgoY3VzdG9tVmlldzogQ3VzdG9tVmlld01vZGVsKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ3VzdG9tVmlld0ltcGwoY3VzdG9tVmlldywgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Q3VzdG9tVmlld0FzeW5jKGN1c3RvbVZpZXdOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEN1c3RvbVZpZXdJbXBsPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3Nob3dDdXN0b21WaWV3QXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdOYW1lXTogY3VzdG9tVmlld05hbWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlNob3dDdXN0b21WaWV3LCBwYXJhbWV0ZXJzKS50aGVuPEN1c3RvbVZpZXdJbXBsPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbVZpZXcgPSByZXNwb25zZS5yZXN1bHQgYXMgQ3VzdG9tVmlld01vZGVsO1xuICAgICAgcmV0dXJuIG5ldyBDdXN0b21WaWV3SW1wbChjdXN0b21WaWV3LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDdXN0b21WaWV3QXN5bmMoY3VzdG9tVmlld05hbWU6IHN0cmluZyk6IFByb21pc2U8Q3VzdG9tVmlld0ltcGw+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmVtb3ZlQ3VzdG9tVmlld0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DdXN0b21WaWV3TmFtZV06IGN1c3RvbVZpZXdOYW1lLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5SZW1vdmVDdXN0b21WaWV3LCBwYXJhbWV0ZXJzKS50aGVuPEN1c3RvbVZpZXdJbXBsPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbVZpZXcgPSByZXNwb25zZS5yZXN1bHQgYXMgQ3VzdG9tVmlld01vZGVsO1xuICAgICAgcmV0dXJuIG5ldyBDdXN0b21WaWV3SW1wbChjdXN0b21WaWV3LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQ3VzdG9tVmlld0FzeW5jKGN1c3RvbVZpZXdOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEN1c3RvbVZpZXdJbXBsPiB7XG4gICAgLy8gQ3VzdG9tVmlld0lzRGVmYXVsdCBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciwgYnV0IG91ciBBUEkgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gYWxsb3cgaXQgdG8gYmUgc3BlY2lmaWVkIHlldC5cbiAgICAvLyBXZSBzaG91bGQgYWRkIGEgJ2RlZmF1bHQnIHBhcmFtZXRlciB0byB0aGUgaW50ZXJmYWNlLlxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdzYXZlQ3VzdG9tVmlld0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DdXN0b21WaWV3TmFtZV06IGN1c3RvbVZpZXdOYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdJc0RlZmF1bHRdOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuU2F2ZVdvcmtib29rQXNDdXN0b21WaWV3LCBwYXJhbWV0ZXJzKS50aGVuPEN1c3RvbVZpZXdJbXBsPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbVZpZXcgPSByZXNwb25zZS5yZXN1bHQgYXMgQ3VzdG9tVmlld01vZGVsO1xuICAgICAgcmV0dXJuIG5ldyBDdXN0b21WaWV3SW1wbChjdXN0b21WaWV3LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3RpdmVDdXN0b21WaWV3QXNEZWZhdWx0QXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3NldEFjdGl2ZUN1c3RvbVZpZXdBc0RlZmF1bHRBc3luYycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlNldEFjdGl2ZUN1c3RvbVZpZXdBc0RlZmF1bHQsIHBhcmFtZXRlcnMpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmVBc3luYyhjdXN0b21WaWV3OiBDdXN0b21WaWV3SW1wbCk6IFByb21pc2U8Q3VzdG9tVmlld0ltcGw+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2F2ZUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DdXN0b21WaWV3THVpZF06IGN1c3RvbVZpZXcubHVpZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DdXN0b21WaWV3TmFtZV06IGN1c3RvbVZpZXcubmFtZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DdXN0b21WaWV3SXNEZWZhdWx0XTogY3VzdG9tVmlldy5pc0RlZmF1bHQsXG4gICAgICBbUGFyYW1ldGVySWQuQ3VzdG9tVmlld0lzUHVibGljXTogY3VzdG9tVmlldy5zaGFyZWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlVwZGF0ZUN1c3RvbVZpZXcsIHBhcmFtZXRlcnMpLnRoZW48Q3VzdG9tVmlld0ltcGw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tVmlldyA9IHJlc3BvbnNlLnJlc3VsdCBhcyBDdXN0b21WaWV3TW9kZWw7XG4gICAgICByZXR1cm4gbmV3IEN1c3RvbVZpZXdJbXBsKGN1c3RvbVZpZXcsIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTcmNBc3luYygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRDdXJyZW50U3JjQXN5bmMnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRDdXJyZW50U3JjLCBwYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UucmVzdWx0IGFzIHN0cmluZyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJJZCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyBhcyBFeHRlcm5hbEVudW1Db252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9FbnVtTWFwcGluZ3MvRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzJztcbmltcG9ydCB7IERhc2hib2FyZE9iamVjdEltcGwgfSBmcm9tICcuLi8uLi9JbXBsL0Rhc2hib2FyZE9iamVjdEltcGwnO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IFBhcmFtIH0gZnJvbSAnLi4vLi4vVXRpbHMvUGFyYW0nO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSAnLi4vWm9uZVNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgWm9uZVNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgWm9uZVNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5ab25lO1xuICB9XG5cbiAgcHVibGljIHNldFZpc2liaWxpdHlBc3luYyhcbiAgICBkYXNoYm9hcmQ6IHN0cmluZyxcbiAgICBkYXNoYm9hcmRab25lTWFwOiBNYXA8bnVtYmVyLCBEYXNoYm9hcmRPYmplY3RJbXBsPixcbiAgICB6b25lVmlzaWJpbGl0eU1hcDogQ29udHJhY3QuWm9uZVZpc2liaWxpdHlNYXAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3NldFZpc2liaWxpdHlBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuRGFzaGJvYXJkXTogZGFzaGJvYXJkLFxuICAgICAgW1BhcmFtZXRlcklkLlpvbmVJZHNWaXNpYmlsaXR5TWFwXToge30sXG4gICAgfTtcblxuICAgIC8vIHpvbmVWaXNpYmlsaXR5TWFwIGNhbiBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIGEgTWFwIC0gY29udmVydCBpdCB0byBhIE1hcFxuICAgIGNvbnN0IHBhcmFtZXRlckFzTWFwID0gUGFyYW0uY29udmVydFBhcmFtZXRlclRvTWFwKHpvbmVWaXNpYmlsaXR5TWFwLCAnem9uZVZpc2liaWxpdHlNYXAnKTtcblxuICAgIHBhcmFtZXRlckFzTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIEVycm9ySGVscGVycy52ZXJpZnlab25lSXNWYWxpZChkYXNoYm9hcmRab25lTWFwLCBOdW1iZXIucGFyc2VJbnQoa2V5LCAxMCkpO1xuICAgICAgRXJyb3JIZWxwZXJzLnZlcmlmeUVudW1WYWx1ZTxEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZT4odmFsdWUsIERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlUeXBlLCAnRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eVR5cGUnKTtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuWm9uZUlkc1Zpc2liaWxpdHlNYXBdW2tleV0gPSBFeHRlcm5hbEVudW1Db252ZXJ0ZXIuc2V0VmlzaWJpbGl0eVR5cGUuY29udmVydCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TZXRab25lVmlzaWJpbGl0eSwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlQW5kUmVzaXplQXN5bmMoXG4gICAgZGFzaGJvYXJkOiBzdHJpbmcsXG4gICAgZGFzaGJvYXJkWm9uZU1hcDogTWFwPG51bWJlciwgRGFzaGJvYXJkT2JqZWN0SW1wbD4sXG4gICAgZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXk6IENvbnRyYWN0LkRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkRhc2hib2FyZF06IGRhc2hib2FyZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVMaXN0XTogZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXksXG4gICAgfTtcblxuICAgIGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5LmZvckVhY2goKGRhc2hib2FyZE9iamVjdDogQ29udHJhY3QuRGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlKSA9PiB7XG4gICAgICBFcnJvckhlbHBlcnMudmVyaWZ5Wm9uZUlzVmFsaWRBbmRGbG9hdGluZyhkYXNoYm9hcmRab25lTWFwLCBkYXNoYm9hcmRPYmplY3QuZGFzaGJvYXJkT2JqZWN0SUQpO1xuICAgICAgRXJyb3JIZWxwZXJzLnZlcmlmeVdpZHRoQW5kSGVpZ2h0T2ZEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUoZGFzaGJvYXJkT2JqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLk1vdmVBbmRSZXNpemVab25lcywgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlSW5mbyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgYSB0YWJsZSBzdW1tYXJ5LlxuICogVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIEltcGwgcGF0dGVybiBhcyBpdCBpcyBqdXN0IGEgcHJvcGVydHkgYmFnLlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVTdW1tYXJ5IGltcGxlbWVudHMgQ29udHJhY3QuVGFibGVTdW1tYXJ5IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RhYmxlSW5mbzogVGFibGVJbmZvKSB7fVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUluZm8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVJbmZvLmlkO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25uZWN0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVJbmZvLmNvbm5lY3Rpb25JZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VzdG9tU1FMKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlSW5mby5jdXN0b21TUUw7XG4gIH1cbn1cbiIsImltcG9ydCB7IEVtYmVkZGluZ0Vycm9yQ29kZXMsIEVycm9yQ29kZXMsIFNoYXJlZEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuXG4vKipcbiAqIEN1c3RvbSBlcnJvciBjbGFzcyB0aGF0IGV4dGVuZHMgdGhlIGRlZmF1bHQgSmF2YVNjcmlwdCBFcnJvciBvYmplY3QuXG4gKiBUaGlzIGFsbG93cyB1cyB0byBwcm92aWRlIGEgZmllbGQgd2l0aCBhIHNwZWNpZmljIGVycm9yIGNvZGVcbiAqIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gbW9yZSBlYXNpbHkgcHJvZ3JhbW1hdGljYWxseSByZXNwb25kXG4gKiB0byBlcnJvciBzY2VuYXJpb3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZWF1RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lcnJvckNvZGU6IEVycm9yQ29kZXMgfCBFbWJlZGRpbmdFcnJvckNvZGVzIHwgU2hhcmVkRXJyb3JDb2RlcywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYCR7X2Vycm9yQ29kZX06ICR7bWVzc2FnZX1gKTtcblxuICAgIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYXN0ZXIvQnJlYWtpbmctQ2hhbmdlcy5tZCNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAvLyBFcnJvciBpbmhlcml0YW5jZSBkb2VzIG5vdCB3b3JrIHByb3BlcnRseSB3aGVuIGNvbXBpbGluZyB0byBFUzUsIHRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGZvcmNlXG4gICAgLy8gdGhlIHByb3RvIGNoYWluIHRvIGJlIGJ1aWx0IGNvcnJlY3RseS4gIFNlZSB0aGUgZ2l0aHViIGxpbmsgYWJvdmUgZm9yIGRldGFpbHMuXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFRhYmxlYXVFcnJvci5wcm90b3R5cGUpO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvckNvZGUoKTogRXJyb3JDb2RlcyB8IEVtYmVkZGluZ0Vycm9yQ29kZXMgfCBTaGFyZWRFcnJvckNvZGVzIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JDb2RlO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBJbnRlcm5hbENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhVmFsdWUgfSBmcm9tICcuLi9Nb2RlbHMvR2V0RGF0YU1vZGVscyc7XG5cbi8qKlxuICogSW4gdmVyc2lvbiAyIG9mIHRoZSBpbnRlcmZhY2UsIHdlIHNob3VsZCBjb2xsYXBzZSB2YWx1ZSBpbnRvIG5hdGl2ZVZhbHVlLCBhbmQgZG8gYWxsIHRoaXMgd29yayBvdmVyXG4gKiBpbiB0aGUgcGxhdGZvcm0uXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVmFsdWVGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBNYWtlUGFyYW1ldGVyRGF0YVZhbHVlKGludGVybmFsRGF0YVZhbHVlOiBJbnRlcm5hbENvbnRyYWN0LkRhdGFWYWx1ZSwgZGF0YVR5cGU6IEludGVybmFsQ29udHJhY3QuRGF0YVR5cGUpOiBEYXRhVmFsdWUge1xuICAgIC8vIFBhcmFtZXRlciB2YWx1ZXMgYXJlIGFsbCBzdHJpbmdzLCBjb252ZXJ0IGZyb20gc3RyaW5nIHRvIHZhbHVlXG4gICAgcmV0dXJuIG5ldyBEYXRhVmFsdWUoXG4gICAgICBpbnRlcm5hbERhdGFWYWx1ZS52YWx1ZSxcbiAgICAgIEludGVybmFsQ29udHJhY3QuRGF0YVR5cGVDb252ZXJ0ZXIuY29udmVydFN0cmluZ1ZhbHVlVG9OYXRpdmVWYWx1ZShpbnRlcm5hbERhdGFWYWx1ZS52YWx1ZSwgZGF0YVR5cGUpLFxuICAgICAgaW50ZXJuYWxEYXRhVmFsdWUuZm9ybWF0dGVkVmFsdWUsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgTWFrZUZpbHRlckRhdGFWYWx1ZShpbnRlcm5hbERhdGFWYWx1ZTogSW50ZXJuYWxDb250cmFjdC5EYXRhVmFsdWUpOiBEYXRhVmFsdWUge1xuICAgIC8vIEZpbHRlcnMgYWxyZWFkeSBoYXZlIG5hdGl2ZSB0eXBlIGluIHZhbHVlLCBqdXN0IHVzZSB0aGF0IGZvciBuYXRpdmVWYWx1ZSBhbHNvXG4gICAgcmV0dXJuIG5ldyBEYXRhVmFsdWUoaW50ZXJuYWxEYXRhVmFsdWUudmFsdWUsIGludGVybmFsRGF0YVZhbHVlLnZhbHVlLCBpbnRlcm5hbERhdGFWYWx1ZS5mb3JtYXR0ZWRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIE1ha2VUYWJsZURhdGFWYWx1ZShpbnRlcm5hbERhdGFWYWx1ZTogSW50ZXJuYWxDb250cmFjdC5EYXRhVmFsdWUsIGRhdGFUeXBlOiBJbnRlcm5hbENvbnRyYWN0LkRhdGFUeXBlKTogRGF0YVZhbHVlIHtcbiAgICAvLyBEYXRhVGFibGVzIGNvbnRhaW4gYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IGRhdGUgYXMgc3RyaW5nIHwgJyVudWxsJVxuICAgIC8vIGNvbnZlcnRWYWx1ZVRvTmF0aXZlVmFsdWUgY29udmVydHMgZGF0ZXMgYXMgc3RyaW5nIHRvIGRhdGVzLCBhbmQgYW55IHNwZWNpYWwgdG8gbnVsbFxuICAgIC8vIChib29sZWFuLCBudW1iZXJzLCBzdHJpbmdzIGFyZSBwYXNzZWQgdGhyb3VnaClcbiAgICAvLyBCZWNhdXNlIG9mIEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIC0gd2UgY2FuIGhhdmUgdW5kZWZpbmVkIHZhbHVlcywgd2hpY2ggYXJlIGRpZmZlcmVudCB0aGFuIGFueSBzcGVjaWFsXG4gICAgcmV0dXJuIG5ldyBEYXRhVmFsdWUoXG4gICAgICBpbnRlcm5hbERhdGFWYWx1ZS52YWx1ZSxcbiAgICAgIGludGVybmFsRGF0YVZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBJbnRlcm5hbENvbnRyYWN0LkRhdGFUeXBlQ29udmVydGVyLmNvbnZlcnRWYWx1ZVRvTmF0aXZlVmFsdWUoaW50ZXJuYWxEYXRhVmFsdWUudmFsdWUsIGRhdGFUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGludGVybmFsRGF0YVZhbHVlLmZvcm1hdHRlZFZhbHVlLFxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogQSBQcm9taXNlIHdyYXBwZXIgY2xhc3MgYWxsb3dpbmcgZm9yIHJlc29sdmluZy9yZWplY3RpbmcgdGhlIFByb21pc2Ugb3V0c2lkZSB0aGUgY29udGV4dCBvZiBpdHMgY29uc3RydWN0b3IuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERlZmVycmVkXG4gKiBAdGVtcGxhdGUgVFJlc29sdmUgVGhlIHR5cGUgdXNlZCB0byByZXNvbHZlIHRoZSBwcm9taXNlLlxuICogQHRlbXBsYXRlIFRSZWplY3QgVGhlIHR5cGUgdXNlZCB0byByZWplY3QgdGhlIHByb21pc2UuIERlZmF1bHRzIHRvIGFueS5cbiAqIEBsaW5rIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNDYzNzQzNlxuICovXG5leHBvcnQgY2xhc3MgRGVmZXJyZWQ8VFJlc29sdmUsIFRSZWplY3QgPSBhbnk+IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZTogUHJvbWlzZTxUUmVzb2x2ZT47XG4gIHByaXZhdGUgX3Jlc29sdmU6IChyZXNwb25zZTogVFJlc29sdmUgfCBQcm9taXNlTGlrZTxUUmVzb2x2ZT4pID0+IHZvaWQ7XG4gIHByaXZhdGUgX3JlamVjdDogKHJlYXNvbj86IFRSZWplY3QpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRGVmZXJyZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2U8VFJlc29sdmU+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIFByb21pc2UuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7UHJvbWlzZTxUUmVzb2x2ZT59XG4gICAqL1xuICBnZXQgcHJvbWlzZSgpOiBQcm9taXNlPFRSZXNvbHZlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHdyYXBwZWQgUHJvbWlzZS5cbiAgICpcbiAgICogQHBhcmFtIHsoVFJlc29sdmUgfCBQcm9taXNlTGlrZTxUUmVzb2x2ZT4pfSByZXNwb25zZSBUaGUgYXJndW1lbnQgdG8gYmUgcmVzb2x2ZWQgYnkgdGhlIFByb21pc2UuXG4gICAqIEByZXR1cm5zIHsqfSAge3ZvaWR9XG4gICAqL1xuICByZXNvbHZlKHJlc3BvbnNlOiBUUmVzb2x2ZSB8IFByb21pc2VMaWtlPFRSZXNvbHZlPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcmVzb2x2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc29sdmUocmVzcG9uc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7VFJlamVjdH0gW3JlYXNvbl0gVGhlIHJlYXNvbiB3aHkgdGhlIFByb21pc2UgcmVqZWN0ZWQuXG4gICAqIEByZXR1cm5zIHsqfSAge3ZvaWR9XG4gICAqL1xuICByZWplY3QocmVhc29uPzogVFJlamVjdCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcmVqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFVucmVnaXN0ZXJUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSAzMDAwMDtcbiIsImltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vVGFibGVhdUVycm9yJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnZlcnRzIGZyb20gYSBzb3VyY2UgZW51bSB2YWx1ZSB0byBkZXN0aW5hdGlvbiBlbnVtXG4gKiB2YWx1ZSBnaXZlbiBhIG1hcHBpbmcgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gd2hlbiBjb25zdHJ1Y3RlZC5cbiAqXG4gKiBOb3RlOiBUaGlzIGV4YWN0IHNhbWUgY2xhc3MgaXMgZGVmaW5lZCBpbiBhcGktY29yZS4gIEdpdmVuIGl0cyBzbWFsbFxuICogbmF0dXJlLCBpdCBpcyBub3Qgd29ydGggaGF2aW5nIGluIGEgc2VwYXJhdGUgcHJvamVjdCB0byBzaGFyZSB0aGlzIGJldHdlZW5cbiAqIGFwaS1jb3JlIGFuZCBhcGktc2hhcmVkLiAgSWYgbW9yZSB1dGlsaXR5IGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdGhhdCBpcyB1c2VkIGJ5IGFwaS1jb3JlXG4gKiBhbmQgYXBpLXNoYXJlZCBidXQgaGFzIG5vIG90aGVyIGRlcGVuZGVjaWVzLCBhIHV0aWx0aXR5IHByb2plY3QgbWlnaHQgYmUgbWVyaXRlZCxcbiAqIGFuZCB0aGlzIGNsYXNzIGNvdWxkIGJlIG1vdmVkLlxuICovXG5leHBvcnQgY2xhc3MgRW51bUNvbnZlcnRlcjxUU291cmNlVHlwZSBleHRlbmRzIHN0cmluZywgVERlc3RpbmF0aW9uVHlwZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfbWFwcGluZ3M6IHsgW2VudW1WYWw6IHN0cmluZ106IFREZXN0aW5hdGlvblR5cGUgfSwgcHJpdmF0ZSBfZGVmYXVsdFZhbD86IFREZXN0aW5hdGlvblR5cGUpIHt9XG5cbiAgcHVibGljIGNvbnZlcnQoZW51bVZhbDogVFNvdXJjZVR5cGUsIHRocm93SWZNaXNzaW5nOiBTaG91bGRUaHJvdyA9IFNob3VsZFRocm93Llllcyk6IFREZXN0aW5hdGlvblR5cGUge1xuICAgIGlmICh0aGlzLl9tYXBwaW5ncy5oYXNPd25Qcm9wZXJ0eShlbnVtVmFsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzW2VudW1WYWwgYXMgc3RyaW5nXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVmYXVsdFZhbCAhPT0gdW5kZWZpbmVkICYmIHRocm93SWZNaXNzaW5nICE9PSBTaG91bGRUaHJvdy5ZZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgRW51bSBNYXBwaW5nIG5vdCBmb3VuZCBmb3I6ICR7ZW51bVZhbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBTaG91bGRUaHJvdyB7XG4gIFllcyA9ICd5ZXMnLFxuICBObyA9ICdubycsXG59XG4iLCJpbXBvcnQge1xuICBEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUsXG4gIEV4cG9ydERhdGFPcHRpb25zLFxuICBFeHBvcnRQREZPcHRpb25zIGFzIEV4dGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgRXhwb3J0U2NlbmFyaW9zRm9yUERGQW5kUG93ZXJQb2ludCxcbiAgUHJpbnRPcmllbnRhdGlvbixcbiAgUHJpbnRQYWdlU2l6ZSxcbiAgUHJpbnRTY2FsaW5nLFxuICBTaGFyZWRFcnJvckNvZGVzLFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT2JqZWN0SW1wbCB9IGZyb20gJy4uL0ltcGwvRGFzaGJvYXJkT2JqZWN0SW1wbCc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgUGFyYW0gfSBmcm9tICcuL1BhcmFtJztcblxuaW50ZXJmYWNlIEVudW1MaWtlIHtcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjb25zdHJ1Y3QgY29tbW9uIGVycm9ycyB0aHJvdWdob3V0IHRoZSBleHRlcm5hbFxuICogcHJvamVjdHMgKGFwaS1zaGFyZWQsIGV4dGVuc2lvbnMtYXBpLCBldGMuKS4gIEl0IGhhcyBzb21lIGR1cGxpY2F0aW9uIHdpdGhcbiAqIHRoZSBFcnJvckhlbHBlcnMgY2xhc3MgaW4gYXBpLWNvcmUsIGJ1dCBpcyBzZXBhcmF0ZSBkdWUgdG8gdGhlIG5lZWQgdG8gdGhyb3dcbiAqIGFuIGV4dGVybmFsIFRhYmxlYXVFcnJvciB2cy4gYW4gSW50ZXJuYWxUYWJsZWF1RXJyb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBFcnJvckhlbHBlcnMge1xuICAvKipcbiAgICogVGhyb3dzIHdpdGggY29kZSBJbnRlcm5hbEVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpTmFtZSBuYW1lIG9mIGFwaSB0aGF0IHdhcyBjYWxsZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFwaU5vdEltcGxlbWVudGVkKGFwaU5hbWU6IHN0cmluZyk6IFRhYmxlYXVFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgJHthcGlOYW1lfSBBUEkgbm90IHlldCBpbXBsZW1lbnRlZC5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gaW50ZXJuYWwgZXJyb3IgaWYgYXJndW1lbnQgaXMgbnVsbCBvciB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhcmd1bWVudFZhbHVlIHZhbHVlIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gYXJndW1lbnROYW1lIG5hbWUgb2YgYXJndW1lbnQgdG8gdmVyaWZ5XG4gICAqL1xuICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeUludGVybmFsVmFsdWUoYXJndW1lbnRWYWx1ZTogYW55LCBhcmd1bWVudE5hbWU6IHN0cmluZykge1xuICAgIGlmIChhcmd1bWVudFZhbHVlID09PSBudWxsIHx8IGFyZ3VtZW50VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGAke2FyZ3VtZW50VmFsdWV9IGlzIGludmFsaWQgdmFsdWUgZm9yOiAke2FyZ3VtZW50TmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIEludmFsaWRQYXJhbWV0ZXIgZXJyb3IgaWYgYXJndW1lbnQgaXMgbnVsbCBvciB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhcmd1bWVudFZhbHVlIHZhbHVlIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gYXJndW1lbnROYW1lIG5hbWUgb2YgYXJndW1lbnQgdG8gdmVyaWZ5XG4gICAqL1xuICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeVBhcmFtZXRlcihhcmd1bWVudFZhbHVlOiBhbnksIGFyZ3VtZW50TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGFyZ3VtZW50VmFsdWUgPT09IG51bGwgfHwgYXJndW1lbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgYCR7YXJndW1lbnRWYWx1ZX0gaXMgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyOiAke2FyZ3VtZW50TmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIEludmFsaWRQYXJhbWV0ZXIgZXJyb3IgaWYgYXJndW1lbnQgaXMgbm90IHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICogRm9yIG9iamVjdHMsIGl0IGp1c3QgdGVzdHMgdGhhdCBpdCBpcyBhbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGFyZ3VtZW50VmFsdWUgdmFsdWUgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSBleHBlY3RlZFR5cGUgZXhwZWN0ZWQgcmVzdWx0IG9mIHR5cGVvZlxuICAgKiBAcGFyYW0gYXJndW1lbnROYW1lIG5hbWUgb2YgYXJndW1lbnQgdG8gdmVyaWZ5XG4gICAqL1xuICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeVBhcmFtZXRlclR5cGUoYXJndW1lbnRWYWx1ZTogYW55LCBleHBlY3RlZFR5cGU6IHN0cmluZywgYXJndW1lbnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50VmFsdWUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsIGAke2FyZ3VtZW50VmFsdWV9IGhhcyBpbnZhbGlkIHR5cGUgZm9yIHBhcmFtZXRlcjogJHthcmd1bWVudE5hbWV9LmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gSW52YWxpZFBhcmFtZXRlciBlcnJvciBpZiBhcmd1bWVudCBpcyBlbXB0eSBzdHJpbmcsIG51bGwgb3IgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0gYXJndW1lbnRWYWx1ZSB2YWx1ZSB0byB2ZXJpZnlcbiAgICogQHBhcmFtIGFyZ3VtZW50TmFtZSBuYW1lIG9mIGFyZ3VtZW50IHRvIHZlcmlmeVxuICAgKi9cbiAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlTdHJpbmdQYXJhbWV0ZXIoYXJndW1lbnRWYWx1ZTogc3RyaW5nLCBhcmd1bWVudE5hbWU6IHN0cmluZykge1xuICAgIGlmIChhcmd1bWVudFZhbHVlID09PSBudWxsIHx8IGFyZ3VtZW50VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBhcmd1bWVudFZhbHVlID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsIGAke2FyZ3VtZW50VmFsdWV9IGlzIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtdGVyOiAke2FyZ3VtZW50TmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgcGFzc2VkIHZhbHVlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgZW51bS5cbiAgICogVGhyb3dzIGFuIEludmFsaWRQYXJhbWV0ZXIgZXJyb3IgaWYgdGhlIGVudW0gdmFsdWUgaXMgbm90IHZhbGlkLlxuICAgKlxuICAgKiBTdHJpbmcgZW51bXMgYXJlIHtzdHJpbmcgOiBzdHJpbmd9IGRpY3Rpb25hcmllcyB3aGljaCBhcmUgbm90IHJldmVyc2UgbWFwcGFibGVcbiAgICogVGhpcyBpcyBhbiB1Z2x5IHdvcmthcm91bmRcbiAgICpcbiAgICogQHBhcmFtIGVudW1WYWx1ZSB2YWx1ZSB0byB2ZXJpZnlcbiAgICogQHBhcmFtIGVudW1UeXBlIGVudW0gdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHBhcmFtIGVudW1OYW1lIGVudW0gbmFtZSBmb3IgY2xlYXIgZXJyb3IgbWVzc2FnZVxuICAgKi9cbiAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlFbnVtVmFsdWU8RW51bVR5cGUgZXh0ZW5kcyBFbnVtTGlrZT4oZW51bVZhbHVlOiBFbnVtVHlwZSwgZW51bVR5cGU6IGFueSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgIGxldCBpc1ZhbGlkID0gZmFsc2U7XG4gICAgT2JqZWN0LmtleXMoZW51bVR5cGUpLmZvckVhY2goKGVudW1LZXkpID0+IHtcbiAgICAgIGlmIChlbnVtVHlwZVtlbnVtS2V5XSA9PT0gZW51bVZhbHVlLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCBgJHtlbnVtVmFsdWV9IGlzIGludmFsaWQgdmFsdWUgZm9yIGVudW06ICR7ZW51bU5hbWV9LmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBwYXNzZWQgdmFsdWUgaXMgYmV0d2VlbiBbbWluLCBtYXgpIC4uLiBtaW4gPD0gdmFsdWUgPCBtYXhcbiAgICogVGhyb3dzIGFuIEludmFsaWRQYXJhbWV0ZXIgZXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZC5cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gbWluICAgdmFsdWUgbXVzdCBiZSA+PSBtaW5cbiAgICogQHBhcmFtIG1heCAgIHZhbHVlIG11c3QgYmUgPCBtYXhcbiAgICovXG4gIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5UmFuZ2UodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gICAgbGV0IGlzVmFsaWQgPSBtaW4gPD0gdmFsdWUgJiYgdmFsdWUgPCBtYXg7XG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCBgJHt2YWx1ZX0gaXMgaW52YWxpZCB2YWx1ZSBmb3IgcmFuZ2U6IFske21pbn0uLiR7bWF4fSlgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhlIHBhcmFtcyBtaW4gYW5kIG1heCBmb3IgYXBwbHlpbmcgcmFuZ2UgZmlsdGVyLlxuICAgKiBUaHJvd3Mgd2l0aCBlcnJvciBjb2RlIEludmFsaWRQYXJhbWV0ZXIgaWYgcmFuZ2UgaXMgaW52YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIG1pbiByYW5nZSBtaW5cbiAgICogQHBhcmFtIG1heCByYW5nZSBtYXhcbiAgICovXG4gIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5UmFuZ2VQYXJhbVR5cGUobWluOiBhbnksIG1heDogYW55KTogdm9pZCB7XG4gICAgaWYgKCFtaW4gJiYgIW1heCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICdVbmV4cGVjdGVkIGludmFsaWQgcGFyYW0gdmFsdWUsIGF0IGxlYXN0IG9uZSBvZiBtaW4gb3IgbWF4IGlzIHJlcXVpcmVkLicpO1xuICAgIH1cblxuICAgIGlmIChtaW4gJiYgIVBhcmFtLmlzVHlwZU51bWJlcihtaW4pICYmICFQYXJhbS5pc1R5cGVEYXRlKG1pbikpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICAgIFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlcixcbiAgICAgICAgJ1VuZXhwZWN0ZWQgaW52YWxpZCBwYXJhbSB2YWx1ZSwgb25seSBEYXRlIGFuZCBudW1iZXIgYXJlIGFsbG93ZWQgZm9yIHBhcmFtZXRlciBtaW4uJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG1heCAmJiAhUGFyYW0uaXNUeXBlTnVtYmVyKG1heCkgJiYgIVBhcmFtLmlzVHlwZURhdGUobWF4KSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZhbGlkIHBhcmFtIHZhbHVlLCBvbmx5IERhdGUgYW5kIG51bWJlciBhcmUgYWxsb3dlZCBmb3IgcGFyYW1ldGVyIG1heC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWluICYmIG1heCAmJiB0eXBlb2YgbWluICE9PSB0eXBlb2YgbWF4KSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgICBTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsXG4gICAgICAgICdVbmV4cGVjdGVkIGludmFsaWQgcGFyYW0gdmFsdWUsIHBhcmFtZXRlcnMgbWluIGFuZCBtYXggc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHpvbmVJZCBpcyBwcmVzZW50IGluIHRoZSBjdXJyZW50IGRhc2hib2FyZC5cbiAgICogVGhyb3dzIHdpdGggZXJyb3IgY29kZSBJbnZhbGlkUGFyYW1ldGVyIGlmIGVpdGhlciBjb25kaXRpb24gaXMgZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSBkYXNoYm9hcmRab25lTWFwIEEgbWFwIG9mIHpvbmVJZCdzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhc2hib2FyZCBvYmplY3QuXG4gICAqIEBwYXJhbSB6b25lSUQgWm9uZUlkIHRvIGJlIHZhbGlkYXRlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlab25lSXNWYWxpZChkYXNoYm9hcmRab25lTWFwOiBNYXA8bnVtYmVyLCBEYXNoYm9hcmRPYmplY3RJbXBsPiwgem9uZUlEOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZGFzaGJvYXJkWm9uZU1hcC5oYXMoem9uZUlEKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICBTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsXG4gICAgICBgVW5leHBlY3RlZCBpbnZhbGlkIHBhcmFtIHZhbHVlLCBEYXNoYm9hcmQgT2JqZWN0IElkOiAke3pvbmVJRH0gaXMgbm90IHByZXNlbnQgaW4gZGFzaGJvYXJkLmAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IHRoZSB6b25lIGlzIHByZXNlbnQgYW5kIGZsb2F0aW5nIGluIHRoZSBjdXJyZW50IGRhc2hib2FyZC5cbiAgICogVGhyb3dzIHdpdGggZXJyb3IgY29kZSBJbnZhbGlkUGFyYW1ldGVyIGlmIGVpdGhlciBjb25kaXRpb24gaXMgZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSBkYXNoYm9hcmRab25lTWFwIEEgbWFwIG9mIHpvbmVJZCdzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhc2hib2FyZCBvYmplY3QuXG4gICAqIEBwYXJhbSB6b25lSUQgWm9uZUlkIHRvIGJlIHZhbGlkYXRlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlab25lSXNWYWxpZEFuZEZsb2F0aW5nKGRhc2hib2FyZFpvbmVNYXA6IE1hcDxudW1iZXIsIERhc2hib2FyZE9iamVjdEltcGw+LCB6b25lSUQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChkYXNoYm9hcmRab25lTWFwLmhhcyh6b25lSUQpICYmIGRhc2hib2FyZFpvbmVNYXAuZ2V0KHpvbmVJRCkhLmlzRmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLFxuICAgICAgYFVuZXhwZWN0ZWQgaW52YWxpZCBwYXJhbSB2YWx1ZSwgRGFzaGJvYXJkIE9iamVjdCBJZDogJHt6b25lSUR9IGlzIG5vdCBwcmVzZW50IG9yIGlzIGEgZml4ZWQgem9uZSBpbiB0aGUgZGFzaGJvYXJkLmAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgYXJlID4gMCBmb3IgZWFjaCBEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUgb2JqZWN0LlxuICAgKiBUaHJvd3Mgd2l0aCBlcnJvciBjb2RlIEludmFsaWRQYXJhbWV0ZXIgaWYgZWl0aGVyIGNvbmRpdGlvbiBpcyBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSBEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUgb2JqZWN0IGZvciB3aGljaCB3aWR0aCBhbmQgaGVpZ2h0IHdpbGwgYmUgdmFsaWRhdGVkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeVdpZHRoQW5kSGVpZ2h0T2ZEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUoXG4gICAgZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlOiBEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUsXG4gICk6IHZvaWQge1xuICAgIGlmIChkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUud2lkdGggPCAwIHx8IGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZS5oZWlnaHQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgICBTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsXG4gICAgICAgIGBVbmV4cGVjdGVkIGludmFsaWQgcGFyYW0gdmFsdWUgZm9yIGRhc2hib2FyZCBvYmplY3QgSUQgJHtkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUuZGFzaGJvYXJkT2JqZWN0SUR9OmAgK1xuICAgICAgICAgIGAgbmVnYXRpdmUgd2lkdGhzIGFuZCBoZWlnaHRzIGFyZSBub3QgYWxsb3dlZC5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaXMgdGhlIGdpdmVuIHNoZWV0IG5hbWUgaXMgaW4gdGhlIGxpc3Qgb2Ygc2hlZXRzIG5hbWVzIGFsbG93ZWQgZm9yIGV4cG9ydGluZy5cbiAgICogVGhyb3dzIHdpdGggZXJyb3IgY29kZSBJbnZhbGlkUGFyYW1ldGVyIGlmIHRoZSBjb25kaXRpb24gYWJvdmUgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSBleHBvcnRhYmxlU2hlZXROYW1lcyBBIGxpc3Qgb2Ygc2hlZXQgbmFtZXMgYWxsb3dlZCBmb3IgZXhwb3J0aW5nXG4gICAqIEBwYXJhbSBzaGVldE5hbWUgdGhlIG5hbWUgb2YgdGhlIHNoZWV0IHNlbGVjdGVkIGZvciBleHBvcnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5U2hlZXROYW1lKGV4cG9ydGFibGVTaGVldE5hbWVzOiBBcnJheTxzdHJpbmc+LCBzaGVldE5hbWU6IHN0cmluZykge1xuICAgIGlmICghZXhwb3J0YWJsZVNoZWV0TmFtZXMuaW5jbHVkZXMoc2hlZXROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkU2VsZWN0aW9uU2hlZXQsXG4gICAgICAgICdzaGVldE5hbWUgcGFyYW1ldGVyIG11c3QgYmVsb25nIHRvIGEgd29ya3NoZWV0IHdpdGhpbiB0aGUgY3VycmVudCB2aWV3JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBFeHBvcnREYXRhT3B0aW9ucyBvYmplY3RcbiAgICogVGhyb3dzIHdpdGggZXJyb3IgY29kZSBJbnZhbGlkUGFyYW1ldGVyIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IG9mIEV4cG9ydERhdGFPcHRpb25zIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBFeHBvcnREYXRhT3B0aW9ucyBvYmplY3QgdXNlZCB0byBjb25maWd1cmUgdGhlIG91dHB1dCBDU1YgZmlsZSBmb3IgZXhwb3J0RGF0YUFzeW5jLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlFeHBvcnREYXRhT3B0aW9ucyhvcHRpb25zOiBFeHBvcnREYXRhT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICghUGFyYW0uaXNOdWxsT3JVbmRlZmluZWQob3B0aW9ucy5pZ25vcmVBbGlhc2VzKSAmJiAhUGFyYW0uaXNUeXBlQm9vbChvcHRpb25zLmlnbm9yZUFsaWFzZXMpKSB8fFxuICAgICAgKCFQYXJhbS5pc051bGxPclVuZGVmaW5lZChvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkKSAmJiAhQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkKSlcbiAgICApXG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ29wdGlvbnMgcGFyYW1hdGVyIG11c3QgYmUgb2YgdHlwZSBFeHBvcnREYXRhT3B0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBzaGVldCBuYW1lcyBhcmUgaW5jbHVkZWQgaW4gYW55IG9mIHRoZSBleHBvcnQgc2NlbmFyaW9zLlxuICAgKiBUaHJvd3Mgd2l0aCBlcnJvciBjb2RlIEludmFsaWRQYXJhbWV0ZXIgaWYgdGhlIHBhcmFtZXRlciBpcyBub3QgYW4gYXJyYXkuXG4gICAqIFRocm93cyB3aXRoIGVycm9yIGNvZGUgSW52YWxpZFNlbGVjdGlvblNoZWV0IGlmIHRoZXJlIGFyZSBhcnJheSBlbnRyaWVzIHRoYXQgZG9udCBleGlzdCBvciBpZiB0aGVyZSBpcyBtaXhpbmcgYmV0d2VlbiBzaGVldHMgZnJvbSB0aGUgZGFzaGJvYXJkIGFuZCBzaGVldCBmcm9tIHRoZSB3b3JrYm9vay5cbiAgICpcbiAgICogQHBhcmFtIHNoZWV0TmFtZXMgTGlzdCBvZiBzaGVldCBuYW1lcyBzZWxlY3RlZCBmb3IgZXhwb3J0aW5nLlxuICAgKiBAcGFyYW0gZXhwb3J0U2NlbmFyaW9zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXJyZW50IHNoZWV0IG5hbWUsIGV4cG9ydGFibGUgc2hlZXRzIGZyb20gdGhlIGRhc2hib2FyZCwgYW5kIGV4cG9ydGFibGUgc2hlZXRzIGZyb20gdGhlIHdvcmtib29rLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlTaGVldE5hbWVzRm9yUERGQW5kUFBUKHNoZWV0TmFtZXM6IEFycmF5PHN0cmluZz4sIGV4cG9ydFNjZW5hcmlvczogRXhwb3J0U2NlbmFyaW9zRm9yUERGQW5kUG93ZXJQb2ludCk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzaGVldE5hbWVzKSkgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICdzaGVldE5hbWVzIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgaWYgKHNoZWV0TmFtZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ3NoZWV0TmFtZXMgc2hvdWxkIG5vdCBiZSBlbXB0eScpO1xuXG4gICAgY29uc3QgaXNJbmNsdWRlZEluRGFzaGJvYXJkID0gc2hlZXROYW1lcy5ldmVyeSgoc2hlZXROYW1lOiBzdHJpbmcpID0+XG4gICAgICBleHBvcnRTY2VuYXJpb3MuZXhwb3J0YWJsZVNoZWV0TmFtZXNGcm9tRGFzaGJvYXJkLmluY2x1ZGVzKHNoZWV0TmFtZSksXG4gICAgKTtcbiAgICBpZiAoaXNJbmNsdWRlZEluRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzSW5jbHVkZWRJbldvcmtib29rID0gc2hlZXROYW1lcy5ldmVyeSgoc2hlZXROYW1lOiBzdHJpbmcpID0+XG4gICAgICBleHBvcnRTY2VuYXJpb3MuZXhwb3J0YWJsZVNoZWV0TmFtZXNGcm9tV29ya2Jvb2suaW5jbHVkZXMoc2hlZXROYW1lKSxcbiAgICApO1xuICAgIGlmIChpc0luY2x1ZGVkSW5Xb3JrYm9vaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0N1cnJlbnRTaGVldCA9IHNoZWV0TmFtZXMubGVuZ3RoID09PSAxICYmIHNoZWV0TmFtZXNbMF0gPT09IGV4cG9ydFNjZW5hcmlvcy5jdXJyZW50U2hlZXROYW1lO1xuICAgIGlmIChpc0N1cnJlbnRTaGVldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCByZXF1aXJlbWVudDogYWxsIHNoZWV0IG5hbWVzIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgZXhwb3J0YWJsZSBzaGVldHMgaW4gdGhlIGRhc2hib2FyZCBvclxuICAgIC8vIGFsbCBzaGVldCBuYW1lcyBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIGV4cG9ydGFibGUgc2hlZXRzIGluIHRoZSB3b3JrYm9vaywgb3IgdGhlIHNoZWV0IG5hbWUgaXMgdGhlIGN1cnJlbnQgc2hlZXRcbiAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkU2VsZWN0aW9uU2hlZXQsXG4gICAgICAnc2hlZXROYW1lcyBwYXJhbWV0ZXIgbXVzdCBoYXZlIGFsbCBpdHMgZW50cmllcyBiZSBleHBvcnRhYmxlIHNoZWV0IG5hbWVzIGZyb20gdGhlIGRhc2hib2FyZCBvciBhbGwgaXRzIGVudHJpZXMgYmUgZXhwb3J0YWJsZSBzaGVldCBuYW1lcyBmcm9tIHRoZSB3b3JrYm9vaycsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgZXh0ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICAgKiBUaHJvd3Mgd2l0aCBlcnJvciBjb2RlIEludmFsaWRQYXJhbWV0ZXIgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgb2YgZXh0ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgZXh0ZXJuYWwgdXNlci1mYWNpbmcgRXhwb3J0UERGT3B0aW9ucyBvYmplY3QgdXNlZCB0byBjb25maWd1cmUgdGhlIG91dHB1dCBQREYgZmlsZSBmb3IgZXhwb3J0UERGQXN5bmMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeUV4cG9ydFBERk9wdGlvbnMob3B0aW9uczogRXh0ZXJuYWxFeHBvcnRQREZPcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmVyaWZ5RW51bVZhbHVlPFByaW50T3JpZW50YXRpb24+KG9wdGlvbnMub3JpZW50YXRpb24sIFByaW50T3JpZW50YXRpb24sICdQcmludE9yaWVudGF0aW9uJyk7XG4gICAgICB0aGlzLnZlcmlmeUVudW1WYWx1ZTxQcmludFBhZ2VTaXplPihvcHRpb25zLnBhZ2VTaXplLCBQcmludFBhZ2VTaXplLCAnUHJpbnRQYWdlU2l6ZScpO1xuICAgICAgdGhpcy52ZXJpZnlFbnVtVmFsdWU8UHJpbnRTY2FsaW5nPihvcHRpb25zLnNjYWxpbmcsIFByaW50U2NhbGluZywgJ1ByaW50U2NhbGluZycpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICdvcHRpb25zIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgRXhwb3J0UERGT3B0aW9ucycpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgRXhwb3J0TGF5b3V0T3B0aW9ucyxcbiAgRXhwb3J0UERGT3B0aW9ucyBhcyBJbnRlcm5hbEV4cG9ydFBERk9wdGlvbnMsXG4gIEZpdFBhZ2VzLFxuICBQYWdlT3JpZW50YXRpb24sXG4gIFBhZ2VTY2FsaW5nT3B0aW9uLFxuICBQYWdlU2l6ZU9wdGlvbixcbiAgU2NhbGVNb2RlLFxuICBTY2FsaW5nU2VsZWN0aW9uLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgRXhwb3J0RGF0YU9wdGlvbnMsXG4gIEV4cG9ydFBERk9wdGlvbnMgYXMgRXh0ZXJuYWxFeHBvcnRQREZPcHRpb25zLFxuICBQcmludE9yaWVudGF0aW9uLFxuICBQcmludFBhZ2VTaXplLFxuICBQcmludFNjYWxpbmcsXG4gIFNoYXJlZEVycm9yQ29kZXMsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuXG4vKipcbiAqIEhlbHBlciBtZXRob2RzIGZvciBFeHBvcnQgQVBJcy5cbiAqXG4gKiBAY2xhc3MgRXhwb3J0SGVscGVyc1xuICovXG5leHBvcnQgY2xhc3MgRXhwb3J0SGVscGVycyB7XG4gIHB1YmxpYyBzdGF0aWMgRGVmYXVsdERhdGFPcHRpb25zOiBFeHBvcnREYXRhT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVBbGlhc2VzOiBmYWxzZSxcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogW10sXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBEZWZhdWx0UERGT3B0aW9uczogRXh0ZXJuYWxFeHBvcnRQREZPcHRpb25zID0ge1xuICAgIHNjYWxpbmc6IFByaW50U2NhbGluZy5BdXRvbWF0aWMsXG4gICAgcGFnZVNpemU6IFByaW50UGFnZVNpemUuTGV0dGVyLFxuICAgIG9yaWVudGF0aW9uOiBQcmludE9yaWVudGF0aW9uLlBvcnRyYWl0LFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIERlZmF1bHRMYXlvdXRPcHRpb25zOiBFeHBvcnRMYXlvdXRPcHRpb25zID0ge1xuICAgIGltYWdlSGVpZ2h0OiAwLFxuICAgIGltYWdlV2lkdGg6IDAsXG4gICAgcGFnZUZpdEhvcml6b250YWw6IDEsXG4gICAgcGFnZUZpdFZlcnRpY2FsOiAxLFxuICAgIHBhZ2VPcmllbnRhdGlvbk9wdGlvbjogUGFnZU9yaWVudGF0aW9uLlBvcnRyYWl0LFxuICAgIHBhZ2VTY2FsZU1vZGU6IFNjYWxlTW9kZS5TY2FsZUF1dG8sXG4gICAgcGFnZVNjYWxlUGVyY2VudDogMTAwLFxuICAgIHBhZ2VTaXplT3B0aW9uOiBQYWdlU2l6ZU9wdGlvbi5MZXR0ZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBpbnRlcm5hbCBFeHBvcnRQREZPcHRpb25zJyBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBnaXZlbiBQREYgZXhwb3J0IGNvbmZpZ3VyYXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgY29uc3RydWN0IHRoZSBpbnRlcm5hbCBFeHBvcnRQREZPcHRpb25zIGlkZW50aWNhbGx5IHRvIGhvdyB0aGUgJ0V4cG9ydCBQREYnIGRpYWxvZyBjb25zdHJ1Y3RzIHRoZSBFeHBvcnRQZGZPcHRpb25zUHJlc01vZGVsLlxuICAgKiBTZWUgdGhlIGhhbmRsZUV4cG9ydENsaWNrIG1ldGhvZCBpbiBAYnJvd3Nlci1jbGllbnRzL2V4cG9ydC1wZGYtb3B0aW9ucy1kaWFsb2cgZm9yIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGludGVybmFsRXhwb3J0UGRmT3B0aW9ucyBUaGUgaW50ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyBwcmVzIG1vZGVsIHVzZWQgdG8gY29uZmlndXJlIHRoZSBvdXRwdXQgUERGIGZpbGUuXG4gICAqIEBwYXJhbSBleHRlcm5hbEV4cG9ydFBkZk9wdGlvbnMgVGhlIGV4dGVybmFsIEV4cG9ydFBERk9wdGlvbnMgdXNlci1mYWNpbmcgb2JqZWN0IHBhc3NlZCB0byBleHBvcnRQREZBc3luYy5cbiAgICogQHBhcmFtIHNoZWV0TmFtZXMgVGhlIGxpc3Qgb2Ygc2hlZXRzIHNlbGVjdGVkIGZvciBleHBvcnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVwZGF0ZUludGVybmFsRXhwb3J0UERGT3B0aW9ucyhcbiAgICBpbnRlcm5hbEV4cG9ydFBkZk9wdGlvbnM6IEludGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgICBleHRlcm5hbEV4cG9ydFBkZk9wdGlvbnM6IEV4dGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgICBzaGVldE5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICApOiB2b2lkIHtcbiAgICBpbnRlcm5hbEV4cG9ydFBkZk9wdGlvbnMuY3VycmVudFNoZWV0ID0gc2hlZXROYW1lc1swXTtcbiAgICB0aGlzLnVwZGF0ZUV4cG9ydExheW91dE9wdGlvbnMoaW50ZXJuYWxFeHBvcnRQZGZPcHRpb25zLCBleHRlcm5hbEV4cG9ydFBkZk9wdGlvbnMpO1xuICAgIHRoaXMudXBkYXRlU2hlZXRPcHRpb25zKGludGVybmFsRXhwb3J0UGRmT3B0aW9ucywgc2hlZXROYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgdXBkYXRlSW50ZXJuYWxFeHBvcnRQREZPcHRpb25zLlxuICAgKiBNb2RpZmllcyB0aGUgZXhwb3J0TGF5b3V0T3B0aW9ucyBwcm9wZXJ0eSBvZiB0aGUgaW50ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyBiYXNlZCBvbiB0aGUgZXh0ZXJuYWwgRXhwb3J0UERGT3B0aW9ucy5cbiAgICogU2VlIHRoZSBnZXRFeHBvcnRMYXlvdXRPcHRpb25zIG1ldGhvZCBpbiBAYnJvd3Nlci1jbGllbnRzL2V4cG9ydC1wZGYtb3B0aW9ucy1kaWFsb2cgZm9yIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGludGVybmFsRXhwb3J0UGRmT3B0aW9ucyBUaGUgaW50ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyBwcmVzIG1vZGVsIHVzZWQgdG8gY29uZmlndXJlIHRoZSBvdXRwdXQgUERGIGZpbGUuXG4gICAqIEBwYXJhbSBleHRlcm5hbEV4cG9ydFBkZk9wdGlvbnMgVGhlIGV4dGVybmFsIEV4cG9ydFBERk9wdGlvbnMgdXNlci1mYWNpbmcgb2JqZWN0IHBhc3NlZCB0byBleHBvcnRQREZBc3luYy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlRXhwb3J0TGF5b3V0T3B0aW9ucyhcbiAgICBpbnRlcm5hbEV4cG9ydFBkZk9wdGlvbnM6IEludGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgICBleHRlcm5hbEV4cG9ydFBkZk9wdGlvbnM6IEV4dGVybmFsRXhwb3J0UERGT3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXhwb3J0TGF5b3V0T3B0aW9ucyA9IGludGVybmFsRXhwb3J0UGRmT3B0aW9ucy5leHBvcnRMYXlvdXRPcHRpb25zO1xuXG4gICAgLy8gc2V0dGluZyB0aGUgaW1hZ2UgaGVpZ2h0IGFuZCB3aWR0aCBwcm9wZXJ0aWVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzXG4gICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5pbWFnZUhlaWdodCA9IHRoaXMuRGVmYXVsdExheW91dE9wdGlvbnMuaW1hZ2VIZWlnaHQ7XG4gICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5pbWFnZVdpZHRoID0gdGhpcy5EZWZhdWx0TGF5b3V0T3B0aW9ucy5pbWFnZVdpZHRoO1xuXG4gICAgLy8gIHNldHRpbmcgdGhlIG9yaWVudGF0aW9uIHZhbHVlIGZvciB0aGUgZXhwb3J0TGF5b3V0T3B0aW9uc1xuICAgIHN3aXRjaCAoZXh0ZXJuYWxFeHBvcnRQZGZPcHRpb25zLm9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlIFByaW50T3JpZW50YXRpb24uTGFuZHNjYXBlOlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VPcmllbnRhdGlvbk9wdGlvbiA9IFBhZ2VPcmllbnRhdGlvbi5MYW5kc2NhcGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludE9yaWVudGF0aW9uLlBvcnRyYWl0OlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VPcmllbnRhdGlvbk9wdGlvbiA9IFBhZ2VPcmllbnRhdGlvbi5Qb3J0cmFpdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ2ludmFsaWQgb3JpZW50YXRpb24gZm9yIEV4cG9ydFBERk9wdGlvbicpO1xuICAgIH1cblxuICAgIC8vIHNldHRpbmcgdGhlIHBhZ2Ugc2l6ZSB2YWx1ZSBmb3IgdGhlIGV4cG9ydExheW91dE9wdGlvbnNcbiAgICBzd2l0Y2ggKGV4dGVybmFsRXhwb3J0UGRmT3B0aW9ucy5wYWdlU2l6ZSkge1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLkEzOlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uQTM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLkE0OlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uQTQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLkE1OlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uQTU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLkI0OlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uQjQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLkI1OlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uQjU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLkV4ZWN1dGl2ZTpcbiAgICAgICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5wYWdlU2l6ZU9wdGlvbiA9IFBhZ2VTaXplT3B0aW9uLkV4ZWN1dGl2ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50UGFnZVNpemUuRm9saW86XG4gICAgICAgIGV4cG9ydExheW91dE9wdGlvbnMucGFnZVNpemVPcHRpb24gPSBQYWdlU2l6ZU9wdGlvbi5Gb2xpbztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50UGFnZVNpemUuTGVkZ2VyOlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uTGVkZ2VyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJpbnRQYWdlU2l6ZS5MZWdhbDpcbiAgICAgICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5wYWdlU2l6ZU9wdGlvbiA9IFBhZ2VTaXplT3B0aW9uLkxlZ2FsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJpbnRQYWdlU2l6ZS5MZXR0ZXI6XG4gICAgICAgIGV4cG9ydExheW91dE9wdGlvbnMucGFnZVNpemVPcHRpb24gPSBQYWdlU2l6ZU9wdGlvbi5MZXR0ZXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLk5vdGU6XG4gICAgICAgIGV4cG9ydExheW91dE9wdGlvbnMucGFnZVNpemVPcHRpb24gPSBQYWdlU2l6ZU9wdGlvbi5Ob3RlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJpbnRQYWdlU2l6ZS5RdWFydG86XG4gICAgICAgIGV4cG9ydExheW91dE9wdGlvbnMucGFnZVNpemVPcHRpb24gPSBQYWdlU2l6ZU9wdGlvbi5RdWFydG87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLlN0YXRlbWVudDpcbiAgICAgICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5wYWdlU2l6ZU9wdGlvbiA9IFBhZ2VTaXplT3B0aW9uLlN0YXRlbWVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50UGFnZVNpemUuVGFibG9pZDpcbiAgICAgICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5wYWdlU2l6ZU9wdGlvbiA9IFBhZ2VTaXplT3B0aW9uLlRhYmxvaWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFBhZ2VTaXplLlVuc3BlY2lmaWVkOlxuICAgICAgICBleHBvcnRMYXlvdXRPcHRpb25zLnBhZ2VTaXplT3B0aW9uID0gUGFnZVNpemVPcHRpb24uVW5zcGVjaWZpZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdpbnZhbGlkIHBhZ2VTaXplIGZvciBFeHBvcnRQREZPcHRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBzZXR0aW5nIHRoZSBzY2FsaW5nIHZhbHVlcyBmb3IgdGhlIGV4cG9ydExheW91dE9wdGlvbnNcbiAgICBzd2l0Y2ggKGV4dGVybmFsRXhwb3J0UGRmT3B0aW9ucy5zY2FsaW5nKSB7XG4gICAgICBjYXNlIFByaW50U2NhbGluZy5BdE1vc3QxUGFnZUhpZ2g6XG4gICAgICAgIHRoaXMuc2V0Rml0QW5kU2NhbGVWYWx1ZXMoZXhwb3J0TGF5b3V0T3B0aW9ucywgRml0UGFnZXMuRml0T25lSGlnaCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFNjYWxpbmcuQXRNb3N0MVBhZ2VXaWRlOlxuICAgICAgICB0aGlzLnNldEZpdEFuZFNjYWxlVmFsdWVzKGV4cG9ydExheW91dE9wdGlvbnMsIEZpdFBhZ2VzLkZpdE9uZVdpZGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJpbnRTY2FsaW5nLkF0TW9zdDJQYWdlc0hpZ2g6XG4gICAgICAgIHRoaXMuc2V0Rml0QW5kU2NhbGVWYWx1ZXMoZXhwb3J0TGF5b3V0T3B0aW9ucywgRml0UGFnZXMuRml0VHdvSGlnaCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFNjYWxpbmcuQXRNb3N0MlBhZ2VzV2lkZTpcbiAgICAgICAgdGhpcy5zZXRGaXRBbmRTY2FsZVZhbHVlcyhleHBvcnRMYXlvdXRPcHRpb25zLCBGaXRQYWdlcy5GaXRUd29XaWRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50U2NhbGluZy5BdXRvbWF0aWM6XG4gICAgICAgIHRoaXMuc2V0Rml0QW5kU2NhbGVWYWx1ZXMoZXhwb3J0TGF5b3V0T3B0aW9ucywgUGFnZVNjYWxpbmdPcHRpb24uU2NhbGVQY3RBdXRvKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50U2NhbGluZy5QZXJjMTAwOlxuICAgICAgICB0aGlzLnNldEZpdEFuZFNjYWxlVmFsdWVzKGV4cG9ydExheW91dE9wdGlvbnMsIFBhZ2VTY2FsaW5nT3B0aW9uLlNjYWxlUGN0MTAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50U2NhbGluZy5QZXJjMjAwOlxuICAgICAgICB0aGlzLnNldEZpdEFuZFNjYWxlVmFsdWVzKGV4cG9ydExheW91dE9wdGlvbnMsIFBhZ2VTY2FsaW5nT3B0aW9uLlNjYWxlUGN0MjAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50U2NhbGluZy5QZXJjMjU6XG4gICAgICAgIHRoaXMuc2V0Rml0QW5kU2NhbGVWYWx1ZXMoZXhwb3J0TGF5b3V0T3B0aW9ucywgUGFnZVNjYWxpbmdPcHRpb24uU2NhbGVQY3QyNSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFNjYWxpbmcuUGVyYzQwMDpcbiAgICAgICAgdGhpcy5zZXRGaXRBbmRTY2FsZVZhbHVlcyhleHBvcnRMYXlvdXRPcHRpb25zLCBQYWdlU2NhbGluZ09wdGlvbi5TY2FsZVBjdDQwMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFNjYWxpbmcuUGVyYzUwOlxuICAgICAgICB0aGlzLnNldEZpdEFuZFNjYWxlVmFsdWVzKGV4cG9ydExheW91dE9wdGlvbnMsIFBhZ2VTY2FsaW5nT3B0aW9uLlNjYWxlUGN0NTApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJpbnRTY2FsaW5nLlBlcmM2MDpcbiAgICAgICAgdGhpcy5zZXRGaXRBbmRTY2FsZVZhbHVlcyhleHBvcnRMYXlvdXRPcHRpb25zLCBQYWdlU2NhbGluZ09wdGlvbi5TY2FsZVBjdDYwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByaW50U2NhbGluZy5QZXJjNzU6XG4gICAgICAgIHRoaXMuc2V0Rml0QW5kU2NhbGVWYWx1ZXMoZXhwb3J0TGF5b3V0T3B0aW9ucywgUGFnZVNjYWxpbmdPcHRpb24uU2NhbGVQY3Q3NSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcmludFNjYWxpbmcuUGVyYzgwOlxuICAgICAgICB0aGlzLnNldEZpdEFuZFNjYWxlVmFsdWVzKGV4cG9ydExheW91dE9wdGlvbnMsIFBhZ2VTY2FsaW5nT3B0aW9uLlNjYWxlUGN0ODApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJpbnRTY2FsaW5nLlBlcmM5MDpcbiAgICAgICAgdGhpcy5zZXRGaXRBbmRTY2FsZVZhbHVlcyhleHBvcnRMYXlvdXRPcHRpb25zLCBQYWdlU2NhbGluZ09wdGlvbi5TY2FsZVBjdDkwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ2ludmFsaWQgc2NhbGluZyBmb3IgRXhwb3J0UERGT3B0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIHVwZGF0ZUludGVybmFsRXhwb3J0UERGT3B0aW9ucy5cbiAgICogTW9kaWZpZXMgdGhlIHNoZWV0T3B0aW9ucyBwcm9wZXJ0eSBvZiB0aGUgaW50ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyBiYXNlZCBvbiB0aGUgc2hlZXRzIHNlbGVjdGVkIGZvciBleHBvcnQuXG4gICAqIFNlZSB0aGUgaGFuZGxlRXhwb3J0Q2xpY2sgbWV0aG9kIGluIEBicm93c2VyLWNsaWVudHMvZXhwb3J0LXBkZi1vcHRpb25zLWRpYWxvZyBmb3IgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJuYWxFeHBvcnRQZGZPcHRpb25zIFRoZSBpbnRlcm5hbCBFeHBvcnRQREZPcHRpb25zIHByZXMgbW9kZWwgdXNlZCB0byBjb25maWd1cmUgdGhlIG91dHB1dCBQREYgZmlsZS5cbiAgICogQHBhcmFtIHNoZWV0TmFtZXMgVGhlIGxpc3Qgb2Ygc2hlZXRzIHNlbGVjdGVkIGZvciBleHBvcnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVNoZWV0T3B0aW9ucyhpbnRlcm5hbEV4cG9ydFBkZk9wdGlvbnM6IEludGVybmFsRXhwb3J0UERGT3B0aW9ucywgc2hlZXROYW1lczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IHsgZXhwb3J0TGF5b3V0T3B0aW9ucywgc2hlZXRPcHRpb25zIH0gPSBpbnRlcm5hbEV4cG9ydFBkZk9wdGlvbnM7XG4gICAgLy8gdXBkYXRpbmcgdGhlIGV4cG9ydCBsYXlvdXRzIG9wdGlvbnMgZm9yIGVhY2ggc2hlZXQgYW5kIHNlbGVjdGluZyBzaGVldCBmb3IgZXhwb3J0IGlmIGluY2x1ZGVkIGluIGxpc3RcbiAgICBmb3IgKGNvbnN0IHNoZWV0T3B0aW9uIG9mIHNoZWV0T3B0aW9ucykge1xuICAgICAgc2hlZXRPcHRpb24uZXhwb3J0TGF5b3V0T3B0aW9ucyA9IGV4cG9ydExheW91dE9wdGlvbnM7XG4gICAgICBzaGVldE9wdGlvbi5pc1NlbGVjdGVkID0gc2hlZXROYW1lcy5pbmNsdWRlcyhzaGVldE9wdGlvbi5zaGVldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIHVwZGF0ZUV4cG9ydExheW91dE9wdG9ucy5cbiAgICogVGhpcyBtZXRob2QgaXMgYSBzcG9vZiBvZiB0aGUgZ2V0Rml0QW5kU2NhbGVWYWx1ZXMgbWV0aG9kIHVzZWQgaW4gQGJyb3dzZXItY2xpZW50cy9leHBvcnQtcGRmLW9wdGlvbnMgdG8gc2V0IHRoZSBleHBvcnRMYXlvdXRPcHRpb25zJyBzY2FsaW5nIHByb3BlcnRpZXMuXG4gICAqIEluIHRoZSBmdXR1cmUsIHRoaXMgZmlsZSBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBpbXBvcnQgdGhlIG1ldGhvZCBkaXJlY3RseSBmcm9tIEBicm93c2VyLWNsaWVudHMvZXhwb3J0LXBkZi1vcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gc2NhbGluZ1NlbGVjdGlvbiBzdHJpbmcgdXNlZCBmb3Igc2V0dGluZyB0aGUgZXhwb3J0TGF5b3V0T3B0aW9ucyBiYXNlZCBvbiB0aGUgUHJpbnRTY2FsaW5nIHByb3BlcnR5IGZyb20gdGhlIEV4dGVybmFsRXhwb3J0UERGT3B0aW9ucy5cbiAgICogQHBhcmFtIGV4cG9ydExheW91dE9wdGlvbnMgdGhlIEV4cG9ydExheW91dE9wdGlvbnMgdXNlZCBieSB0aGUgaW50ZXJuYWwgRXhwb3J0UERGT3B0aW9ucyBwcmVzIG1vZGVsLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXRGaXRBbmRTY2FsZVZhbHVlcyhleHBvcnRMYXlvdXRPcHRpb25zOiBFeHBvcnRMYXlvdXRPcHRpb25zLCBzY2FsaW5nU2VsZWN0aW9uOiBTY2FsaW5nU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgbGV0IHsgcGFnZUZpdEhvcml6b250YWwsIHBhZ2VGaXRWZXJ0aWNhbCwgcGFnZVNjYWxlTW9kZSwgcGFnZVNjYWxlUGVyY2VudCB9ID0gdGhpcy5EZWZhdWx0TGF5b3V0T3B0aW9ucztcblxuICAgIGNvbnN0IGZpdE1hdGNoID0gdGhpcy5maXRSZWdleC5leGVjKHNjYWxpbmdTZWxlY3Rpb24pO1xuICAgIGNvbnN0IHBlcmNlbnRNYXRjaCA9IHRoaXMucGN0UmVnZXguZXhlYyhzY2FsaW5nU2VsZWN0aW9uKTtcblxuICAgIGlmIChmaXRNYXRjaCkge1xuICAgICAgW3BhZ2VGaXRIb3Jpem9udGFsLCBwYWdlRml0VmVydGljYWxdID0gZml0TWF0Y2guc2xpY2UoMSkubWFwKCh2YWx1ZSkgPT4gTnVtYmVyKHZhbHVlKSk7XG4gICAgICBwYWdlU2NhbGVNb2RlID0gU2NhbGVNb2RlLlNjYWxlRml0UGFnZXM7XG4gICAgfSBlbHNlIGlmIChwZXJjZW50TWF0Y2gpIHtcbiAgICAgIFtwYWdlU2NhbGVQZXJjZW50XSA9IHBlcmNlbnRNYXRjaC5zbGljZSgxKS5tYXAoKHZhbHVlKSA9PiBOdW1iZXIodmFsdWUpKTtcbiAgICAgIHBhZ2VTY2FsZU1vZGUgPSBTY2FsZU1vZGUuU2NhbGVQZXJjZW50YWdlO1xuICAgIH1cblxuICAgIC8vIGdldEZpdEFuZFNjYWxlVmFsdWVzIHJldHVybnMgdGhlIHByb3BlcnRpZXMgYmVsb3csIGJ1dCBpbnN0ZWFkIHRoaXMgbWV0aG9kIHdpbGwgc2V0IHRoZW0uXG4gICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5wYWdlRml0SG9yaXpvbnRhbCA9IHBhZ2VGaXRIb3Jpem9udGFsO1xuICAgIGV4cG9ydExheW91dE9wdGlvbnMucGFnZUZpdFZlcnRpY2FsID0gcGFnZUZpdFZlcnRpY2FsO1xuICAgIGV4cG9ydExheW91dE9wdGlvbnMucGFnZVNjYWxlTW9kZSA9IHBhZ2VTY2FsZU1vZGU7XG4gICAgZXhwb3J0TGF5b3V0T3B0aW9ucy5wYWdlU2NhbGVQZXJjZW50ID0gcGFnZVNjYWxlUGVyY2VudDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnZml0KFswLTldKyl4KFswLTldKyknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcGN0UmVnZXggPSBuZXcgUmVnRXhwKCdwY3QoWzAtOV0rKScpO1xufVxuIiwiaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi9FcnJvckhlbHBlcnMnO1xuXG5leHBvcnQgY2xhc3MgUGFyYW0ge1xuICAvKipcbiAgICogc2VyaWFsaXplcyB0aGUgZGF0ZSBpbnRvIHRoZSBmb3JtYXQgdGhhdCB0aGUgc2VydmVyIGV4cGVjdHMuXG4gICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlIHRvIHNlcmlhbGl6ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXJpYWxpemVEYXRlRm9yUGxhdGZvcm0oZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoOiBudW1iZXIgPSBkYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xuICAgIGNvbnN0IGRheTogbnVtYmVyID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgY29uc3QgaGg6IG51bWJlciA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBjb25zdCBtbTogbnVtYmVyID0gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgY29uc3Qgc2VjOiBudW1iZXIgPSBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aGh9OiR7bW19OiR7c2VjfWA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNlcmlhbGl6ZUJvb2xlYW5Gb3JQbGF0Zm9ybShib29sOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYm9vbCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNlcmlhbGl6ZU51bWJlckZvclBsYXRmb3JtKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKDEwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgaW5wdXQgaXMgYSBudW1iZXJcbiAgICovXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cbiAgcHVibGljIHN0YXRpYyBpc1R5cGVOdW1iZXIoaW5wdXQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8IGlucHV0IGluc3RhbmNlb2YgTnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBpbnB1dCBpcyBhIERhdGVcbiAgICovXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cbiAgcHVibGljIHN0YXRpYyBpc1R5cGVEYXRlKGlucHV0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBEYXRlO1xuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xuICBwdWJsaWMgc3RhdGljIGlzVHlwZVN0cmluZyhpbnB1dDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gIH1cblxuICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55ICovXG4gIHB1YmxpYyBzdGF0aWMgaXNUeXBlQm9vbChpbnB1dDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8IGlucHV0IGluc3RhbmNlb2YgQm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dCBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xuICBwdWJsaWMgc3RhdGljIGlzTnVsbE9yVW5kZWZpbmVkKGlucHV0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cbiAgcHVibGljIHN0YXRpYyBzZXJpYWxpemVQYXJhbWV0ZXJWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoUGFyYW0uaXNUeXBlTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFBhcmFtLnNlcmlhbGl6ZU51bWJlckZvclBsYXRmb3JtKHZhbHVlIGFzIG51bWJlcik7XG4gICAgfSBlbHNlIGlmIChQYXJhbS5pc1R5cGVEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFBhcmFtLnNlcmlhbGl6ZURhdGVGb3JQbGF0Zm9ybSh2YWx1ZSBhcyBEYXRlKTtcbiAgICB9IGVsc2UgaWYgKFBhcmFtLmlzVHlwZUJvb2wodmFsdWUpKSB7XG4gICAgICByZXR1cm4gUGFyYW0uc2VyaWFsaXplQm9vbGVhbkZvclBsYXRmb3JtKHZhbHVlIGFzIGJvb2xlYW4pO1xuICAgIH0gZWxzZSBpZiAoUGFyYW0uaXNUeXBlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYFVuZXhwZWN0ZWQgaW52YWxpZCB2YWx1ZSBmb3I6ICR7dmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHBhcmFtZXRlciBpcyBhbHJlYWR5IGEgTWFwLCBvciBjb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBNYXAuXG4gICAqIElmIHRoZSBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0LCB3ZSBjb252ZXJ0IGl0IHRvIGEgTWFwIHVzaW5nIE9iamVjdC5lbnRyaWVzLlxuICAgKiBAdGhyb3dzIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IGFuIG9iamVjdCBvciBNYXBcbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0UGFyYW1ldGVyVG9NYXAocGFyYW06IG9iamVjdCwgcGFyYW1OYW1lOiBzdHJpbmcpOiBNYXA8YW55LCBhbnk+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyVHlwZShwYXJhbSwgJ29iamVjdCcsIHBhcmFtTmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgYEV4cGVjdGluZyBvYmplY3Qgb3IgTWFwIGZvcjogJHtwYXJhbU5hbWV9LmApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbSBpbnN0YW5jZW9mIE1hcCA/IHBhcmFtIDogbmV3IE1hcChPYmplY3QuZW50cmllcyhwYXJhbSkpO1xuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xuICBwdWJsaWMgc3RhdGljIHRyeVBhcnNlTnVtYmVyKHZhbHVlOiBhbnkpOiB7IHBhcnNlZD86IG51bWJlcjsgc3VjY2VzczogYm9vbGVhbiB9IHtcbiAgICBpZiAoUGFyYW0uaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmIChQYXJhbS5pc1R5cGVOdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBwYXJzZWQ6IHZhbHVlIGFzIG51bWJlciwgc3VjY2VzczogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsdWVTdHJpbmcgPT09ICdOYU4nKSB7XG4gICAgICAvLyAnTmFOJyBwYXJzZXMgYXMgTmFOIHdoaWNoIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBmYWlsZWQgcGFyc2UuXG4gICAgICByZXR1cm4geyBwYXJzZWQ6IE5hTiwgc3VjY2VzczogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWVTdHJpbmcpO1xuICAgIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHBhcnNlZCwgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgU2hlZXRJbmZvLCBTaGVldFR5cGUsIFNpemVDb25zdHJhaW50IH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBTaGVldFV0aWxzIHtcbiAgLy8gVGhpcyBpcyBhIGRpcmVjdCBwb3J0IGZyb20gU2hlZXRTaXplLmNzIC0gU2hlZXRTaXplRmFjdG9yeVxuICBwdWJsaWMgc3RhdGljIGdldFNoZWV0U2l6ZUZyb21TaXplQ29uc3RyYWludHMoc2l6ZUNvbnN0cmFpbnQ6IFNpemVDb25zdHJhaW50KTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBjb25zdCB7IG1pbldpZHRoLCBtaW5IZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQgfSA9IHNpemVDb25zdHJhaW50O1xuXG4gICAgaWYgKG1pbkhlaWdodCA9PT0gMCAmJiBtaW5XaWR0aCA9PT0gMCkge1xuICAgICAgaWYgKG1heEhlaWdodCA9PT0gMCAmJiBtYXhXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJlaGF2aW9yOiBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWMsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJlaGF2aW9yOiBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdE1vc3QsXG4gICAgICAgIG1heFNpemU6IHsgd2lkdGg6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWF4SGVpZ2h0ID09PSAwICYmIG1heFdpZHRoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuQXRMZWFzdCxcbiAgICAgICAgbWluU2l6ZTogeyB3aWR0aDogbWluV2lkdGgsIGhlaWdodDogbWluSGVpZ2h0IH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtYXhIZWlnaHQgPT09IG1pbkhlaWdodCAmJiBtYXhXaWR0aCA9PT0gbWluV2lkdGggJiYgbWluV2lkdGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuRXhhY3RseSxcbiAgICAgICAgbWluU2l6ZTogeyB3aWR0aDogbWluV2lkdGgsIGhlaWdodDogbWluSGVpZ2h0IH0sXG4gICAgICAgIG1heFNpemU6IHsgd2lkdGg6IG1pbldpZHRoLCBoZWlnaHQ6IG1pbkhlaWdodCB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAnRml0IFdpZHRoJyBmb3IgYSBEU0QgbGF5b3V0XG4gICAgY29uc3QgaXNEc2RMYXlvdXQgPSBtaW5XaWR0aCA9PT0gMCAmJiBtYXhXaWR0aCA9PT0gMDtcblxuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuUmFuZ2UsXG4gICAgICBtaW5TaXplOiB7IHdpZHRoOiBtaW5XaWR0aCwgaGVpZ2h0OiBtaW5IZWlnaHQgfSxcbiAgICAgIG1heFNpemU6IHsgd2lkdGg6IGlzRHNkTGF5b3V0ID8gMjE0NzQ4MzY0NyA6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUF1dG9tYXRpY1NpemUoKTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBsZXQgYmVoYXZpb3IgPSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWM7XG4gICAgbGV0IG1pblNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBsZXQgbWF4U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIHJldHVybiB7IGJlaGF2aW9yLCBtaW5TaXplLCBtYXhTaXplIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFB1Ymxpc2hlZFNoZWV0SW5mb0J5TmFtZShuYW1lOiBzdHJpbmcsIHNoZWV0SW5mb3M6IEFycmF5PFNoZWV0SW5mbz4pOiBTaGVldEluZm8gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNoZWV0SW5mbyA9IHNoZWV0SW5mb3MuZmluZCgoc2hlZXQpID0+IHNoZWV0Lm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiBzaGVldEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFNoZWV0VHlwZUVudW0oaW50ZXJuYWxTaGVldFR5cGU6IFNoZWV0VHlwZSk6IENvbnRyYWN0LlNoZWV0VHlwZSB7XG4gICAgbGV0IHNoZWV0VHlwZTogQ29udHJhY3QuU2hlZXRUeXBlO1xuICAgIHN3aXRjaCAoaW50ZXJuYWxTaGVldFR5cGUpIHtcbiAgICAgIGNhc2UgU2hlZXRUeXBlLldvcmtzaGVldDoge1xuICAgICAgICBzaGVldFR5cGUgPSBDb250cmFjdC5TaGVldFR5cGUuV29ya3NoZWV0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2hlZXRUeXBlLkRhc2hib2FyZDoge1xuICAgICAgICBzaGVldFR5cGUgPSBDb250cmFjdC5TaGVldFR5cGUuRGFzaGJvYXJkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2hlZXRUeXBlLlN0b3J5OiB7XG4gICAgICAgIHNoZWV0VHlwZSA9IENvbnRyYWN0LlNoZWV0VHlwZS5TdG9yeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuU2hhcmVkRXJyb3JDb2Rlcy5TZXJ2ZXJFcnJvciwgJ0ludmFsaWQgU2hlZXRUeXBlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaGVldFR5cGU7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWRTaGVldFNpemUoc2l6ZU9iamVjdDogQ29udHJhY3QuU2l6ZSB8IENvbnRyYWN0LlNoZWV0U2l6ZSk6IHNpemVPYmplY3QgaXMgQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICByZXR1cm4gKDxDb250cmFjdC5TaGVldFNpemU+c2l6ZU9iamVjdCkuYmVoYXZpb3IgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBEZWZlcnJlZCwgVW5yZWdpc3RlclRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gJy4vRGVmZXJyZWQnO1xuXG4vKipcbiAqIEEgRGVmZXJyZWQgd3JhcHBlciBjbGFzcyBhZGRpbmcgZnVuY3Rpb25hbGl0eSB0byByZWplY3QgdW5yZXNwb25zaXZlIHByb21pc2VzIGFmdGVyIHRpbWVvdXRcbiAqXG4gKiB0aGlzIGNsYXNzIGhhbmRsZXMgdHdvIHRoaW5nczpcblxuICogICAgMS4gQWRkcyB0aW1lb3V0IGxvZ2ljIGZvciBkZWZlcnJlZFxuICogICAgMi4gSXQgYmxvY2tzIG11bHRpcGxlIGNhbGxzIGZyb20gZXhlY3V0aW5nIGF0IHRoZSBzYW1lIHRpbWUuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFNob3J0TGl2ZWREZWZlcnJlZFxuICogQHRlbXBsYXRlIFRSZXNvbHZlIFRoZSB0eXBlIHVzZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS5cbiAqIEB0ZW1wbGF0ZSBUUmVqZWN0IFRoZSB0eXBlIHVzZWQgdG8gcmVqZWN0IHRoZSBwcm9taXNlLiBEZWZhdWx0cyB0byBhbnkuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgU2hvcnRMaXZlZERlZmVycmVkPFRSZXNvbHZlLCBUUmVqZWN0ID0gYW55PiB7XG4gIHByaXZhdGUgX2RlZmVycmVkOiBEZWZlcnJlZDxUUmVzb2x2ZSwgVFJlamVjdD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRJZDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGltZW91dEluTWlsbGlzZWNvbmRzID0gVW5yZWdpc3RlclRpbWVvdXRJbk1pbGxpc2Vjb25kcykge31cblxuICBwdWJsaWMgZ2V0TmV3UHJvbWlzZU9yVGhyb3dJZkJ1c3koKTogUHJvbWlzZTxUUmVzb2x2ZT4ge1xuICAgIGlmICh0aGlzLl9kZWZlcnJlZCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkFwaUV4ZWN1dGlvbkVycm9yLCAnVGhpcyBhcGkgY2Fubm90IGJlIGV4ZWN1dGVkIHRpbGwgcHJldmlvdXMgY2FsbCBpcyByZXNvbHZlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5fZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgIHRoaXMuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgICBDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLlRpbWVvdXQsXG4gICAgICAgIGBBcGkgZmFpbGVkIHRvIGNvbXBsZXRlIGluICR7dGhpcy5fdGltZW91dEluTWlsbGlzZWNvbmRzIC8gMTAwMH0gc2Vjb25kc2AsXG4gICAgICApO1xuICAgICAgdGhpcy5yZWplY3QoZXJyb3IpO1xuICAgIH0sIHRoaXMuX3RpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlKHJlc3BvbnNlOiBUUmVzb2x2ZSB8IFByb21pc2VMaWtlPFRSZXNvbHZlPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kZWZlcnJlZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuX2RlZmVycmVkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWplY3QoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kZWZlcnJlZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB0aGlzLl9kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xuICAgICAgdGhpcy5fZGVmZXJyZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IFZlcnNpb25OdW1iZXJDb250cmFjdCB9IGZyb20gJy4vVmVyc2lvbk51bWJlckNvbnRyYWN0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbnMsIGVtYmVkZGluZ1xuICogYW5kIGV4dGVuc2lvbnMtYXBpLXR5cGVzIGxpYnJhcnlcbiAqL1xuZXhwb3J0IGNsYXNzIFZlcnNpb25OdW1iZXIgaW1wbGVtZW50cyBWZXJzaW9uTnVtYmVyQ29udHJhY3Qge1xuICBwdWJsaWMgbWFqb3I6IG51bWJlcjtcbiAgcHVibGljIG1pbm9yOiBudW1iZXI7XG4gIHB1YmxpYyBmaXg6IG51bWJlcjtcbiAgcHVibGljIGJ1aWxkOiBudW1iZXI7XG4gIHB1YmxpYyBpc0FscGhhOiBib29sZWFuO1xuXG4gIC8vIHByaXZhdGUgY29uc3RydWN0b3Igc28gZXZlcnlvbmUgdXNlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gIC8vIGJ1aWxkIG51bWJlcnMgaGF2ZSB0aGlzIGZvcm06IE0ubS5mLXByZS5OXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2ZXJzaW9uU3RyaW5nOiBzdHJpbmcsIGlzQWxwaGE6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwYXJ0U3RyID0gdmVyc2lvblN0cmluZy5zcGxpdCgnLScpO1xuICAgIHRoaXMuYnVpbGQgPSB0aGlzLmdldEJ1aWxkTnVtYmVyKHBhcnRTdHJbMV0pO1xuICAgIHZlcnNpb25TdHJpbmcgPSBwYXJ0U3RyWzBdO1xuXG4gICAgY29uc3QgcGFydHMgPSB2ZXJzaW9uU3RyaW5nLnNwbGl0KCcuJykubWFwKChwKSA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgSW52YWxpZCB2ZXJzaW9uIG51bWJlcjogJHt2ZXJzaW9uU3RyaW5nfWApO1xuICAgIH1cblxuICAgIHRoaXMubWFqb3IgPSBwYXJ0c1swXTtcbiAgICB0aGlzLm1pbm9yID0gcGFydHNbMV07XG4gICAgdGhpcy5maXggPSBwYXJ0c1syXTtcbiAgICB0aGlzLmlzQWxwaGEgPSBpc0FscGhhO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZE51bWJlcihwcmVSZWxlYXNlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vQnVpbGROdW1iZXIgPSAtMTtcbiAgICBpZiAoIXByZVJlbGVhc2VTdHJpbmcpIHtcbiAgICAgIHJldHVybiBub0J1aWxkTnVtYmVyO1xuICAgIH1cblxuICAgIC8vIFRoZSBwcmVSZWxlYXNlIHN0cmluZyBoYXMgdGhpcyBmb3JtOiBwcmUuTiwgYnV0IHdlIGRvbid0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHN0cmluZyBiZWluZyAncHJlJ1xuICAgIGNvbnN0IHBhcnRTdHIgPSBwcmVSZWxlYXNlU3RyaW5nLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRTdHJbMV0gPyBwYXJzZUludChwYXJ0U3RyWzFdLCAxMCkgOiBub0J1aWxkTnVtYmVyO1xuICB9XG5cbiAgcHVibGljIGdldCBmb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5maXh9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZnVsbEZvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLmZpeH0tcHJlLiR7dGhpcy5idWlsZH1gO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDcmVhdGVFeHRlcm5hbENvbXBhdGlibGVWZXJzaW9uQ29udmVydGVyLFxuICBFeGVjdXRlUGFyYW1ldGVycyxcbiAgRXhlY3V0ZVJlc3BvbnNlLFxuICBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcixcbiAgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBJTlRFUk5BTF9DT05UUkFDVF9WRVJTSU9OLFxuICBOb3RpZmljYXRpb24sXG4gIE5vdGlmaWNhdGlvbkhhbmRsZXIsXG4gIFZlcmJJZCxcbiAgVmVyc2lvbkxlc3NUaGFuLFxuICBWZXJzaW9uTnVtYmVyLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBJbnRlcm5hbEFwaURpc3BhdGNoZXIgd2hpY2ggc3VwcG9ydHMgdXBncmFkaW5nIGFuZCBkb3duZ3JhZGluZyB0aGUgaW5wdXRcbiAqIGludGVybmFsIGNvbnRyYWN0IHRvIHRoZSB2ZXJzaW9uIHRoYXQgdGhpcyBtb2R1bGUgaXMgYnVpbHQgYWdhaW5zdFxuICpcbiAqIEBjbGFzcyBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXJcbiAqIEBpbXBsZW1lbnRzIHtJbnRlcm5hbEFwaURpc3BhdGNoZXJ9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIgaW1wbGVtZW50cyBJbnRlcm5hbEFwaURpc3BhdGNoZXIge1xuICBwcml2YXRlIF92ZXJzaW9uQ29udmVydGVyOiBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcjtcbiAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uSGFuZGxlcnM6IEFycmF5PE5vdGlmaWNhdGlvbkhhbmRsZXI+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXJcbiAgICogV2UgaGF2ZSBtdWx0aXBsZSB2ZXJzaW9uIGNvbnZlcnRpbmcgZGlzcGF0Y2hlcnMgdGhhdCB3b3JrIHRvZ2V0aGVyLlxuICAgKiBJZiBuZWVkZWQsIHRoZSBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIgd3JhcHMgZWl0aGVyIHRoZSBJbnRlcm5hbEFwaURpc3BhdGNoZXIgKGRlc2t0b3ApXG4gICAqIG9yIHRoZSBDcm9zc0ZyYW1lRGlzcGF0Y2hlciAoc2VydmVyKS5cbiAgICogVGhlIEludGVybmFsL0Nyb3NzRnJhbWUgZGlzcGF0Y2hlcnMgaGFuZGxlIGFuIHVwZGF0ZWQgcGxhdGZvcm0gd2l0aCBhbiBvbGRlciBleHRlcm5hbCBsaWJyYXJ5LlxuICAgKiAoVGhlIENyb3NzRnJhbWVEaXNwYXRjaGVyIHNlbmRzIG1lc3NhZ2VzIGFjcm9zcyB0aGUgZnJhbWUsIGFuZCBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBQcmVzTGF5ZXJIYW5kbGVyLilcbiAgICogTWVhbndoaWxlLCB0aGUgVmVyc2lvbmVkRXh0ZXJuYWxBcGlEaXNwYXRjaGVyIGhhbmRsZXMgYW4gdXBkYXRlZCBleHRlcm5hbCBsaWJyYXJ5IHdpdGggYW4gb2xkZXIgcGxhdGZvcm0uXG5cbiAgICogQHBhcmFtIF9hcGlEZWxlZ2F0ZURpc3BhdGNoZXIgVGhlIGRlbGVnYXRlIHRoYXQgZG9lcyB0aGUgYWN0dWFsIHdvcmsuXG4gICAqIEBwYXJhbSBwbGF0Zm9ybVZlcnNpb25OdW1iZXIgVGhlIHZlcnNpb24gb2YgdGhlIGludGVybmFsIGNvbnRyYWN0IHdoaWNoIHRoZSBwbGF0Zm9ybSBtb2R1bGUgaXMgdXNpbmcuXG4gICAqIFRoaXMgbnVtYmVyIHdpbGwgYmUgdXNlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkb3duZ3JhZGUgaW5jb21pbmcgY29tbWFuZHMgYW5kIHVwZ3JhZGUgdGhlIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcGlEZWxlZ2F0ZURpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlciwgcGxhdGZvcm1WZXJzaW9uTnVtYmVyOiBWZXJzaW9uTnVtYmVyKSB7XG4gICAgdGhpcy5fdmVyc2lvbkNvbnZlcnRlciA9IENyZWF0ZUV4dGVybmFsQ29tcGF0aWJsZVZlcnNpb25Db252ZXJ0ZXIoSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTiwgcGxhdGZvcm1WZXJzaW9uTnVtYmVyKTtcblxuICAgIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzID0gW107XG4gICAgX2FwaURlbGVnYXRlRGlzcGF0Y2hlci5yZWdpc3Rlck5vdGlmaWNhdGlvbkhhbmRsZXIoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZ3JhZGVkTm90aWZpY2F0aW9uID0gdGhpcy5fdmVyc2lvbkNvbnZlcnRlci51cGdyYWRlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XG4gICAgICAgIGhhbmRsZXIodXBncmFkZWROb3RpZmljYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG5lZWRzVmVyc2lvbkNvbnZlcnRlcihwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiBvdXIgcGxhdGZvcm0gaXMgbGVzcyB0aGFuIGV4dGVybmFsIGxpYnJhcnkgdmVyc2lvbiwgdGhlbiB3ZSBuZWVkIGEgY29udmVydGVyXG4gICAgcmV0dXJuIFZlcnNpb25MZXNzVGhhbihwbGF0Zm9ybVZlcnNpb24sIElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04pO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUodmVyYjogVmVyYklkLCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyk6IFByb21pc2U8RXhlY3V0ZVJlc3BvbnNlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvd25ncmFkZVBhcmFtZXRlcnMgPSB0aGlzLl92ZXJzaW9uQ29udmVydGVyLmRvd25ncmFkZUV4ZWN1dGVDYWxsKHZlcmIsIHBhcmFtZXRlcnMpO1xuICAgICAgcmV0dXJuIHRoaXMuX2FwaURlbGVnYXRlRGlzcGF0Y2hlci5leGVjdXRlKGRvd25ncmFkZVBhcmFtZXRlcnMudmVyYiwgZG93bmdyYWRlUGFyYW1ldGVycy5wYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCB1cGdyYWRlUmVzcG9uc2UgPSB0aGlzLl92ZXJzaW9uQ29udmVydGVyLnVwZ3JhZGVFeGVjdXRlUmV0dXJuKHJlc3BvbnNlLCB2ZXJiLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHVwZ3JhZGVSZXNwb25zZTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKGhhbmRsZXI6IE5vdGlmaWNhdGlvbkhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICB9XG5cbiAgcHVibGljIHVucmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKGhhbmRsZXI6IE5vdGlmaWNhdGlvbkhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycyA9IHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmZpbHRlcigoaCkgPT4gaCAhPT0gaGFuZGxlcik7XG4gIH1cbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgdjEgfSBmcm9tICcuL3YxLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdjMgfSBmcm9tICcuL3YzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdjQgfSBmcm9tICcuL3Y0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdjUgfSBmcm9tICcuL3Y1LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTklMIH0gZnJvbSAnLi9uaWwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmFsaWRhdGUgfSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZSB9IGZyb20gJy4vcGFyc2UuanMnOyIsIi8qXG4gKiBCcm93c2VyLWNvbXBhdGlibGUgSmF2YVNjcmlwdCBNRDVcbiAqXG4gKiBNb2RpZmljYXRpb24gb2YgSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIHZhciBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobXNnLmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXNbaV0gPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWQ1VG9IZXhFbmNvZGVkQXJyYXkod29yZHNUb01kNShieXRlc1RvV29yZHMoYnl0ZXMpLCBieXRlcy5sZW5ndGggKiA4KSk7XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVUb0hleEVuY29kZWRBcnJheShpbnB1dCkge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIHZhciBsZW5ndGgzMiA9IGlucHV0Lmxlbmd0aCAqIDMyO1xuICB2YXIgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgIHZhciB4ID0gaW5wdXRbaSA+PiA1XSA+Pj4gaSAlIDMyICYgMHhmZjtcbiAgICB2YXIgaGV4ID0gcGFyc2VJbnQoaGV4VGFiLmNoYXJBdCh4ID4+PiA0ICYgMHgwZikgKyBoZXhUYWIuY2hhckF0KHggJiAweDBmKSwgMTYpO1xuICAgIG91dHB1dC5wdXNoKGhleCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgb3V0cHV0IGxlbmd0aCB3aXRoIHBhZGRpbmcgYW5kIGJpdCBsZW5ndGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aDgpIHtcbiAgcmV0dXJuIChpbnB1dExlbmd0aDggKyA2NCA+Pj4gOSA8PCA0KSArIDE0ICsgMTtcbn1cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICovXG5cblxuZnVuY3Rpb24gd29yZHNUb01kNSh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgeFtnZXRPdXRwdXRMZW5ndGgobGVuKSAtIDFdID0gbGVuO1xuICB2YXIgYSA9IDE3MzI1ODQxOTM7XG4gIHZhciBiID0gLTI3MTczMzg3OTtcbiAgdmFyIGMgPSAtMTczMjU4NDE5NDtcbiAgdmFyIGQgPSAyNzE3MzM4Nzg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgIHZhciBvbGRhID0gYTtcbiAgICB2YXIgb2xkYiA9IGI7XG4gICAgdmFyIG9sZGMgPSBjO1xuICAgIHZhciBvbGRkID0gZDtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMik7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMyk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sIDksIDM4MDE2MDgzKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDldLCA1LCA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgOF0sIDIwLCAxMTYzNTMxNTAxKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTQsIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG4gICAgYSA9IHNhZmVBZGQoYSwgb2xkYSk7XG4gICAgYiA9IHNhZmVBZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVBZGQoYywgb2xkYyk7XG4gICAgZCA9IHNhZmVBZGQoZCwgb2xkZCk7XG4gIH1cblxuICByZXR1cm4gW2EsIGIsIGMsIGRdO1xufVxuLypcbiAqIENvbnZlcnQgYW4gYXJyYXkgYnl0ZXMgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBieXRlc1RvV29yZHMoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBsZW5ndGg4ID0gaW5wdXQubGVuZ3RoICogODtcbiAgdmFyIG91dHB1dCA9IG5ldyBVaW50MzJBcnJheShnZXRPdXRwdXRMZW5ndGgobGVuZ3RoOCkpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgb3V0cHV0W2kgPj4gNV0gfD0gKGlucHV0W2kgLyA4XSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKlxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICB2YXIgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpO1xuICB2YXIgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG4gIHJldHVybiBtc3cgPDwgMTYgfCBsc3cgJiAweGZmZmY7XG59XG4vKlxuICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICovXG5cblxuZnVuY3Rpb24gYml0Um90YXRlTGVmdChudW0sIGNudCkge1xuICByZXR1cm4gbnVtIDw8IGNudCB8IG51bSA+Pj4gMzIgLSBjbnQ7XG59XG4vKlxuICogVGhlc2UgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgZm91ciBiYXNpYyBvcGVyYXRpb25zIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIG1kNWNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gIHJldHVybiBzYWZlQWRkKGJpdFJvdGF0ZUxlZnQoc2FmZUFkZChzYWZlQWRkKGEsIHEpLCBzYWZlQWRkKHgsIHQpKSwgcyksIGIpO1xufVxuXG5mdW5jdGlvbiBtZDVmZihhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiAmIGMgfCB+YiAmIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiAmIGQgfCBjICYgfmQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1aWkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGMgXiAoYiB8IH5kKSwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1kNTsiLCJleHBvcnQgZGVmYXVsdCAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJzsiLCJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICB2YXIgdjtcbiAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gUGFyc2UgIyMjIyMjIyMtLi4uLi0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLSMjIyMtLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLSMjIyMtLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0jIyMjLS4uLi4uLi4uLi4uLlxuXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLS4uLi4tIyMjIyMjIyMjIyMjXG4gIC8vIChVc2UgXCIvXCIgdG8gYXZvaWQgMzItYml0IHRydW5jYXRpb24gd2hlbiBiaXQtc2hpZnRpbmcgaGlnaC1vcmRlciBieXRlcylcblxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZTsiLCJleHBvcnQgZGVmYXVsdCAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7IiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG52YXIgZ2V0UmFuZG9tVmFsdWVzO1xudmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm5nKCkge1xuICAvLyBsYXp5IGxvYWQgc28gdGhhdCBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIHRvIHBvbHlmaWxsIGhhdmUgYSBjaGFuY2UgdG8gZG8gc29cbiAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uIEFsc28sXG4gICAgLy8gZmluZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgY3J5cHRvIChtc0NyeXB0bykgb24gSUUxMS5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pIHx8IHR5cGVvZiBtc0NyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIi8vIEFkYXB0ZWQgZnJvbSBDaHJpcyBWZW5lc3MnIFNIQTEgY29kZSBhdFxuLy8gaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9zaGExLmh0bWxcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICBzd2l0Y2ggKHMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcblxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gIH1cbn1cblxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgdmFyIEsgPSBbMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNl07XG4gIHZhciBIID0gWzB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjBdO1xuXG4gIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cblxuICBieXRlcy5wdXNoKDB4ODApO1xuICB2YXIgbCA9IGJ5dGVzLmxlbmd0aCAvIDQgKyAyO1xuICB2YXIgTiA9IE1hdGguY2VpbChsIC8gMTYpO1xuICB2YXIgTSA9IG5ldyBBcnJheShOKTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgTjsgKytfaSkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBhcnJbal0gPSBieXRlc1tfaSAqIDY0ICsgaiAqIDRdIDw8IDI0IHwgYnl0ZXNbX2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tfaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4IHwgYnl0ZXNbX2kgKiA2NCArIGogKiA0ICsgM107XG4gICAgfVxuXG4gICAgTVtfaV0gPSBhcnI7XG4gIH1cblxuICBNW04gLSAxXVsxNF0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4IC8gTWF0aC5wb3coMiwgMzIpO1xuICBNW04gLSAxXVsxNF0gPSBNYXRoLmZsb29yKE1bTiAtIDFdWzE0XSk7XG4gIE1bTiAtIDFdWzE1XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggJiAweGZmZmZmZmZmO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47ICsrX2kyKSB7XG4gICAgdmFyIFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuXG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCAxNjsgKyt0KSB7XG4gICAgICBXW3RdID0gTVtfaTJdW3RdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF90ID0gMTY7IF90IDwgODA7ICsrX3QpIHtcbiAgICAgIFdbX3RdID0gUk9UTChXW190IC0gM10gXiBXW190IC0gOF0gXiBXW190IC0gMTRdIF4gV1tfdCAtIDE2XSwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBIWzBdO1xuICAgIHZhciBiID0gSFsxXTtcbiAgICB2YXIgYyA9IEhbMl07XG4gICAgdmFyIGQgPSBIWzNdO1xuICAgIHZhciBlID0gSFs0XTtcblxuICAgIGZvciAodmFyIF90MiA9IDA7IF90MiA8IDgwOyArK190Mikge1xuICAgICAgdmFyIHMgPSBNYXRoLmZsb29yKF90MiAvIDIwKTtcbiAgICAgIHZhciBUID0gUk9UTChhLCA1KSArIGYocywgYiwgYywgZCkgKyBlICsgS1tzXSArIFdbX3QyXSA+Pj4gMDtcbiAgICAgIGUgPSBkO1xuICAgICAgZCA9IGM7XG4gICAgICBjID0gUk9UTChiLCAzMCkgPj4+IDA7XG4gICAgICBiID0gYTtcbiAgICAgIGEgPSBUO1xuICAgIH1cblxuICAgIEhbMF0gPSBIWzBdICsgYSA+Pj4gMDtcbiAgICBIWzFdID0gSFsxXSArIGIgPj4+IDA7XG4gICAgSFsyXSA9IEhbMl0gKyBjID4+PiAwO1xuICAgIEhbM10gPSBIWzNdICsgZCA+Pj4gMDtcbiAgICBIWzRdID0gSFs0XSArIGUgPj4+IDA7XG4gIH1cblxuICByZXR1cm4gW0hbMF0gPj4gMjQgJiAweGZmLCBIWzBdID4+IDE2ICYgMHhmZiwgSFswXSA+PiA4ICYgMHhmZiwgSFswXSAmIDB4ZmYsIEhbMV0gPj4gMjQgJiAweGZmLCBIWzFdID4+IDE2ICYgMHhmZiwgSFsxXSA+PiA4ICYgMHhmZiwgSFsxXSAmIDB4ZmYsIEhbMl0gPj4gMjQgJiAweGZmLCBIWzJdID4+IDE2ICYgMHhmZiwgSFsyXSA+PiA4ICYgMHhmZiwgSFsyXSAmIDB4ZmYsIEhbM10gPj4gMjQgJiAweGZmLCBIWzNdID4+IDE2ICYgMHhmZiwgSFszXSA+PiA4ICYgMHhmZiwgSFszXSAmIDB4ZmYsIEhbNF0gPj4gMjQgJiAweGZmLCBIWzRdID4+IDE2ICYgMHhmZiwgSFs0XSA+PiA4ICYgMHhmZiwgSFs0XSAmIDB4ZmZdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaGExOyIsImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsImltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7IC8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcblxudmFyIF9ub2RlSWQ7XG5cbnZhciBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbnZhciBfbGFzdE1TZWNzID0gMDtcbnZhciBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIHZhciBiID0gYnVmIHx8IG5ldyBBcnJheSgxNik7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxOyAvLyBub2RlIGFuZCBjbG9ja3NlcSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHJhbmRvbSB2YWx1ZXMgaWYgdGhleSdyZSBub3RcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcblxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICB2YXIgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIHZhciBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgdmFyIGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjsgLy8gYHRpbWVfbWlkYFxuXG4gIHZhciB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IHN0cmluZ2lmeShiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjE7IiwiaW1wb3J0IHYzNSBmcm9tICcuL3YzNS5qcyc7XG5pbXBvcnQgbWQ1IGZyb20gJy4vbWQ1LmpzJztcbnZhciB2MyA9IHYzNSgndjMnLCAweDMwLCBtZDUpO1xuZXhwb3J0IGRlZmF1bHQgdjM7IiwiaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5pbXBvcnQgcGFyc2UgZnJvbSAnLi9wYXJzZS5qcyc7XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICB2YXIgYnl0ZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5leHBvcnQgdmFyIEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0IHZhciBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChuYW1lLCB2ZXJzaW9uLCBoYXNoZnVuYykge1xuICBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQodmFsdWUsIG5hbWVzcGFjZSwgYnVmLCBvZmZzZXQpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9IHBhcnNlKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWVzcGFjZS5sZW5ndGggIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmdpZnkoYnl0ZXMpO1xuICB9IC8vIEZ1bmN0aW9uI25hbWUgaXMgbm90IHNldHRhYmxlIG9uIHNvbWUgcGxhdGZvcm1zICgjMjcwKVxuXG5cbiAgdHJ5IHtcbiAgICBnZW5lcmF0ZVVVSUQubmFtZSA9IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9IGNhdGNoIChlcnIpIHt9IC8vIEZvciBDb21tb25KUyBkZWZhdWx0IGV4cG9ydCBzdXBwb3J0XG5cblxuICBnZW5lcmF0ZVVVSUQuRE5TID0gRE5TO1xuICBnZW5lcmF0ZVVVSUQuVVJMID0gVVJMO1xuICByZXR1cm4gZ2VuZXJhdGVVVUlEO1xufSIsImltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsImltcG9ydCB2MzUgZnJvbSAnLi92MzUuanMnO1xuaW1wb3J0IHNoYTEgZnJvbSAnLi9zaGExLmpzJztcbnZhciB2NSA9IHYzNSgndjUnLCAweDUwLCBzaGExKTtcbmV4cG9ydCBkZWZhdWx0IHY1OyIsImltcG9ydCBSRUdFWCBmcm9tICcuL3JlZ2V4LmpzJztcblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIFJFR0VYLnRlc3QodXVpZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlOyIsImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc3Vic3RyKDE0LCAxKSwgMTYpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2ZXJzaW9uOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKipcbiAqIFRoaXMgaXMgeW91ciBtYWluLiBUaGlzIGlzIHdoZXJlIHlvdSByZS1leHBvcnQgZXZlcnl0aGluZyB5b3Ugd2FudCB0byBiZSBwdWJsaWNseSBhdmFpbGFibGUuXG4gKlxuICogVGhlIGJ1aWxkIGVuZm9yY2VzIHRoYXQgdGhlIGZpbGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGdsb2JhbCB2YXJpYWJsZSB0aGF0IGlzIGV4cG9ydGVkLlxuICovXG5cbi8vIFRoZSBmb2xsb3dpbmcgcG9seWZpbGxzIGFyZSBuZWVkZWQgZm9yIElFMTFcblxuaW1wb3J0IHsgQXBpVmVyc2lvbiB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0ICdjb3JlLWpzL2VzL2FycmF5L2ZpbmQnO1xuaW1wb3J0ICdjb3JlLWpzL2VzL2FycmF5L2Zyb20nO1xuaW1wb3J0ICdjb3JlLWpzL2VzL21hcCc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvbnVtYmVyL2lzLWludGVnZXInO1xuaW1wb3J0ICdjb3JlLWpzL2VzL251bWJlci9pcy1uYW4nO1xuaW1wb3J0ICdjb3JlLWpzL2VzL251bWJlci9wYXJzZS1mbG9hdCc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvbnVtYmVyL3BhcnNlLWludCc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvb2JqZWN0L2Fzc2lnbic7XG5pbXBvcnQgJ2NvcmUtanMvZXMvb2JqZWN0L2VudHJpZXMnO1xuaW1wb3J0ICdjb3JlLWpzL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJztcbmltcG9ydCAnY29yZS1qcy9lcy9wcm9taXNlJztcbi8vIER1ZSB0byB0aGUgd2F5IHdlIGNvbmZpZ3VyZWQgd2VicGFjaywgd2Ugc2hvdWxkIGJlIGV4cG9ydGluZyB0aGluZ3Mgd2hpY2ggd2lsbCBiZSB1bmRlclxuLy8gYSBnbG9iYWwgdmFyaWFibGUgY2FsbGVkIFwidGFibGVhdVwiLiBFeHBvcnQgZXZlcnl0aGluZyB3ZSB3YW50IHRvIGJlIHZpc2libGUgdW5kZXIgdGFibGVhdVxuLy8gZnJvbSB0aGlzIGZpbGUuXG5pbXBvcnQgeyBFeHRlbnNpb25zSW1wbCB9IGZyb20gJy4vRXh0ZW5zaW9uc0FwaS9JbXBsL0V4dGVuc2lvbnNJbXBsJztcbmltcG9ydCB7IEV4dGVuc2lvbnMgfSBmcm9tICcuL0V4dGVuc2lvbnNBcGkvTmFtZXNwYWNlcy9FeHRlbnNpb25zJztcblxuZGVjbGFyZSBsZXQgVkVSU0lPTl9JU19BTFBIQTogYm9vbGVhbjtcbmNvbnN0IGlzQWxwaGE6IGJvb2xlYW4gPSB0eXBlb2YgVkVSU0lPTl9JU19BTFBIQSAhPT0gJ3VuZGVmaW5lZCcgPyBWRVJTSU9OX0lTX0FMUEhBIDogZmFsc2U7XG5cbmRlY2xhcmUgbGV0IEFQSV9WRVJTSU9OX05VTUJFUjogc3RyaW5nO1xuQXBpVmVyc2lvbi5TZXRWZXJzaW9uTnVtYmVyKHR5cGVvZiBBUElfVkVSU0lPTl9OVU1CRVIgIT09ICd1bmRlZmluZWQnID8gQVBJX1ZFUlNJT05fTlVNQkVSIDogJzAuMC4wJywgaXNBbHBoYSk7XG5cbmNvbnN0IGV4dGVuc2lvbkltcGwgPSBuZXcgRXh0ZW5zaW9uc0ltcGwoKTtcbmV4cG9ydCBjb25zdCBleHRlbnNpb25zID0gbmV3IEV4dGVuc2lvbnMoZXh0ZW5zaW9uSW1wbCk7XG5cbi8vIEV4cG9ydCBFbnVtc1xuLy8gVGhlc2Ugc2hvdyB1cCB1bmRlciB0aGUgdGFibGVhdSBvYmplY3QuIEkuZS4gdGFibGVhdS5FeHRlbnNpb25Db250ZXh0LlNlcnZlclxuZXhwb3J0IHtcbiAgQW5hbHl0aWNzT2JqZWN0VHlwZSxcbiAgQW5ub3RhdGlvblR5cGUsXG4gIENsYXNzTmFtZUtleSxcbiAgQ29sdW1uVHlwZSxcbiAgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlLFxuICBEYXNoYm9hcmRPYmplY3RUeXBlLFxuICBEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZSxcbiAgRGF0YVR5cGUsXG4gIERhdGVSYW5nZVR5cGUsXG4gIERpYWxvZ1N0eWxlLFxuICBFbmNvZGluZ1R5cGUsXG4gIEVycm9yQ29kZXMsXG4gIEV4dGVuc2lvbkNvbnRleHQsXG4gIEV4dGVuc2lvbk1vZGUsXG4gIEZpZWxkQWdncmVnYXRpb25UeXBlLFxuICBGaWVsZFJvbGVUeXBlLFxuICBGaWx0ZXJEb21haW5UeXBlLFxuICBGaWx0ZXJOdWxsT3B0aW9uLFxuICBGaWx0ZXJUeXBlLFxuICBGaWx0ZXJVcGRhdGVUeXBlLFxuICBIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLFxuICBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgTWFya1R5cGUsXG4gIFBhcmFtZXRlclZhbHVlVHlwZSxcbiAgUGVyaW9kVHlwZSxcbiAgUXVpY2tUYWJsZUNhbGNUeXBlLFxuICBSZWxhdGl2ZURhdGVGaWx0ZXJPcHRpb25zLFxuICBSZXBsYXlTcGVlZFR5cGUsXG4gIFNlbGVjdE9wdGlvbnMsXG4gIFNlbGVjdGlvblVwZGF0ZVR5cGUsXG4gIFNoZWV0VHlwZSxcbiAgU29ydERpcmVjdGlvbixcbiAgVGFibGVhdUV2ZW50VHlwZSxcbiAgVHJlbmRMaW5lTW9kZWxUeXBlLFxuICBWaXpJbWFnZUVuY29kaW5nVHlwZSxcbiAgVml6SW1hZ2VQYWxldHRlVHlwZSxcbiAgVml6SW1hZ2VTaXplU2V0dGluZ0FsaWdubWVudFR5cGUsXG4gIFZpekltYWdlU2l6ZVNldHRpbmdUeXBlLFxuICBWaXpJbWFnZVNvcnREaXJlY3Rpb25UeXBlLFxuICBab25lVmlzaWJpbGl0eVR5cGUsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/lib/tableau.extensions.1.11.0.min.js b/lib/tableau.extensions.1.11.0.min.js new file mode 100644 index 00000000..124aa493 --- /dev/null +++ b/lib/tableau.extensions.1.11.0.min.js @@ -0,0 +1,2 @@ +(()=>{var e={163:(e,t,r)=>{r(9228);var n=r(8791);e.exports=n("Array","find")},6916:(e,t,r)=>{r(8673),r(7233);var n=r(9276);e.exports=n.Array.from},9618:(e,t,r)=>{r(5735),r(9321),r(8188),r(8673);var n=r(9276);e.exports=n.Map},5611:(e,t,r)=>{r(3132);var n=r(9276);e.exports=n.Number.isInteger},2316:(e,t,r)=>{r(4586);var n=r(9276);e.exports=n.Number.isNaN},119:(e,t,r)=>{r(8836);var n=r(9276);e.exports=n.Number.parseFloat},1980:(e,t,r)=>{r(7208);var n=r(9276);e.exports=n.Number.parseInt},47:(e,t,r)=>{r(3105);var n=r(9276);e.exports=n.Object.assign},188:(e,t,r)=>{r(5883);var n=r(9276);e.exports=n.Object.entries},5956:(e,t,r)=>{r(2506);var n=r(9276);e.exports=n.Object.setPrototypeOf},4137:(e,t,r)=>{r(5738),r(5735),r(8188),r(3439),r(7919),r(7178),r(1515),r(8673);var n=r(9276);e.exports=n.Promise},7111:(e,t,r)=>{var n=r(9859),i=r(6733),o=r(9821),a=n.TypeError;e.exports=function(e){if(i(e))return e;throw a(o(e)+" is not a function")}},7988:(e,t,r)=>{var n=r(9859),i=r(2359),o=r(9821),a=n.TypeError;e.exports=function(e){if(i(e))return e;throw a(o(e)+" is not a constructor")}},8505:(e,t,r)=>{var n=r(9859),i=r(6733),o=n.String,a=n.TypeError;e.exports=function(e){if("object"==typeof e||i(e))return e;throw a("Can't set "+o(e)+" as a prototype")}},9736:(e,t,r)=>{var n=r(95),i=r(7263),o=r(1787),a=n("unscopables"),s=Array.prototype;null==s[a]&&o.f(s,a,{configurable:!0,value:i(null)}),e.exports=function(e){s[a][e]=!0}},7728:(e,t,r)=>{var n=r(9859),i=r(1321),o=n.TypeError;e.exports=function(e,t){if(i(t,e))return e;throw o("Incorrect invocation")}},1176:(e,t,r)=>{var n=r(9859),i=r(5052),o=n.String,a=n.TypeError;e.exports=function(e){if(i(e))return e;throw a(o(e)+" is not an object")}},507:(e,t,r)=>{"use strict";var n=r(9859),i=r(7636),o=r(266),a=r(2991),s=r(4960),u=r(1943),l=r(2359),c=r(9646),p=r(2324),d=r(8403),f=r(8830),y=n.Array;e.exports=function(e){var t=a(e),r=l(this),n=arguments.length,h=n>1?arguments[1]:void 0,m=void 0!==h;m&&(h=i(h,n>2?arguments[2]:void 0));var g,v,b,I,S,_,T=f(t),P=0;if(!T||this==y&&u(T))for(g=c(t),v=r?new this(g):y(g);g>P;P++)_=m?h(t[P],P):t[P],p(v,P,_);else for(S=(I=d(t,T)).next,v=r?new this:[];!(b=o(S,I)).done;P++)_=m?s(I,h,[b.value,P],!0):b.value,p(v,P,_);return v.length=P,v}},9540:(e,t,r)=>{var n=r(905),i=r(3231),o=r(9646),a=function(e){return function(t,r,a){var s,u=n(t),l=o(u),c=i(a,l);if(e&&r!=r){for(;l>c;)if((s=u[c++])!=s)return!0}else for(;l>c;c++)if((e||c in u)&&u[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},9996:(e,t,r)=>{var n=r(7636),i=r(5968),o=r(9337),a=r(2991),s=r(9646),u=r(7501),l=i([].push),c=function(e){var t=1==e,r=2==e,i=3==e,c=4==e,p=6==e,d=7==e,f=5==e||p;return function(y,h,m,g){for(var v,b,I=a(y),S=o(I),_=n(h,m),T=s(S),P=0,A=g||u,E=t?A(y,T):r||d?A(y,0):void 0;T>P;P++)if((f||P in S)&&(b=_(v=S[P],P,I),e))if(t)E[P]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return P;case 2:l(E,v)}else switch(e){case 4:return!1;case 7:l(E,v)}return p?-1:i||c?c:E}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},1909:(e,t,r)=>{var n=r(5968);e.exports=n([].slice)},8760:(e,t,r)=>{var n=r(9859),i=r(3718),o=r(2359),a=r(5052),s=r(95)("species"),u=n.Array;e.exports=function(e){var t;return i(e)&&(t=e.constructor,(o(t)&&(t===u||i(t.prototype))||a(t)&&null===(t=t[s]))&&(t=void 0)),void 0===t?u:t}},7501:(e,t,r)=>{var n=r(8760);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},4960:(e,t,r)=>{var n=r(1176),i=r(7281);e.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){i(e,"throw",t)}}},4575:(e,t,r)=>{var n=r(95)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var r=!1;try{var o={};o[n]=function(){return{next:function(){return{done:r=!0}}}},e(o)}catch(e){}return r}},7079:(e,t,r)=>{var n=r(5968),i=n({}.toString),o=n("".slice);e.exports=function(e){return o(i(e),8,-1)}},1589:(e,t,r)=>{var n=r(9859),i=r(1601),o=r(6733),a=r(7079),s=r(95)("toStringTag"),u=n.Object,l="Arguments"==a(function(){return arguments}());e.exports=i?a:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=u(e),s))?r:l?a(t):"Object"==(n=a(t))&&o(t.callee)?"Arguments":n}},1590:(e,t,r)=>{var n=r(5968),i=r(1909),o=n("".replace),a=n("".split),s=n([].join),u=String(Error("zxcasd").stack),l=/\n\s*at [^:]*:[^\n]*/,c=l.test(u),p=/@[^\n]*\n/.test(u)&&!/zxcasd/.test(u);e.exports=function(e,t){if("string"!=typeof e)return e;if(c)for(;t--;)e=o(e,l,"");else if(p)return s(i(a(e,"\n"),t),"\n");return e}},8081:(e,t,r)=>{"use strict";var n=r(1787).f,i=r(7263),o=r(8787),a=r(7636),s=r(7728),u=r(9003),l=r(7675),c=r(1832),p=r(7400),d=r(5926).fastKey,f=r(6407),y=f.set,h=f.getterFor;e.exports={getConstructor:function(e,t,r,l){var c=e((function(e,n){s(e,f),y(e,{type:t,index:i(null),first:void 0,last:void 0,size:0}),p||(e.size=0),null!=n&&u(n,e[l],{that:e,AS_ENTRIES:r})})),f=c.prototype,m=h(t),g=function(e,t,r){var n,i,o=m(e),a=v(e,t);return a?a.value=r:(o.last=a={index:i=d(t,!0),key:t,value:r,previous:n=o.last,next:void 0,removed:!1},o.first||(o.first=a),n&&(n.next=a),p?o.size++:e.size++,"F"!==i&&(o.index[i]=a)),e},v=function(e,t){var r,n=m(e),i=d(t);if("F"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key==t)return r};return o(f,{clear:function(){for(var e=m(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,p?e.size=0:this.size=0},delete:function(e){var t=this,r=m(t),n=v(t,e);if(n){var i=n.next,o=n.previous;delete r.index[n.index],n.removed=!0,o&&(o.next=i),i&&(i.previous=o),r.first==n&&(r.first=i),r.last==n&&(r.last=o),p?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=m(this),n=a(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!v(this,e)}}),o(f,r?{get:function(e){var t=v(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),p&&n(f,"size",{get:function(){return m(this).size}}),c},setStrong:function(e,t,r){var n=t+" Iterator",i=h(t),o=h(n);l(e,t,(function(e,t){y(this,{type:n,target:e,state:i(e),kind:t,last:void 0})}),(function(){for(var e=o(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?"keys"==t?{value:r.key,done:!1}:"values"==t?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),r?"entries":"values",!r,!0),c(t)}}},9789:(e,t,r)=>{"use strict";var n=r(3103),i=r(9859),o=r(5968),a=r(6541),s=r(7487),u=r(5926),l=r(9003),c=r(7728),p=r(6733),d=r(5052),f=r(4229),y=r(4575),h=r(4555),m=r(835);e.exports=function(e,t,r){var g=-1!==e.indexOf("Map"),v=-1!==e.indexOf("Weak"),b=g?"set":"add",I=i[e],S=I&&I.prototype,_=I,T={},P=function(e){var t=o(S[e]);s(S,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(v&&!d(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return v&&!d(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(v&&!d(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(a(e,!p(I)||!(v||S.forEach&&!f((function(){(new I).entries().next()})))))_=r.getConstructor(t,e,g,b),u.enable();else if(a(e,!0)){var A=new _,E=A[b](v?{}:-0,1)!=A,w=f((function(){A.has(1)})),O=y((function(e){new I(e)})),D=!v&&f((function(){for(var e=new I,t=5;t--;)e[b](t,t);return!e.has(-0)}));O||((_=t((function(e,t){c(e,S);var r=m(new I,e,_);return null!=t&&l(t,r[b],{that:r,AS_ENTRIES:g}),r}))).prototype=S,S.constructor=_),(w||D)&&(P("delete"),P("has"),g&&P("get")),(D||E)&&P(b),v&&S.clear&&delete S.clear}return T[e]=_,n({global:!0,forced:_!=I},T),h(_,e),v||r.setStrong(_,e,g),_}},7081:(e,t,r)=>{var n=r(8270),i=r(4826),o=r(7933),a=r(1787);e.exports=function(e,t){for(var r=i(t),s=a.f,u=o.f,l=0;l{var n=r(4229);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},3723:(e,t,r)=>{"use strict";var n=r(693).IteratorPrototype,i=r(7263),o=r(5358),a=r(4555),s=r(5495),u=function(){return this};e.exports=function(e,t,r){var l=t+" Iterator";return e.prototype=i(n,{next:o(1,r)}),a(e,l,!1,!0),s[l]=u,e}},5762:(e,t,r)=>{var n=r(7400),i=r(1787),o=r(5358);e.exports=n?function(e,t,r){return i.f(e,t,o(1,r))}:function(e,t,r){return e[t]=r,e}},5358:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},2324:(e,t,r)=>{"use strict";var n=r(9310),i=r(1787),o=r(5358);e.exports=function(e,t,r){var a=n(t);a in e?i.f(e,a,o(0,r)):e[a]=r}},7675:(e,t,r)=>{"use strict";var n=r(3103),i=r(266),o=r(4231),a=r(1805),s=r(6733),u=r(3723),l=r(7567),c=r(6540),p=r(4555),d=r(5762),f=r(7487),y=r(95),h=r(5495),m=r(693),g=a.PROPER,v=a.CONFIGURABLE,b=m.IteratorPrototype,I=m.BUGGY_SAFARI_ITERATORS,S=y("iterator"),_="keys",T="values",P="entries",A=function(){return this};e.exports=function(e,t,r,a,y,m,E){u(r,t,a);var w,O,D,x=function(e){if(e===y&&k)return k;if(!I&&e in N)return N[e];switch(e){case _:case T:case P:return function(){return new r(this,e)}}return function(){return new r(this)}},F=t+" Iterator",C=!1,N=e.prototype,M=N[S]||N["@@iterator"]||y&&N[y],k=!I&&M||x(y),R="Array"==t&&N.entries||M;if(R&&(w=l(R.call(new e)))!==Object.prototype&&w.next&&(o||l(w)===b||(c?c(w,b):s(w[S])||f(w,S,A)),p(w,F,!0,!0),o&&(h[F]=A)),g&&y==T&&M&&M.name!==T&&(!o&&v?d(N,"name",T):(C=!0,k=function(){return i(M,this)})),y)if(O={values:x(T),keys:m?k:x(_),entries:x(P)},E)for(D in O)(I||C||!(D in N))&&f(N,D,O[D]);else n({target:t,proto:!0,forced:I||C},O);return o&&!E||N[S]===k||f(N,S,k,{name:y}),h[t]=k,O}},7400:(e,t,r)=>{var n=r(4229);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},2635:(e,t,r)=>{var n=r(9859),i=r(5052),o=n.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},8639:e=>{e.exports="object"==typeof window},8983:(e,t,r)=>{var n=r(598),i=r(9859);e.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==i.Pebble},2023:(e,t,r)=>{var n=r(598);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},8801:(e,t,r)=>{var n=r(7079),i=r(9859);e.exports="process"==n(i.process)},263:(e,t,r)=>{var n=r(598);e.exports=/web0s(?!.*chrome)/i.test(n)},598:(e,t,r)=>{var n=r(1333);e.exports=n("navigator","userAgent")||""},6358:(e,t,r)=>{var n,i,o=r(9859),a=r(598),s=o.process,u=o.Deno,l=s&&s.versions||u&&u.version,c=l&&l.v8;c&&(i=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&a&&(!(n=a.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=a.match(/Chrome\/(\d+)/))&&(i=+n[1]),e.exports=i},8791:(e,t,r)=>{var n=r(9859),i=r(5968);e.exports=function(e,t){return i(n[e].prototype[t])}},3837:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},373:(e,t,r)=>{var n=r(4229),i=r(5358);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",i(1,7)),7!==e.stack)}))},3103:(e,t,r)=>{var n=r(9859),i=r(7933).f,o=r(5762),a=r(7487),s=r(2079),u=r(7081),l=r(6541);e.exports=function(e,t){var r,c,p,d,f,y=e.target,h=e.global,m=e.stat;if(r=h?n:m?n[y]||s(y,{}):(n[y]||{}).prototype)for(c in t){if(d=t[c],p=e.noTargetGet?(f=i(r,c))&&f.value:r[c],!l(h?c:y+(m?".":"#")+c,e.forced)&&void 0!==p){if(typeof d==typeof p)continue;u(d,p)}(e.sham||p&&p.sham)&&o(d,"sham",!0),a(r,c,d,e)}}},4229:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},8476:(e,t,r)=>{var n=r(4229);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},3171:e=>{var t=Function.prototype,r=t.apply,n=t.bind,i=t.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?i.bind(r):function(){return i.apply(r,arguments)})},7636:(e,t,r)=>{var n=r(5968),i=r(7111),o=n(n.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?o(e,t):function(){return e.apply(t,arguments)}}},266:e=>{var t=Function.prototype.call;e.exports=t.bind?t.bind(t):function(){return t.apply(t,arguments)}},1805:(e,t,r)=>{var n=r(7400),i=r(8270),o=Function.prototype,a=n&&Object.getOwnPropertyDescriptor,s=i(o,"name"),u=s&&"something"===function(){}.name,l=s&&(!n||n&&a(o,"name").configurable);e.exports={EXISTS:s,PROPER:u,CONFIGURABLE:l}},5968:e=>{var t=Function.prototype,r=t.bind,n=t.call,i=r&&r.bind(n);e.exports=r?function(e){return e&&i(n,e)}:function(e){return e&&function(){return n.apply(e,arguments)}}},1333:(e,t,r)=>{var n=r(9859),i=r(6733),o=function(e){return i(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?o(n[e]):n[e]&&n[e][t]}},8830:(e,t,r)=>{var n=r(1589),i=r(5300),o=r(5495),a=r(95)("iterator");e.exports=function(e){if(null!=e)return i(e,a)||i(e,"@@iterator")||o[n(e)]}},8403:(e,t,r)=>{var n=r(9859),i=r(266),o=r(7111),a=r(1176),s=r(9821),u=r(8830),l=n.TypeError;e.exports=function(e,t){var r=arguments.length<2?u(e):t;if(o(r))return a(i(r,e));throw l(s(e)+" is not iterable")}},5300:(e,t,r)=>{var n=r(7111);e.exports=function(e,t){var r=e[t];return null==r?void 0:n(r)}},9859:(e,t,r)=>{var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},8270:(e,t,r)=>{var n=r(5968),i=r(2991),o=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},5977:e=>{e.exports={}},4665:(e,t,r)=>{var n=r(9859);e.exports=function(e,t){var r=n.console;r&&r.error&&(1==arguments.length?r.error(e):r.error(e,t))}},3777:(e,t,r)=>{var n=r(1333);e.exports=n("document","documentElement")},4394:(e,t,r)=>{var n=r(7400),i=r(4229),o=r(2635);e.exports=!n&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},9337:(e,t,r)=>{var n=r(9859),i=r(5968),o=r(4229),a=r(7079),s=n.Object,u=i("".split);e.exports=o((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?u(e,""):s(e)}:s},835:(e,t,r)=>{var n=r(6733),i=r(5052),o=r(6540);e.exports=function(e,t,r){var a,s;return o&&n(a=t.constructor)&&a!==r&&i(s=a.prototype)&&s!==r.prototype&&o(e,s),e}},8511:(e,t,r)=>{var n=r(5968),i=r(6733),o=r(5353),a=n(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return a(e)}),e.exports=o.inspectSource},9679:(e,t,r)=>{var n=r(5052),i=r(5762);e.exports=function(e,t){n(t)&&"cause"in t&&i(e,"cause",t.cause)}},5926:(e,t,r)=>{var n=r(3103),i=r(5968),o=r(5977),a=r(5052),s=r(8270),u=r(1787).f,l=r(8151),c=r(166),p=r(1441),d=r(8476),f=!1,y=p("meta"),h=0,m=Object.isExtensible||function(){return!0},g=function(e){u(e,y,{value:{objectID:"O"+h++,weakData:{}}})},v=e.exports={enable:function(){v.enable=function(){},f=!0;var e=l.f,t=i([].splice),r={};r[y]=1,e(r).length&&(l.f=function(r){for(var n=e(r),i=0,o=n.length;i{var n,i,o,a=r(8694),s=r(9859),u=r(5968),l=r(5052),c=r(5762),p=r(8270),d=r(5353),f=r(4399),y=r(5977),h="Object already initialized",m=s.TypeError,g=s.WeakMap;if(a||d.state){var v=d.state||(d.state=new g),b=u(v.get),I=u(v.has),S=u(v.set);n=function(e,t){if(I(v,e))throw new m(h);return t.facade=e,S(v,e,t),t},i=function(e){return b(v,e)||{}},o=function(e){return I(v,e)}}else{var _=f("state");y[_]=!0,n=function(e,t){if(p(e,_))throw new m(h);return t.facade=e,c(e,_,t),t},i=function(e){return p(e,_)?e[_]:{}},o=function(e){return p(e,_)}}e.exports={set:n,get:i,has:o,enforce:function(e){return o(e)?i(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!l(t)||(r=i(t)).type!==e)throw m("Incompatible receiver, "+e+" required");return r}}}},1943:(e,t,r)=>{var n=r(95),i=r(5495),o=n("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||a[o]===e)}},3718:(e,t,r)=>{var n=r(7079);e.exports=Array.isArray||function(e){return"Array"==n(e)}},6733:e=>{e.exports=function(e){return"function"==typeof e}},2359:(e,t,r)=>{var n=r(5968),i=r(4229),o=r(6733),a=r(1589),s=r(1333),u=r(8511),l=function(){},c=[],p=s("Reflect","construct"),d=/^\s*(?:class|function)\b/,f=n(d.exec),y=!d.exec(l),h=function(e){if(!o(e))return!1;try{return p(l,c,e),!0}catch(e){return!1}};e.exports=!p||i((function(){var e;return h(h.call)||!h(Object)||!h((function(){e=!0}))||e}))?function(e){if(!o(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return y||!!f(d,u(e))}:h},6541:(e,t,r)=>{var n=r(4229),i=r(6733),o=/#|\.prototype\./,a=function(e,t){var r=u[s(e)];return r==c||r!=l&&(i(t)?n(t):!!t)},s=a.normalize=function(e){return String(e).replace(o,".").toLowerCase()},u=a.data={},l=a.NATIVE="N",c=a.POLYFILL="P";e.exports=a},2292:(e,t,r)=>{var n=r(5052),i=Math.floor;e.exports=Number.isInteger||function(e){return!n(e)&&isFinite(e)&&i(e)===e}},5052:(e,t,r)=>{var n=r(6733);e.exports=function(e){return"object"==typeof e?null!==e:n(e)}},4231:e=>{e.exports=!1},9395:(e,t,r)=>{var n=r(9859),i=r(1333),o=r(6733),a=r(1321),s=r(6969),u=n.Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=i("Symbol");return o(t)&&a(t.prototype,u(e))}},9003:(e,t,r)=>{var n=r(9859),i=r(7636),o=r(266),a=r(1176),s=r(9821),u=r(1943),l=r(9646),c=r(1321),p=r(8403),d=r(8830),f=r(7281),y=n.TypeError,h=function(e,t){this.stopped=e,this.result=t},m=h.prototype;e.exports=function(e,t,r){var n,g,v,b,I,S,_,T=r&&r.that,P=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_ITERATOR),E=!(!r||!r.INTERRUPTED),w=i(t,T),O=function(e){return n&&f(n,"normal",e),new h(!0,e)},D=function(e){return P?(a(e),E?w(e[0],e[1],O):w(e[0],e[1])):E?w(e,O):w(e)};if(A)n=e;else{if(!(g=d(e)))throw y(s(e)+" is not iterable");if(u(g)){for(v=0,b=l(e);b>v;v++)if((I=D(e[v]))&&c(m,I))return I;return new h(!1)}n=p(e,g)}for(S=n.next;!(_=o(S,n)).done;){try{I=D(_.value)}catch(e){f(n,"throw",e)}if("object"==typeof I&&I&&c(m,I))return I}return new h(!1)}},7281:(e,t,r)=>{var n=r(266),i=r(1176),o=r(5300);e.exports=function(e,t,r){var a,s;i(e);try{if(!(a=o(e,"return"))){if("throw"===t)throw r;return r}a=n(a,e)}catch(e){s=!0,a=e}if("throw"===t)throw r;if(s)throw a;return i(a),r}},693:(e,t,r)=>{"use strict";var n,i,o,a=r(4229),s=r(6733),u=r(7263),l=r(7567),c=r(7487),p=r(95),d=r(4231),f=p("iterator"),y=!1;[].keys&&("next"in(o=[].keys())?(i=l(l(o)))!==Object.prototype&&(n=i):y=!0),null==n||a((function(){var e={};return n[f].call(e)!==e}))?n={}:d&&(n=u(n)),s(n[f])||c(n,f,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:y}},5495:e=>{e.exports={}},9646:(e,t,r)=>{var n=r(4237);e.exports=function(e){return n(e.length)}},4794:(e,t,r)=>{var n,i,o,a,s,u,l,c,p=r(9859),d=r(7636),f=r(7933).f,y=r(5795).set,h=r(2023),m=r(8983),g=r(263),v=r(8801),b=p.MutationObserver||p.WebKitMutationObserver,I=p.document,S=p.process,_=p.Promise,T=f(p,"queueMicrotask"),P=T&&T.value;P||(n=function(){var e,t;for(v&&(e=S.domain)&&e.exit();i;){t=i.fn,i=i.next;try{t()}catch(e){throw i?a():o=void 0,e}}o=void 0,e&&e.enter()},h||v||g||!b||!I?!m&&_&&_.resolve?((l=_.resolve(void 0)).constructor=_,c=d(l.then,l),a=function(){c(n)}):v?a=function(){S.nextTick(n)}:(y=d(y,p),a=function(){y(n)}):(s=!0,u=I.createTextNode(""),new b(n).observe(u,{characterData:!0}),a=function(){u.data=s=!s})),e.exports=P||function(e){var t={fn:e,next:void 0};o&&(o.next=t),i||(i=t,a()),o=t}},4226:(e,t,r)=>{var n=r(9859);e.exports=n.Promise},3839:(e,t,r)=>{var n=r(6358),i=r(4229);e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},8694:(e,t,r)=>{var n=r(9859),i=r(6733),o=r(8511),a=n.WeakMap;e.exports=i(a)&&/native code/.test(o(a))},6485:(e,t,r)=>{"use strict";var n=r(7111),i=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new i(e)}},635:(e,t,r)=>{var n=r(3326);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},5496:(e,t,r)=>{var n=r(9859),i=r(4229),o=r(5968),a=r(3326),s=r(1017).trim,u=r(1647),l=o("".charAt),c=n.parseFloat,p=n.Symbol,d=p&&p.iterator,f=1/c(u+"-0")!=-1/0||d&&!i((function(){c(Object(d))}));e.exports=f?function(e){var t=s(a(e)),r=c(t);return 0===r&&"-"==l(t,0)?-0:r}:c},6596:(e,t,r)=>{var n=r(9859),i=r(4229),o=r(5968),a=r(3326),s=r(1017).trim,u=r(1647),l=n.parseInt,c=n.Symbol,p=c&&c.iterator,d=/^[+-]?0x/i,f=o(d.exec),y=8!==l(u+"08")||22!==l(u+"0x16")||p&&!i((function(){l(Object(p))}));e.exports=y?function(e,t){var r=s(a(e));return l(r,t>>>0||(f(d,r)?16:10))}:l},7888:(e,t,r)=>{"use strict";var n=r(7400),i=r(5968),o=r(266),a=r(4229),s=r(5632),u=r(894),l=r(9195),c=r(2991),p=r(9337),d=Object.assign,f=Object.defineProperty,y=i([].concat);e.exports=!d||a((function(){if(n&&1!==d({b:1},d(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach((function(e){t[e]=e})),7!=d({},e)[r]||s(d({},t)).join("")!=i}))?function(e,t){for(var r=c(e),i=arguments.length,a=1,d=u.f,f=l.f;i>a;)for(var h,m=p(arguments[a++]),g=d?y(s(m),d(m)):s(m),v=g.length,b=0;v>b;)h=g[b++],n&&!o(f,m,h)||(r[h]=m[h]);return r}:d},7263:(e,t,r)=>{var n,i=r(1176),o=r(219),a=r(3837),s=r(5977),u=r(3777),l=r(2635),c=r(4399)("IE_PROTO"),p=function(){},d=function(e){return"