breeze-plugin-webtoon 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1,2 @@
|
|
|
1
|
-
(()=>{"use strict";var e={};e.d=(t,r,a)=>{var n=(r,a)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,[a]:r[n]})};n(r,"get"),n(a,"value")},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{default:()=>Q});let r="7efa2a7c-da0f-4db1-9167-98045ae37fdb",a="https://webtoons-static.pstatic.net/image/favicon/favicon.ico",n="https://m.webtoons.com/",i="https://www.webtoons.com",l="https://m.webtoons.com";function o(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:e}function s(e){return String(null!=e?e:"").trim()}function c(e){return String(null!=e?e:"").replace(/[\s\u00a0\u3000]+$/u,"")}function u(e,t={},r={}){return{name:c(e),onTap:t,extern:r}}function d(e={}){var t,r,n,i,l;return{id:String(null!=(t=e.id)?t:""),url:String(null!=(r=e.url)?r:"").trim()||a,name:String(null!=(n=e.name)?n:""),path:String(null!=(i=e.path)?i:"").trim()||"placeholder/image-404.png",extern:null!=(l=e.extern)?l:{}}}let g=["en","zh-hant","zh-hans","th","id","es","fr","de"],p={"plugin.describe":"WEBTOON official web source","settings.section.content":"Content","settings.lang.label":"Default search language","settings.lang.followSystem":"Follow system (current: {lang})","settings.r18.label":"Show R18 / mature content","advancedSearch.title":"Advanced search","advancedSearch.lang":"Language","meta.author":"Author","meta.categories":"Genre","titleMeta.type":"Type: {type}","titleMeta.chapters":"Chapters: {count}","titleMeta.lang":"Language: {lang}","type.original":"Original","type.canvas":"Canvas","error.keywordRequired":"Please enter a search keyword","error.comicIdRequired":"comicId is required","error.noEpisodes":"No episodes available","error.noViewerLink":"Episode {id} is missing viewerLink","error.noImageList":"imageList not found on viewer page","error.emptyImageList":"imageList is empty","error.detailUrlEmpty":"Detail page URL is empty","error.cannotResolveDetail":"Cannot resolve detail URL (titleNo={titleNo}). Open again from search.","error.downloadFailed":"Download failed: {status} {statusText}","error.http":"HTTP {status}: {url}","error.r18Blocked":"This title is mature content. Enable R18 in plugin settings.","error.urlRequired":"url is required"},h={...p,"plugin.describe":"แหล่ง WEBTOON เว็บอย่างเป็นทางการ","settings.section.content":"เนื้อหา","settings.lang.label":"ภาษาค้นหาเริ่มต้น","settings.lang.followSystem":"ตามระบบ (ปัจจุบัน: {lang})","settings.r18.label":"แสดงเนื้อหา R18 / 18+","advancedSearch.title":"ค้นหาขั้นสูง","advancedSearch.lang":"ภาษา","meta.author":"ผู้แต่ง","meta.categories":"ประเภท","titleMeta.type":"ประเภท: {type}","titleMeta.chapters":"ตอน: {count}","titleMeta.lang":"ภาษา: {lang}","error.keywordRequired":"กรุณาใส่คำค้นหา","error.comicIdRequired":"ต้องระบุ comicId","error.noEpisodes":"ยังไม่มีตอน","error.r18Blocked":"เรื่องนี้เป็นเนื้อหาสำหรับผู้ใหญ่ เปิด R18 ในการตั้งค่าปลั๊กอิน"},m={...p,"plugin.describe":"Sumber web resmi WEBTOON","settings.section.content":"Konten","settings.lang.label":"Bahasa pencarian default","settings.lang.followSystem":"Ikuti sistem (saat ini: {lang})","settings.r18.label":"Tampilkan konten R18 / dewasa","advancedSearch.title":"Pencarian lanjutan","advancedSearch.lang":"Bahasa","meta.author":"Penulis","meta.categories":"Genre","titleMeta.type":"Tipe: {type}","titleMeta.chapters":"Episode: {count}","titleMeta.lang":"Bahasa: {lang}","error.keywordRequired":"Masukkan kata kunci pencarian","error.comicIdRequired":"comicId wajib diisi","error.noEpisodes":"Belum ada episode","error.r18Blocked":"Judul ini konten dewasa. Aktifkan R18 di pengaturan plugin."},f={...p,"plugin.describe":"Fuente web oficial de WEBTOON","settings.section.content":"Contenido","settings.lang.label":"Idioma de b\xfasqueda predeterminado","settings.lang.followSystem":"Seguir el sistema (actual: {lang})","settings.r18.label":"Mostrar contenido R18 / adulto","advancedSearch.title":"B\xfasqueda avanzada","advancedSearch.lang":"Idioma","meta.author":"Autor","meta.categories":"G\xe9nero","titleMeta.type":"Tipo: {type}","titleMeta.chapters":"Cap\xedtulos: {count}","titleMeta.lang":"Idioma: {lang}","error.keywordRequired":"Introduce una palabra clave","error.comicIdRequired":"comicId es obligatorio","error.noEpisodes":"No hay episodios","error.r18Blocked":"Este t\xedtulo es contenido adulto. Activa R18 en la configuraci\xf3n del plugin."},w={...p,"plugin.describe":"Source web officielle WEBTOON","settings.section.content":"Contenu","settings.lang.label":"Langue de recherche par d\xe9faut","settings.lang.followSystem":"Suivre le syst\xe8me (actuel : {lang})","settings.r18.label":"Afficher le contenu R18 / mature","advancedSearch.title":"Recherche avanc\xe9e","advancedSearch.lang":"Langue","meta.author":"Auteur","meta.categories":"Genre","titleMeta.type":"Type : {type}","titleMeta.chapters":"Chapitres : {count}","titleMeta.lang":"Langue : {lang}","error.keywordRequired":"Veuillez saisir un mot-cl\xe9","error.comicIdRequired":"comicId est requis","error.noEpisodes":"Aucun \xe9pisode disponible","error.r18Blocked":"Ce titre est r\xe9serv\xe9 aux adultes. Activez R18 dans les param\xe8tres du plugin."},y={...p,"plugin.describe":"Offizieller WEBTOON-Web-Quell","settings.section.content":"Inhalt","settings.lang.label":"Standard-Suchsprache","settings.lang.followSystem":"System folgen (aktuell: {lang})","settings.r18.label":"R18- / Mature-Inhalte anzeigen","advancedSearch.title":"Erweiterte Suche","advancedSearch.lang":"Sprache","meta.author":"Autor","meta.categories":"Genre","titleMeta.type":"Typ: {type}","titleMeta.chapters":"Kapitel: {count}","titleMeta.lang":"Sprache: {lang}","error.keywordRequired":"Bitte Suchbegriff eingeben","error.comicIdRequired":"comicId ist erforderlich","error.noEpisodes":"Keine Episoden verf\xfcgbar","error.r18Blocked":"Dieser Titel ist Mature-Inhalt. R18 in den Plugin-Einstellungen aktivieren."},v={en:p,"zh-hant":{"plugin.describe":"WEBTOON 官方 Web 端源","settings.section.content":"內容","settings.lang.label":"預設搜尋語言","settings.lang.followSystem":"跟隨系統(目前 {lang})","settings.r18.label":"顯示 R18 / 成人內容","advancedSearch.title":"進階搜尋","advancedSearch.lang":"語言","meta.author":"作者","meta.categories":"分類","titleMeta.type":"類型:{type}","titleMeta.chapters":"章節:{count}","titleMeta.lang":"語言:{lang}","type.original":"Original","type.canvas":"Canvas","error.keywordRequired":"請輸入搜尋關鍵字","error.comicIdRequired":"comicId 不能為空","error.noEpisodes":"該作品暫無章節","error.noViewerLink":"章節 {id} 缺少 viewerLink","error.noImageList":"未在 viewer 頁面找到 imageList","error.emptyImageList":"imageList 為空","error.detailUrlEmpty":"詳情頁 URL 為空","error.cannotResolveDetail":"無法解析詳情頁 URL (titleNo={titleNo}),請從搜尋結果重新開啟","error.downloadFailed":"下載失敗:{status} {statusText}","error.http":"HTTP {status}: {url}","error.r18Blocked":"此作品為成人內容,請在外掛設定中開啟 R18","error.urlRequired":"url 不能為空"},"zh-hans":{"plugin.describe":"WEBTOON 官方 Web 端源","settings.section.content":"内容","settings.lang.label":"默认搜索语言","settings.lang.followSystem":"跟随系统(当前 {lang})","settings.r18.label":"显示 R18 / 成人内容","advancedSearch.title":"高级搜索","advancedSearch.lang":"语言","meta.author":"作者","meta.categories":"分类","titleMeta.type":"类型:{type}","titleMeta.chapters":"章节:{count}","titleMeta.lang":"语言:{lang}","type.original":"Original","type.canvas":"Canvas","error.keywordRequired":"请输入搜索关键词","error.comicIdRequired":"comicId 不能为空","error.noEpisodes":"该作品暂无章节","error.noViewerLink":"章节 {id} 缺少 viewerLink","error.noImageList":"未在 viewer 页面找到 imageList","error.emptyImageList":"imageList 为空","error.detailUrlEmpty":"详情页 URL 为空","error.cannotResolveDetail":"无法解析详情页 URL (titleNo={titleNo}),请从搜索结果重新打开","error.downloadFailed":"下载失败:{status} {statusText}","error.http":"HTTP {status}: {url}","error.r18Blocked":"此作品为成人内容,请在插件设置中开启 R18","error.urlRequired":"url 不能为空"},th:h,id:m,es:f,fr:w,de:y};async function b(){try{let e=globalThis.bridge;if("function"!=typeof(null==e?void 0:e.call))return"";let t=await Promise.resolve(e.call("dart.getLocaleInfo")),r="string"==typeof t?t:JSON.stringify(null!=t?t:"");if(!r)return"";let a=JSON.parse(r);return s(a.locale)||s(a.systemLocale)||s(a.language)||""}catch{return""}}async function S(){let e=s(await b()).toLowerCase().replace(/_/g,"-");if(!e)return"en";if(g.includes(e))return e;if(e.startsWith("zh"))return e.includes("hant")||e.includes("tw")||e.includes("hk")||e.includes("mo")?"zh-hant":"zh-hans";let t=e.split("-")[0]||"";return g.includes(t)?t:"en"}function k(e,t,r){var a,n;let i=null!=(a=null!=(n=(v[e]||p)[t])?n:p[t])?a:t;if(r)for(let[e,t]of Object.entries(r))i=i.replace(RegExp(`\\{${e}\\}`,"g"),String(t));return i}async function R(){return{name:"WEBTOON",uuid:r,iconUrl:"https://webtoons-static.pstatic.net/image/favicon/favicon.ico",creator:{name:"",describe:""},describe:k(await S(),"plugin.describe"),version:"0.0.1",home:"https://www.webtoons.com",updateUrl:"",npmName:"breeze-plugin-webtoon",function:[]}}let I=[{label:"English",value:"en"},{label:"中文 (繁體)",value:"zh-hant"},{label:"ภาษาไทย",value:"th"},{label:"Indonesia",value:"id"},{label:"Espa\xf1ol",value:"es"},{label:"Fran\xe7ais",value:"fr"},{label:"Deutsch",value:"de"}],L=new Set(I.map(e=>e.value)),N="auto",x="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36";function E(e){return`ageGatePass=${e?"true":"false"}; needGDPR=false`}function M(e=!1){return{"User-Agent":x,Referer:n,"Accept-Language":"en-US,en;q=0.9",Cookie:E(e)}}function O(e=!1){return{"User-Agent":"Mozilla/5.0 (Linux; Android 10; Mobile) AppleWebKit/537.36",Referer:n,"Accept-Language":"en-US,en;q=0.9",Cookie:E(e)}}async function C(e,t,r=2e4,a="en"){let n=await fetch(e,{method:"GET",headers:t,signal:AbortSignal.timeout(r)});if(!n.ok)throw Error(k(a,"error.http",{status:n.status,url:e}));return n.text()}async function T(e,t,r=2e4,a="en"){return JSON.parse(await C(e,t,r,a))}async function q(){try{let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))("content.r18","");if(!e)return!1;let t=JSON.parse(e);return!0===t.value||"true"===t.value}catch{return!1}}function B(e){return L.has(e)}async function $(){let e=await b();if(!e)return"en";let t=s(e).toLowerCase().replace(/_/g,"-");if(!t)return"en";if(B(t))return t;if(t.startsWith("zh"))return t.includes("hant")||t.includes("tw")||t.includes("hk")||t.includes("mo"),"zh-hant";let r=t.split("-")[0]||"";return B(r)?r:"en"}async function A(){try{let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))("content.lang","");if(!e)return N;let t=JSON.parse(e),r=s(t.value);if(!r||r===N)return N;if(B(r))return r;return N}catch{return N}}async function _(){let e=await A();return e!==N&&B(e)?e:$()}function U(e){let t=e.href||"";return[e.lang,e.type,e.titleNo,t].map(e=>encodeURIComponent(e)).join("|")}function W(e,t="en"){let r=s(e);if(!r)throw Error("comicId 不能为空");if(r.includes("|")){let a=r.split("|").map(e=>{try{return decodeURIComponent(e)}catch{return e}}),n=a[0]||t,i="canvas"===a[1]?"canvas":"webtoon",l=a[2]||"",o=a[3]||"";if(!l)throw Error(`无效 comicId: ${e}`);return{lang:n,type:i,titleNo:l,href:o}}return{lang:t,type:"webtoon",titleNo:r,href:""}}function z(e){return e.includes("/challenge/")?"canvas":"webtoon"}function P(e){let t=s(e);return t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/")?`${i}${t}`:t:""}function j(e){let t=s(e);return t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/")?`${l}${t}`:`${l}/${t}`:""}function D(e,t,a,n){let i=a.map(e=>c(e).trimStart()).map(e=>e.trim()).filter(Boolean);return i.length?{type:e,name:c(t),value:i.map(e=>u(e,{type:"openSearch",payload:{source:r,keyword:e,extern:n?{lang:n}:{}}}))}:null}async function G(e,t,n=1,l={}){var o;let u=!!l.allowR18,g=null!=(o=l.uiLang)?o:"en",p=new URL(`${i}/${t}/search`);p.searchParams.set("keyword",e),p.searchParams.set("page",String(n));let h=await C(p.toString(),M(u),2e4,g),m=BreezeHtml.load(h),f=[];return m(".webtoon_list li a").each((e,n)=>{let i=m(n),l=c(i.find(".title").text()).trim(),o=c(i.find(".author").text()).trim(),p=P(s(i.attr("href"))),h=s(i.find("img").attr("src")),w=s(i.attr("data-title-no"));if(!l||!w)return;let y=function(e){var t;if(e.find(".ico_age19, .age19, .ico_mature, .mature").length>0)return!0;let r=s(e.attr("class")).toLowerCase();if(r.includes("age19")||r.includes("mature"))return!0;let a=s(null!=(t=e.html())?t:"").toLowerCase();return!!(a.includes("ico_age19")||a.includes("age19")||a.includes("grade19")||a.includes("mature"))}(i);if(y&&!u)return;let v=z(p),b=U({titleNo:w,type:v,lang:t,href:p}),S=`comic/${w}/cover.jpg`;f.push({source:r,id:b,title:l,subtitle:o,finished:!1,likesCount:0,viewsCount:0,updatedAt:"",cover:d({id:w,url:h||a,name:"cover.jpg",path:S,extern:{}}),metadata:[D("author",k(g,"meta.author"),o?[o]:[],t)].filter(e=>null!=e),raw:{title:l,author:o,href:p,img:h,titleNo:w,type:v,lang:t,mature:y},extern:{href:p,type:v,lang:t,titleNo:w,mature:y}})}),{results:f,hasNext:m("a.pagination[aria-current=true] + a").length>0}}async function K(e,t={}){var r;let a,n=!!t.allowR18,i=null!=(r=t.uiLang)?r:"en",l=P(e);if(!l)throw Error(k(i,"error.detailUrlEmpty"));let o=await C(l,M(n),2e4,i),u=(a=o.toLowerCase()).includes("ico_age19")||a.includes("agegate")||a.includes("age_gate")||a.includes("mature")||/grade\s*[=:]\s*["']?19/.test(a);if(u&&!n)throw Error(k(i,"error.r18Blocked"));let d=BreezeHtml.load(o),g=c(d("h1.subj, h3.subj").first().text()).trim(),p=c(d(".detail_header .info .author_area").first().text().replace(/author info/gi,"")).replace(/\s+/g," ").trim(),h=[];d(".detail_header .info .genre").each((e,t)=>{let r=c(d(t).text()).trim();r&&h.push(r)});let m=c(d("#_asideDetail p.summary").text()).trim()||c(d(".detail_header p.summary").text()).trim(),f=s(d(".detail_header .thmb img").attr("src"))||s(d('head meta[property="og:image"]').attr("content")),w="";try{w=new URL(l).searchParams.get("title_no")||""}catch{w=""}return{title:g,author:p,genre:h.join(", "),summary:m,thumbnail:f,titleNo:w,url:l,mature:u}}async function J(e,t="webtoon",r="en",a={}){var n,i;let o=!!a.allowR18,s=null!=(n=a.uiLang)?n:"en",c=new URL(`${l}/api/v1/${t}/${e}/episodes`);c.searchParams.set("pageSize","99999"),"canvas"===t&&c.searchParams.set("readingLanguageCode",r);let u=await T(c.toString(),O(o),2e4,s),d=null==u||null==(i=u.result)?void 0:i.episodeList;return Array.isArray(d)?d:[]}async function F(e,t={}){var r;let a=!!t.allowR18,n=null!=(r=t.uiLang)?r:"en",i=j(e);if(!i)throw Error(k(n,"error.noViewerLink",{id:"?"}));let l=(await C(i,O(a),2e4,n)).match(/var\s+imageList\s*=\s*(\[[\s\S]*?\]);/);if(!l)throw Error(k(n,"error.noImageList"));let o=JSON.parse(l[1].replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g,'$1"$2":'));if(!Array.isArray(o)||0===o.length)throw Error(k(n,"error.emptyImageList"));return o.sort((e,t)=>{var r,a;return Number(null!=(r=e.sortOrder)?r:0)-Number(null!=(a=t.sortOrder)?a:0)}),{viewerUrl:i,imageList:o}}async function V(e,t={}){var r;let a=null!=(r=t.uiLang)?r:"en";if(e.href)return P(e.href);let n=await J(e.titleNo,e.type,e.lang,t);if(n.length>0){let e=function(e){let t=j(e);if(!t)return"";try{let e=new URL(t),r=e.pathname.split("/").filter(Boolean);if(r.length>=3){let t=e.searchParams.get("title_no")||"";return`${i}/${r[0]}/${r[1]}/${r[2]}/list?title_no=${t}`}}catch{}return""}(n[0].viewerLink);if(e)return e}throw Error(k(a,"error.cannotResolveDetail",{titleNo:e.titleNo}))}async function H(e={}){let t=await S(),n=await q(),i=s(e.comicId);if(!i)throw Error(k(t,"error.comicIdRequired"));let l=W(i,await _()),g=o(e.extern),p={allowR18:n,uiLang:t};s(g.href)&&(l.href=s(g.href)),"canvas"===s(g.type)&&(l.type="canvas"),s(g.lang)&&(l.lang=s(g.lang));let h=await V(l,p);l.href=h,l.type=z(h);let[m,f]=await Promise.all([K(h,p),J(l.titleNo,l.type,l.lang,p)]);m.titleNo&&(l.titleNo=m.titleNo);let w=U(l),y=f.map((e,t)=>{var r,a;let n=String(e.episodeNo),i=s(e.viewerLink);return{id:n,requestId:n,logicalKey:n,storageChapterId:n,name:s(e.episodeTitle)||`Ep. ${e.episodeNo}`,order:t+1,extern:{comicId:w,episodeNo:e.episodeNo,viewerLink:i,thumbnail:null!=(r=e.thumbnail)?r:"",exposureDateMillis:null!=(a=e.exposureDateMillis)?a:0}}}),v=m.genre?m.genre.split(",").map(e=>e.trim()).filter(Boolean):[],b=k(t,"canvas"===l.type?"type.canvas":"type.original");return{source:r,comicId:w,extern:{...g,href:h,type:l.type,lang:l.lang,titleNo:l.titleNo,mature:m.mature},scheme:{version:"1.0.0",type:"comicDetail",source:r},data:{normal:{comicInfo:{id:w,title:m.title||`WEBTOON #${l.titleNo}`,titleMeta:[k(t,"titleMeta.type",{type:b}),k(t,"titleMeta.chapters",{count:y.length}),k(t,"titleMeta.lang",{lang:l.lang})].map(e=>c(e)).filter(e=>e.length>0).map(e=>u(e)),creator:{id:"",name:"",avatar:{id:"",url:"",name:"",path:"",extern:{}},onTap:{},extern:{}},description:m.summary||"",cover:d({id:l.titleNo,url:m.thumbnail||a,name:"cover.jpg",path:`comic/${l.titleNo}/cover.jpg`}),metadata:[D("author",k(t,"meta.author"),m.author?[m.author]:[],l.lang),D("categories",k(t,"meta.categories"),v,l.lang)].filter(e=>null!=e),extern:{href:h,type:l.type,lang:l.lang,titleNo:l.titleNo,mature:m.mature}},eps:y,recommend:[],totalViews:0,totalLikes:0,totalComments:0,isFavourite:!1,isLiked:!1,allowComments:!1,allowLike:!1,allowCollected:!1,allowDownload:!0,extern:{href:h,type:l.type,lang:l.lang,titleNo:l.titleNo,mature:m.mature}},raw:{detail:m,episodes:f,parts:l}}}}async function Z(e){var t,r,a,n;let i=await S(),l=await q(),c=s(e.comicId);if(!c)throw Error(k(i,"error.comicIdRequired"));let u=await H({comicId:c,extern:e.extern}),d=u.data.normal.eps;if(!d.length)throw Error(k(i,"error.noEpisodes"));let g=s(e.chapterId),p=null!=(t=d.find(e=>e.requestId===g||e.id===g))?t:d[0],h=o(p.extern),m=s(h.viewerLink);if(!m){let e=W(c,await _()),t=(await J(e.titleNo,e.type,e.lang,{allowR18:l,uiLang:i})).find(e=>String(e.episodeNo)===p.id);m=s(null==t?void 0:t.viewerLink)}if(!m)throw Error(k(i,"error.noViewerLink",{id:p.id}));let{imageList:f}=await F(m,{allowR18:l,uiLang:i}),w=(a=u.comicId,n=p.storageChapterId,f.map((e,t)=>{var r,i,l;let o=s(e.url),c=function(e,t){try{let t=new URL(e).pathname.split("/").filter(Boolean).pop()||"";if(t)return t}catch{}return`${String(t+1).padStart(4,"0")}.jpg`}(o,t);return{id:`${n}-p-${t}`,name:c,path:`comic/${a}/${n}/${c}`,url:o,extern:{width:null!=(r=e.width)?r:0,height:null!=(i=e.height)?i:0,sortOrder:null!=(l=e.sortOrder)?l:t}}}));return{comicId:u.comicId,title:u.data.normal.comicInfo.title,chapter:{...p,pages:w,extern:{...h,viewerLink:m}},chapters:d,extern:null!=(r=e.extern)?r:null}}let Q={getInfo:async function(){return await R()},searchComic:async function(e={}){var t,a;let n=await S(),i=await q(),l=o(e.extern),c=Math.max(1,Number(null!=(t=e.page)?t:1)||1),u=s(null!=(a=e.keyword)?a:l.keyword);if(!u)throw Error(k(n,"error.keywordRequired"));let d=await _(),g=s(l.lang),p=(g&&B(g)?g:"")||d||"en",{results:h,hasNext:m}=await G(u,p,c,{allowR18:i,uiLang:n}),f=function(e=1,t=1,r=0,a=!0){return{page:e,pages:Math.max(1,t),total:r,hasReachedMax:a}}(c,m?c+1:c,h.length,!m);return{source:r,extern:{...l,keyword:u,lang:p,page:c},scheme:{version:"1.0.0",type:"searchResult",source:r,list:"comicGrid"},data:{paging:f,items:h},paging:f,items:h}},getComicDetail:H,getChapter:async function(e={}){let t=await Z(e);return{source:r,comicId:t.comicId,chapterId:t.chapter.id,extern:t.extern,scheme:{version:"1.0.0",type:"chapterContent",source:r},data:{comic:{id:t.comicId,source:r,title:t.title,extern:{}},chapter:t.chapter,chapters:t.chapters.map(e=>({id:e.id,requestId:e.requestId,logicalKey:e.logicalKey,storageChapterId:e.storageChapterId,name:e.name,order:e.order,extern:e.extern}))}}},getReadSnapshot:async function(e={}){let t=await Z(e);return{source:r,extern:t.extern,data:{comic:{id:t.comicId,source:r,title:t.title,extern:{}},chapter:t.chapter,chapters:t.chapters.map(e=>({id:e.id,name:e.name,order:e.order,extern:e.extern}))}}},fetchImageBytes:async function(e={}){var t;let r,a=await S(),i=await q(),l=s(e.url);if(!l)throw Error(k(a,"error.urlRequired"));let o=Number(null!=(t=e.timeoutMs)?t:3e4)||3e4,c=s(e.taskGroupKey);if(c&&await (r=c,bridge.call("runtime.is_task_group_cancelled",r)))return new Uint8Array(0);let u=await fetch(l,{method:"GET",headers:{"User-Agent":x,Referer:n,Cookie:E(i),"x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(o)});if(!u.ok)throw Error(k(a,"error.downloadFailed",{status:u.status,statusText:u.statusText}));return new Uint8Array(await u.arrayBuffer())},getSettingsBundle:async function(){let e=await S(),t=await A(),a=await _(),n=await q();return{source:r,scheme:{version:"1.0.0",type:"settings",sections:[{title:k(e,"settings.section.content"),fields:[{key:"content.lang",kind:"choice",label:k(e,"settings.lang.label"),options:[{label:k(e,"settings.lang.followSystem",{lang:a}),value:N},...I.map(e=>({label:e.label,value:e.value}))],fnPath:"onLangChanged",persist:!0},{key:"content.r18",kind:"switch",label:k(e,"settings.r18.label"),fnPath:"onR18Changed",persist:!0}]}]},data:{canShowUserInfo:!1,values:{"content.lang":t,"content.r18":n}}}},getCapabilitiesBundle:async function(){return{source:r,scheme:{version:"1.0.0",type:"capabilities",actions:[]},data:{}}},getAdvancedSearchScheme:async function(){let e=await S(),t=await _();return{source:r,scheme:{version:"1.0.0",type:"advancedSearch",title:k(e,"advancedSearch.title"),fields:[{key:"lang",kind:"choice",label:k(e,"advancedSearch.lang"),options:I.map(e=>({label:e.label,value:e.value}))}]},data:{values:{lang:t}}}},onLangChanged:async function(e){let t,r,a=s(e.key)||"content.lang",n=s(e.value)||N;return n===N||B(n)||(n=N),await (t=a,r=JSON.stringify({value:n}),bridge.call("save_plugin_config",t,r)),{ok:!0,value:n}},onR18Changed:async function(e){let t,r,a=s(e.key)||"content.r18",n=!0===e.value||"true"===e.value;return await (t=a,r=JSON.stringify({value:n}),bridge.call("save_plugin_config",t,r)),{ok:!0,value:n}}};module.exports=t})();
|
|
1
|
+
(()=>{"use strict";var e={};e.d=(t,r,a)=>{var n=(r,a)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,[a]:r[n]})};n(r,"get"),n(a,"value")},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{default:()=>Q});let r="7efa2a7c-da0f-4db1-9167-98045ae37fdb",a="https://webtoons-static.pstatic.net/image/favicon/favicon.ico",n="https://m.webtoons.com/",i="https://www.webtoons.com",l="https://m.webtoons.com";function o(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:e}function s(e){return String(null!=e?e:"").trim()}function c(e){return String(null!=e?e:"").replace(/[\s\u00a0\u3000]+$/u,"")}function u(e,t={},r={}){return{name:c(e),onTap:t,extern:r}}function d(e={}){var t,r,n,i,l;return{id:String(null!=(t=e.id)?t:""),url:String(null!=(r=e.url)?r:"").trim()||a,name:String(null!=(n=e.name)?n:""),path:String(null!=(i=e.path)?i:"").trim()||"placeholder/image-404.png",extern:null!=(l=e.extern)?l:{}}}let g=["en","zh-hant","zh-hans","th","id","es","fr","de"],p={"plugin.describe":"WEBTOON official web source","settings.section.content":"Content","settings.lang.label":"Default search language","settings.lang.followSystem":"Follow system (current: {lang})","settings.r18.label":"Show R18 / mature content","advancedSearch.title":"Advanced search","advancedSearch.lang":"Language","meta.author":"Author","meta.categories":"Genre","titleMeta.type":"Type: {type}","titleMeta.chapters":"Chapters: {count}","titleMeta.lang":"Language: {lang}","type.original":"Original","type.canvas":"Canvas","error.keywordRequired":"Please enter a search keyword","error.comicIdRequired":"comicId is required","error.noEpisodes":"No episodes available","error.noViewerLink":"Episode {id} is missing viewerLink","error.noImageList":"imageList not found on viewer page","error.emptyImageList":"imageList is empty","error.detailUrlEmpty":"Detail page URL is empty","error.cannotResolveDetail":"Cannot resolve detail URL (titleNo={titleNo}). Open again from search.","error.downloadFailed":"Download failed: {status} {statusText}","error.http":"HTTP {status}: {url}","error.r18Blocked":"This title is mature content. Enable R18 in plugin settings.","error.urlRequired":"url is required"},h={...p,"plugin.describe":"แหล่ง WEBTOON เว็บอย่างเป็นทางการ","settings.section.content":"เนื้อหา","settings.lang.label":"ภาษาค้นหาเริ่มต้น","settings.lang.followSystem":"ตามระบบ (ปัจจุบัน: {lang})","settings.r18.label":"แสดงเนื้อหา R18 / 18+","advancedSearch.title":"ค้นหาขั้นสูง","advancedSearch.lang":"ภาษา","meta.author":"ผู้แต่ง","meta.categories":"ประเภท","titleMeta.type":"ประเภท: {type}","titleMeta.chapters":"ตอน: {count}","titleMeta.lang":"ภาษา: {lang}","error.keywordRequired":"กรุณาใส่คำค้นหา","error.comicIdRequired":"ต้องระบุ comicId","error.noEpisodes":"ยังไม่มีตอน","error.r18Blocked":"เรื่องนี้เป็นเนื้อหาสำหรับผู้ใหญ่ เปิด R18 ในการตั้งค่าปลั๊กอิน"},m={...p,"plugin.describe":"Sumber web resmi WEBTOON","settings.section.content":"Konten","settings.lang.label":"Bahasa pencarian default","settings.lang.followSystem":"Ikuti sistem (saat ini: {lang})","settings.r18.label":"Tampilkan konten R18 / dewasa","advancedSearch.title":"Pencarian lanjutan","advancedSearch.lang":"Bahasa","meta.author":"Penulis","meta.categories":"Genre","titleMeta.type":"Tipe: {type}","titleMeta.chapters":"Episode: {count}","titleMeta.lang":"Bahasa: {lang}","error.keywordRequired":"Masukkan kata kunci pencarian","error.comicIdRequired":"comicId wajib diisi","error.noEpisodes":"Belum ada episode","error.r18Blocked":"Judul ini konten dewasa. Aktifkan R18 di pengaturan plugin."},f={...p,"plugin.describe":"Fuente web oficial de WEBTOON","settings.section.content":"Contenido","settings.lang.label":"Idioma de b\xfasqueda predeterminado","settings.lang.followSystem":"Seguir el sistema (actual: {lang})","settings.r18.label":"Mostrar contenido R18 / adulto","advancedSearch.title":"B\xfasqueda avanzada","advancedSearch.lang":"Idioma","meta.author":"Autor","meta.categories":"G\xe9nero","titleMeta.type":"Tipo: {type}","titleMeta.chapters":"Cap\xedtulos: {count}","titleMeta.lang":"Idioma: {lang}","error.keywordRequired":"Introduce una palabra clave","error.comicIdRequired":"comicId es obligatorio","error.noEpisodes":"No hay episodios","error.r18Blocked":"Este t\xedtulo es contenido adulto. Activa R18 en la configuraci\xf3n del plugin."},w={...p,"plugin.describe":"Source web officielle WEBTOON","settings.section.content":"Contenu","settings.lang.label":"Langue de recherche par d\xe9faut","settings.lang.followSystem":"Suivre le syst\xe8me (actuel : {lang})","settings.r18.label":"Afficher le contenu R18 / mature","advancedSearch.title":"Recherche avanc\xe9e","advancedSearch.lang":"Langue","meta.author":"Auteur","meta.categories":"Genre","titleMeta.type":"Type : {type}","titleMeta.chapters":"Chapitres : {count}","titleMeta.lang":"Langue : {lang}","error.keywordRequired":"Veuillez saisir un mot-cl\xe9","error.comicIdRequired":"comicId est requis","error.noEpisodes":"Aucun \xe9pisode disponible","error.r18Blocked":"Ce titre est r\xe9serv\xe9 aux adultes. Activez R18 dans les param\xe8tres du plugin."},y={...p,"plugin.describe":"Offizieller WEBTOON-Web-Quell","settings.section.content":"Inhalt","settings.lang.label":"Standard-Suchsprache","settings.lang.followSystem":"System folgen (aktuell: {lang})","settings.r18.label":"R18- / Mature-Inhalte anzeigen","advancedSearch.title":"Erweiterte Suche","advancedSearch.lang":"Sprache","meta.author":"Autor","meta.categories":"Genre","titleMeta.type":"Typ: {type}","titleMeta.chapters":"Kapitel: {count}","titleMeta.lang":"Sprache: {lang}","error.keywordRequired":"Bitte Suchbegriff eingeben","error.comicIdRequired":"comicId ist erforderlich","error.noEpisodes":"Keine Episoden verf\xfcgbar","error.r18Blocked":"Dieser Titel ist Mature-Inhalt. R18 in den Plugin-Einstellungen aktivieren."},v={en:p,"zh-hant":{"plugin.describe":"WEBTOON 官方 Web 端源","settings.section.content":"內容","settings.lang.label":"預設搜尋語言","settings.lang.followSystem":"跟隨系統(目前 {lang})","settings.r18.label":"顯示 R18 / 成人內容","advancedSearch.title":"進階搜尋","advancedSearch.lang":"語言","meta.author":"作者","meta.categories":"分類","titleMeta.type":"類型:{type}","titleMeta.chapters":"章節:{count}","titleMeta.lang":"語言:{lang}","type.original":"Original","type.canvas":"Canvas","error.keywordRequired":"請輸入搜尋關鍵字","error.comicIdRequired":"comicId 不能為空","error.noEpisodes":"該作品暫無章節","error.noViewerLink":"章節 {id} 缺少 viewerLink","error.noImageList":"未在 viewer 頁面找到 imageList","error.emptyImageList":"imageList 為空","error.detailUrlEmpty":"詳情頁 URL 為空","error.cannotResolveDetail":"無法解析詳情頁 URL (titleNo={titleNo}),請從搜尋結果重新開啟","error.downloadFailed":"下載失敗:{status} {statusText}","error.http":"HTTP {status}: {url}","error.r18Blocked":"此作品為成人內容,請在外掛設定中開啟 R18","error.urlRequired":"url 不能為空"},"zh-hans":{"plugin.describe":"WEBTOON 官方 Web 端源","settings.section.content":"内容","settings.lang.label":"默认搜索语言","settings.lang.followSystem":"跟随系统(当前 {lang})","settings.r18.label":"显示 R18 / 成人内容","advancedSearch.title":"高级搜索","advancedSearch.lang":"语言","meta.author":"作者","meta.categories":"分类","titleMeta.type":"类型:{type}","titleMeta.chapters":"章节:{count}","titleMeta.lang":"语言:{lang}","type.original":"Original","type.canvas":"Canvas","error.keywordRequired":"请输入搜索关键词","error.comicIdRequired":"comicId 不能为空","error.noEpisodes":"该作品暂无章节","error.noViewerLink":"章节 {id} 缺少 viewerLink","error.noImageList":"未在 viewer 页面找到 imageList","error.emptyImageList":"imageList 为空","error.detailUrlEmpty":"详情页 URL 为空","error.cannotResolveDetail":"无法解析详情页 URL (titleNo={titleNo}),请从搜索结果重新打开","error.downloadFailed":"下载失败:{status} {statusText}","error.http":"HTTP {status}: {url}","error.r18Blocked":"此作品为成人内容,请在插件设置中开启 R18","error.urlRequired":"url 不能为空"},th:h,id:m,es:f,fr:w,de:y};async function b(){try{let e=globalThis.bridge;if("function"!=typeof(null==e?void 0:e.call))return"";let t=await Promise.resolve(e.call("dart.getLocaleInfo")),r="string"==typeof t?t:JSON.stringify(null!=t?t:"");if(!r)return"";let a=JSON.parse(r);return s(a.locale)||s(a.systemLocale)||s(a.language)||""}catch{return""}}async function S(){let e=s(await b()).toLowerCase().replace(/_/g,"-");if(!e)return"en";if(g.includes(e))return e;if(e.startsWith("zh"))return e.includes("hant")||e.includes("tw")||e.includes("hk")||e.includes("mo")?"zh-hant":"zh-hans";let t=e.split("-")[0]||"";return g.includes(t)?t:"en"}function k(e,t,r){var a,n;let i=null!=(a=null!=(n=(v[e]||p)[t])?n:p[t])?a:t;if(r)for(let[e,t]of Object.entries(r))i=i.replace(RegExp(`\\{${e}\\}`,"g"),String(t));return i}async function R(){return{name:"WEBTOON",uuid:r,iconUrl:"https://webtoons-static.pstatic.net/image/favicon/favicon.ico",creator:{name:"",describe:""},describe:k(await S(),"plugin.describe"),version:"0.0.3",home:"https://www.webtoons.com",updateUrl:"",npmName:"breeze-plugin-webtoon",function:[]}}let L=[{label:"English",value:"en"},{label:"中文 (繁體)",value:"zh-hant"},{label:"ภาษาไทย",value:"th"},{label:"Indonesia",value:"id"},{label:"Espa\xf1ol",value:"es"},{label:"Fran\xe7ais",value:"fr"},{label:"Deutsch",value:"de"}],I=new Set(L.map(e=>e.value)),N="auto",x="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36";function E(e){return`ageGatePass=${e?"true":"false"}; needGDPR=false`}function M(e=!1){return{"User-Agent":x,Referer:n,"Accept-Language":"en-US,en;q=0.9",Cookie:E(e)}}function O(e=!1){return{"User-Agent":"Mozilla/5.0 (Linux; Android 10; Mobile) AppleWebKit/537.36",Referer:n,"Accept-Language":"en-US,en;q=0.9",Cookie:E(e)}}async function C(e,t,r=2e4,a="en"){let n=await fetch(e,{method:"GET",headers:t,signal:AbortSignal.timeout(r)});if(!n.ok)throw Error(k(a,"error.http",{status:n.status,url:e}));return n.text()}async function T(e,t,r=2e4,a="en"){return JSON.parse(await C(e,t,r,a))}async function q(){try{let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))("content.r18","");if(!e)return!1;let t=JSON.parse(e);return!0===t.value||"true"===t.value}catch{return!1}}function B(e){return I.has(e)}async function $(){let e=await b();if(!e)return"en";let t=s(e).toLowerCase().replace(/_/g,"-");if(!t)return"en";if(B(t))return t;if(t.startsWith("zh"))return t.includes("hant")||t.includes("tw")||t.includes("hk")||t.includes("mo"),"zh-hant";let r=t.split("-")[0]||"";return B(r)?r:"en"}async function A(){try{let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))("content.lang","");if(!e)return N;let t=JSON.parse(e),r=s(t.value);if(!r||r===N)return N;if(B(r))return r;return N}catch{return N}}async function _(){let e=await A();return e!==N&&B(e)?e:$()}function U(e){let t=e.href||"";return[e.lang,e.type,e.titleNo,t].map(e=>encodeURIComponent(e)).join("|")}function W(e,t="en"){let r=s(e);if(!r)throw Error("comicId 不能为空");if(r.includes("|")){let a=r.split("|").map(e=>{try{return decodeURIComponent(e)}catch{return e}}),n=a[0]||t,i="canvas"===a[1]?"canvas":"webtoon",l=a[2]||"",o=a[3]||"";if(!l)throw Error(`无效 comicId: ${e}`);return{lang:n,type:i,titleNo:l,href:o}}return{lang:t,type:"webtoon",titleNo:r,href:""}}function z(e){let t=s(e).toLowerCase();return t.includes("/canvas/")||t.includes("/challenge/")||t.includes("episodelist/challenge")||t.includes("type=challenge")||t.includes("type=canvas")?"canvas":"webtoon"}function P(e){let t=s(e);return t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/")?`${i}${t}`:t:""}function j(e){let t=s(e);return t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/")?`${l}${t}`:`${l}/${t}`:""}function D(e,t,a,n){let i=a.map(e=>c(e).trimStart()).map(e=>e.trim()).filter(Boolean);return i.length?{type:e,name:c(t),value:i.map(e=>u(e,{type:"openSearch",payload:{source:r,keyword:e,extern:n?{lang:n}:{}}}))}:null}async function G(e,t,n=1,l={}){var o;let u=!!l.allowR18,g=null!=(o=l.uiLang)?o:"en",p=new URL(`${i}/${t}/search`);p.searchParams.set("keyword",e),p.searchParams.set("page",String(n));let h=await C(p.toString(),M(u),2e4,g),m=BreezeHtml.load(h),f=[];return m(".webtoon_list li a").each((e,n)=>{let i=m(n),l=c(i.find(".title").text()).trim(),o=c(i.find(".author").text()).trim(),p=P(s(i.attr("href"))),h=s(i.find("img").attr("src")),w=s(i.attr("data-title-no"));if(!l||!w)return;let y=function(e){var t;if(e.find(".ico_age19, .age19, .ico_mature, .mature").length>0)return!0;let r=s(e.attr("class")).toLowerCase();if(r.includes("age19")||r.includes("mature"))return!0;let a=s(null!=(t=e.html())?t:"").toLowerCase();return!!(a.includes("ico_age19")||a.includes("age19")||a.includes("grade19")||a.includes("mature"))}(i);if(y&&!u)return;let v=z(p),b=U({titleNo:w,type:v,lang:t,href:p}),S=`comic/${w}/cover.jpg`;f.push({source:r,id:b,title:l,subtitle:o,finished:!1,likesCount:0,viewsCount:0,updatedAt:"",cover:d({id:w,url:h||a,name:"cover.jpg",path:S,extern:{}}),metadata:[D("author",k(g,"meta.author"),o?[o]:[],t)].filter(e=>null!=e),raw:{title:l,author:o,href:p,img:h,titleNo:w,type:v,lang:t,mature:y},extern:{href:p,type:v,lang:t,titleNo:w,mature:y}})}),{results:f,hasNext:m("a.pagination[aria-current=true] + a").length>0}}async function K(e,t={}){var r;let a,n=!!t.allowR18,i=null!=(r=t.uiLang)?r:"en",l=P(e);if(!l)throw Error(k(i,"error.detailUrlEmpty"));let o=await C(l,M(n),2e4,i),u=(a=o.toLowerCase()).includes("ico_age19")||a.includes("agegate")||a.includes("age_gate")||a.includes("mature")||/grade\s*[=:]\s*["']?19/.test(a);if(u&&!n)throw Error(k(i,"error.r18Blocked"));let d=BreezeHtml.load(o),g=c(d("h1.subj, h3.subj").first().text()).trim(),p=c(d(".detail_header .info .author_area").first().text().replace(/author info/gi,"")).replace(/\s+/g," ").trim(),h=[];d(".detail_header .info .genre").each((e,t)=>{let r=c(d(t).text()).trim();r&&h.push(r)});let m=c(d("#_asideDetail p.summary").text()).trim()||c(d(".detail_header p.summary").text()).trim(),f=s(d(".detail_header .thmb img").attr("src"))||s(d('head meta[property="og:image"]').attr("content")),w="";try{w=new URL(l).searchParams.get("title_no")||""}catch{w=""}return{title:g,author:p,genre:h.join(", "),summary:m,thumbnail:f,titleNo:w,url:l,mature:u}}async function J(e,t="webtoon",r="en",a={}){var n,i;let o=!!a.allowR18,s=null!=(n=a.uiLang)?n:"en",c=new URL(`${l}/api/v1/${t}/${e}/episodes`);c.searchParams.set("pageSize","99999"),"canvas"===t&&c.searchParams.set("readingLanguageCode",r);let u=await T(c.toString(),O(o),2e4,s),d=null==u||null==(i=u.result)?void 0:i.episodeList;return Array.isArray(d)?d:[]}async function F(e,t={}){var r;let a=!!t.allowR18,n=null!=(r=t.uiLang)?r:"en",i=j(e);if(!i)throw Error(k(n,"error.noViewerLink",{id:"?"}));let l=(await C(i,O(a),2e4,n)).match(/var\s+imageList\s*=\s*(\[[\s\S]*?\]);/);if(!l)throw Error(k(n,"error.noImageList"));let o=JSON.parse(l[1].replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g,'$1"$2":'));if(!Array.isArray(o)||0===o.length)throw Error(k(n,"error.emptyImageList"));return o.sort((e,t)=>{var r,a;return Number(null!=(r=e.sortOrder)?r:0)-Number(null!=(a=t.sortOrder)?a:0)}),{viewerUrl:i,imageList:o}}async function V(e,t={}){var r;let a=null!=(r=t.uiLang)?r:"en";if(e.href)return P(e.href);let n=await J(e.titleNo,e.type,e.lang,t);if(n.length>0){let e=function(e){let t=j(e);if(!t)return"";try{let e=new URL(t),r=e.pathname.split("/").filter(Boolean);if(r.length>=3){let t=e.searchParams.get("title_no")||"";return`${i}/${r[0]}/${r[1]}/${r[2]}/list?title_no=${t}`}}catch{}return""}(n[0].viewerLink);if(e)return e}throw Error(k(a,"error.cannotResolveDetail",{titleNo:e.titleNo}))}async function H(e={}){let t=await S(),n=await q(),i=s(e.comicId);if(!i)throw Error(k(t,"error.comicIdRequired"));let l=W(i,await _()),g=o(e.extern),p={allowR18:n,uiLang:t};s(g.href)&&(l.href=s(g.href)),"canvas"===s(g.type)&&(l.type="canvas"),s(g.lang)&&(l.lang=s(g.lang));let h=await V(l,p);l.href=h,l.type=z(h);let[m,f]=await Promise.all([K(h,p),J(l.titleNo,l.type,l.lang,p)]);m.titleNo&&(l.titleNo=m.titleNo);let w=U(l),y=f.map((e,t)=>{var r,a;let n=String(e.episodeNo),i=s(e.viewerLink);return{id:n,requestId:n,logicalKey:n,storageChapterId:n,name:s(e.episodeTitle)||`Ep. ${e.episodeNo}`,order:t+1,extern:{comicId:w,episodeNo:e.episodeNo,viewerLink:i,thumbnail:null!=(r=e.thumbnail)?r:"",exposureDateMillis:null!=(a=e.exposureDateMillis)?a:0}}}),v=m.genre?m.genre.split(",").map(e=>e.trim()).filter(Boolean):[],b=k(t,"canvas"===l.type?"type.canvas":"type.original");return{source:r,comicId:w,extern:{...g,href:h,type:l.type,lang:l.lang,titleNo:l.titleNo,mature:m.mature},scheme:{version:"1.0.0",type:"comicDetail",source:r},data:{normal:{comicInfo:{id:w,title:m.title||`WEBTOON #${l.titleNo}`,titleMeta:[k(t,"titleMeta.type",{type:b}),k(t,"titleMeta.chapters",{count:y.length}),k(t,"titleMeta.lang",{lang:l.lang})].map(e=>c(e)).filter(e=>e.length>0).map(e=>u(e)),creator:{id:"",name:"",avatar:{id:"",url:"",name:"",path:"",extern:{}},onTap:{},extern:{}},description:m.summary||"",cover:d({id:l.titleNo,url:m.thumbnail||a,name:"cover.jpg",path:`comic/${l.titleNo}/cover.jpg`}),metadata:[D("author",k(t,"meta.author"),m.author?[m.author]:[],l.lang),D("categories",k(t,"meta.categories"),v,l.lang)].filter(e=>null!=e),extern:{href:h,type:l.type,lang:l.lang,titleNo:l.titleNo,mature:m.mature}},eps:y,recommend:[],totalViews:0,totalLikes:0,totalComments:0,isFavourite:!1,isLiked:!1,allowComments:!1,allowLike:!1,allowCollected:!1,allowDownload:!0,extern:{href:h,type:l.type,lang:l.lang,titleNo:l.titleNo,mature:m.mature}},raw:{detail:m,episodes:f,parts:l}}}}async function Z(e){var t,r,a;let n=await S(),i=await q(),l=s(e.comicId);if(!l)throw Error(k(n,"error.comicIdRequired"));let c=await H({comicId:l,extern:e.extern}),u=c.data.normal.eps;if(!u.length)throw Error(k(n,"error.noEpisodes"));let d=s(e.chapterId),g=u.find(e=>e.requestId===d||e.id===d);if(!g){let t=Number(o(e.extern).episodeNo);t>0&&(g=u.find(e=>Number(o(e.extern).episodeNo)===t))}let p=o((g=null!=g?g:u[0]).extern),h=s(p.viewerLink);if(!h){let e=W(l,await _()),t=(await J(e.titleNo,e.type,e.lang,{allowR18:i,uiLang:n})).find(e=>String(e.episodeNo)===g.id);h=s(null==t?void 0:t.viewerLink)}if(!h)throw Error(k(n,"error.noViewerLink",{id:g.id}));let{imageList:m}=await F(h,{allowR18:i,uiLang:n}),f=(r=c.comicId,a=g.storageChapterId,m.map((e,t)=>{var n,i,l;let o=s(e.url),c=function(e,t){try{let t=new URL(e).pathname.split("/").filter(Boolean).pop()||"";if(t)return t}catch{}return`${String(t+1).padStart(4,"0")}.jpg`}(o,t);return{id:`${a}-p-${t}`,name:c,path:`comic/${r}/${a}/${c}`,url:o,extern:{width:null!=(n=e.width)?n:0,height:null!=(i=e.height)?i:0,sortOrder:null!=(l=e.sortOrder)?l:t}}}));return{comicId:c.comicId,title:c.data.normal.comicInfo.title,chapter:{...g,pages:f,extern:{...p,viewerLink:h}},chapters:u,extern:null!=(t=e.extern)?t:null}}let Q={getInfo:async function(){return await R()},searchComic:async function(e={}){var t,a;let n=await S(),i=await q(),l=o(e.extern),c=Math.max(1,Number(null!=(t=e.page)?t:1)||1),u=s(null!=(a=e.keyword)?a:l.keyword);if(!u)throw Error(k(n,"error.keywordRequired"));let d=await _(),g=s(l.lang),p=(g&&B(g)?g:"")||d||"en",{results:h,hasNext:m}=await G(u,p,c,{allowR18:i,uiLang:n}),f=function(e=1,t=1,r=0,a=!0){return{page:e,pages:Math.max(1,t),total:r,hasReachedMax:a}}(c,m?c+1:c,h.length,!m);return{source:r,extern:{...l,keyword:u,lang:p,page:c},scheme:{version:"1.0.0",type:"searchResult",source:r,list:"comicGrid"},data:{paging:f,items:h},paging:f,items:h}},getComicDetail:H,getChapter:async function(e={}){let t=await Z(e);return{source:r,comicId:t.comicId,chapterId:t.chapter.id,extern:t.extern,scheme:{version:"1.0.0",type:"chapterContent",source:r},data:{comic:{id:t.comicId,source:r,title:t.title,extern:{}},chapter:t.chapter,chapters:t.chapters.map(e=>({id:e.id,requestId:e.requestId,logicalKey:e.logicalKey,storageChapterId:e.storageChapterId,name:e.name,order:e.order,extern:e.extern}))}}},getReadSnapshot:async function(e={}){let t=await Z(e);return{source:r,extern:t.extern,data:{comic:{id:t.comicId,source:r,title:t.title,extern:{}},chapter:t.chapter,chapters:t.chapters.map(e=>({id:e.id,name:e.name,order:e.order,extern:e.extern}))}}},fetchImageBytes:async function(e={}){var t;let r,a=await S(),i=await q(),l=s(e.url);if(!l)throw Error(k(a,"error.urlRequired"));let o=Number(null!=(t=e.timeoutMs)?t:3e4)||3e4,c=s(e.taskGroupKey);if(c&&await (r=c,bridge.call("runtime.is_task_group_cancelled",r)))return new Uint8Array(0);let u=await fetch(l,{method:"GET",headers:{"User-Agent":x,Referer:n,Cookie:E(i),"x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(o)});if(!u.ok)throw Error(k(a,"error.downloadFailed",{status:u.status,statusText:u.statusText}));return new Uint8Array(await u.arrayBuffer())},getSettingsBundle:async function(){let e=await S(),t=await A(),a=await _(),n=await q();return{source:r,scheme:{version:"1.0.0",type:"settings",sections:[{title:k(e,"settings.section.content"),fields:[{key:"content.lang",kind:"choice",label:k(e,"settings.lang.label"),options:[{label:k(e,"settings.lang.followSystem",{lang:a}),value:N},...L.map(e=>({label:e.label,value:e.value}))],fnPath:"onLangChanged",persist:!0},{key:"content.r18",kind:"switch",label:k(e,"settings.r18.label"),fnPath:"onR18Changed",persist:!0}]}]},data:{canShowUserInfo:!1,values:{"content.lang":t,"content.r18":n}}}},getCapabilitiesBundle:async function(){return{source:r,scheme:{version:"1.0.0",type:"capabilities",actions:[]},data:{}}},getAdvancedSearchScheme:async function(){let e=await S(),t=await _();return{source:r,scheme:{version:"1.0.0",type:"advancedSearch",title:k(e,"advancedSearch.title"),fields:[{key:"lang",kind:"choice",label:k(e,"advancedSearch.lang"),options:L.map(e=>({label:e.label,value:e.value}))}]},data:{values:{lang:t}}}},onLangChanged:async function(e){let t,r,a=s(e.key)||"content.lang",n=s(e.value)||N;return n===N||B(n)||(n=N),await (t=a,r=JSON.stringify({value:n}),bridge.call("save_plugin_config",t,r)),{ok:!0,value:n}},onR18Changed:async function(e){let t,r,a=s(e.key)||"content.r18",n=!0===e.value||"true"===e.value;return await (t=a,r=JSON.stringify({value:n}),bridge.call("save_plugin_config",t,r)),{ok:!0,value:n}}};module.exports=t})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLXBsdWdpbi13ZWJ0b29uLmJ1bmRsZS5janMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9icmVlemUtcGx1Z2luLXdlYnRvb24vd2VicGFjay9ydW50aW1lL2RlZmluZV9wcm9wZXJ0eV9nZXR0ZXJzIiwid2VicGFjazovL2JyZWV6ZS1wbHVnaW4td2VidG9vbi93ZWJwYWNrL3J1bnRpbWUvaGFzX293bl9wcm9wZXJ0eSIsIndlYnBhY2s6Ly9icmVlemUtcGx1Z2luLXdlYnRvb24vd2VicGFjay9ydW50aW1lL21ha2VfbmFtZXNwYWNlX29iamVjdCIsIndlYnBhY2s6Ly9icmVlemUtcGx1Z2luLXdlYnRvb24vLi9zcmMvY29tbW9uLnRzIiwid2VicGFjazovL2JyZWV6ZS1wbHVnaW4td2VidG9vbi8uL3NyYy9pMThuLnRzIiwid2VicGFjazovL2JyZWV6ZS1wbHVnaW4td2VidG9vbi8uL3NyYy9nZXQtaW5mby50cyIsIndlYnBhY2s6Ly9icmVlemUtcGx1Z2luLXdlYnRvb24vLi9ub2RlX21vZHVsZXMvLnBucG0vYnJlZXplLXBsdWdpbi1raXRAMC4zLjAvbm9kZV9tb2R1bGVzL2JyZWV6ZS1wbHVnaW4ta2l0L2Rpc3QvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vYnJlZXplLXBsdWdpbi13ZWJ0b29uLy4vc3JjL3dlYnRvb24tY29yZS50cyIsIndlYnBhY2s6Ly9icmVlemUtcGx1Z2luLXdlYnRvb24vLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGdldHRlcnMsIHZhbHVlcykgPT4ge1xuXHR2YXIgZGVmaW5lID0gKGRlZnMsIGtpbmQpID0+IHtcblx0XHRmb3IodmFyIGtleSBpbiBkZWZzKSB7XG5cdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmcywga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBba2luZF06IGRlZnNba2V5XSB9KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGRlZmluZShnZXR0ZXJzLCBcImdldFwiKTtcblx0ZGVmaW5lKHZhbHVlcywgXCJ2YWx1ZVwiKTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImV4cG9ydCBjb25zdCBQTFVHSU5fSUQgPSBcIjdlZmEyYTdjLWRhMGYtNGRiMS05MTY3LTk4MDQ1YWUzN2ZkYlwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF9JTUFHRV9VUkwgPVxuICBcImh0dHBzOi8vd2VidG9vbnMtc3RhdGljLnBzdGF0aWMubmV0L2ltYWdlL2Zhdmljb24vZmF2aWNvbi5pY29cIjtcbmV4cG9ydCBjb25zdCBQTEFDRUhPTERFUl9JTUFHRV9QQVRIID0gXCJwbGFjZWhvbGRlci9pbWFnZS00MDQucG5nXCI7XG5leHBvcnQgY29uc3QgV0VCVE9PTl9SRUZFUkVSID0gXCJodHRwczovL20ud2VidG9vbnMuY29tL1wiO1xuZXhwb3J0IGNvbnN0IFBDX0JBU0UgPSBcImh0dHBzOi8vd3d3LndlYnRvb25zLmNvbVwiO1xuZXhwb3J0IGNvbnN0IE1PQklMRV9CQVNFID0gXCJodHRwczovL20ud2VidG9vbnMuY29tXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uSXRlbSxcbiAgQ29taWNMaXN0SXRlbSxcbiAgSW1hZ2VJdGVtLFxuICBNZXRhZGF0YUxpc3RJdGVtLFxuICBQYWdpbmdJbmZvLFxuICBTdHJpbmdNYXAsXG59IGZyb20gXCJicmVlemUtcGx1Z2luLWtpdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmdNYXAodmFsdWU6IHVua25vd24pOiBTdHJpbmdNYXAge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSA/PyBcIlwiKS50cmltKCk7XG59XG5cbi8qKiDliKDpmaTlsL7pg6jnqbrnmb3vvIjlkKvmma7pgJrnqbrnmb3jgIFOQlNQ44CB5YWo6KeS56m65qC844CB5o2i6KGM77yJICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbVRyYWlsaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSA/PyBcIlwiKS5yZXBsYWNlKC9bXFxzXFx1MDBhMFxcdTMwMDBdKyQvdSwgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25JdGVtKFxuICBuYW1lOiB1bmtub3duLFxuICBvblRhcDogU3RyaW5nTWFwID0ge30sXG4gIGV4dGVybjogU3RyaW5nTWFwID0ge30sXG4pOiBBY3Rpb25JdGVtIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0cmltVHJhaWxpbmcobmFtZSksXG4gICAgb25UYXAsXG4gICAgZXh0ZXJuLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW1hZ2UoXG4gIGlucHV0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBleHRlcm4/OiBTdHJpbmdNYXA7XG4gIH0gPSB7fSxcbik6IEltYWdlSXRlbSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IFN0cmluZyhpbnB1dC5pZCA/PyBcIlwiKSxcbiAgICB1cmw6IFN0cmluZyhpbnB1dC51cmwgPz8gXCJcIikudHJpbSgpIHx8IE5PVF9GT1VORF9JTUFHRV9VUkwsXG4gICAgbmFtZTogU3RyaW5nKGlucHV0Lm5hbWUgPz8gXCJcIiksXG4gICAgcGF0aDogU3RyaW5nKGlucHV0LnBhdGggPz8gXCJcIikudHJpbSgpIHx8IFBMQUNFSE9MREVSX0lNQUdFX1BBVEgsXG4gICAgZXh0ZXJuOiBpbnB1dC5leHRlcm4gPz8ge30sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCYXNpY01ldGFkYXRhKFxuICB0eXBlOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWVzOiB1bmtub3duLFxuKTogTWV0YWRhdGFMaXN0SXRlbSB7XG4gIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiB2YWx1ZXMgPT0gbnVsbCA/IFtdIDogW3ZhbHVlc107XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICBuYW1lLFxuICAgIHZhbHVlOiBsaXN0XG4gICAgICAubWFwKChpdGVtKSA9PiBTdHJpbmcoaXRlbSA/PyBcIlwiKS50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChpdGVtKSA9PiBjcmVhdGVBY3Rpb25JdGVtKGl0ZW0pKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbWljSXRlbShpZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogQ29taWNMaXN0SXRlbSB7XG4gIGNvbnN0IHBhdGggPSBgY29taWMvJHtpZH0vY292ZXIucG5nYDtcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2U6IFBMVUdJTl9JRCxcbiAgICBpZCxcbiAgICB0aXRsZSxcbiAgICBzdWJ0aXRsZTogXCJcIixcbiAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgbGlrZXNDb3VudDogMCxcbiAgICB2aWV3c0NvdW50OiAwLFxuICAgIHVwZGF0ZWRBdDogXCJcIixcbiAgICBjb3Zlcjoge1xuICAgICAgaWQsXG4gICAgICB1cmw6IE5PVF9GT1VORF9JTUFHRV9VUkwsXG4gICAgICBwYXRoLFxuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGV4dGVybjogeyBwYXRoIH0sXG4gICAgfSxcbiAgICBtZXRhZGF0YTogW10sXG4gICAgcmF3OiB7IGlkLCBuYW1lOiB0aXRsZSB9LFxuICAgIGV4dGVybjoge30sXG4gIH0gc2F0aXNmaWVzIENvbWljTGlzdEl0ZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWdpbmcoXG4gIHBhZ2UgPSAxLFxuICBwYWdlcyA9IDEsXG4gIHRvdGFsID0gMCxcbiAgaGFzUmVhY2hlZE1heCA9IHRydWUsXG4pOiBQYWdpbmdJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdlLFxuICAgIHBhZ2VzOiBNYXRoLm1heCgxLCBwYWdlcyksXG4gICAgdG90YWwsXG4gICAgaGFzUmVhY2hlZE1heCxcbiAgfTtcbn1cbiIsImltcG9ydCB7IHJlYWRTdHJpbmcgfSBmcm9tIFwiLi9jb21tb25cIjtcblxuLyoqXG4gKiDmj5Lku7YgVUkg6K+t6KiA44CCXG4gKiAtIOWGheWuueaQnOe0ouS7jeWPqueUqOWumOe9keivreiogO+8iOaXoOeugOS9k+WMuu+8iVxuICogLSBVSSDpop3lpJbmlK/mjIHnroDkvZPvvJpBcHAg5Li6IHpoLUNOIC8gemgtSGFucyDml7bnlKggemgtaGFucyDmlofmoYhcbiAqL1xuZXhwb3J0IHR5cGUgVWlMYW5nID1cbiAgfCBcImVuXCJcbiAgfCBcInpoLWhhbnRcIlxuICB8IFwiemgtaGFuc1wiXG4gIHwgXCJ0aFwiXG4gIHwgXCJpZFwiXG4gIHwgXCJlc1wiXG4gIHwgXCJmclwiXG4gIHwgXCJkZVwiO1xuXG5leHBvcnQgY29uc3QgVUlfTEFOR1M6IFVpTGFuZ1tdID0gW1xuICBcImVuXCIsXG4gIFwiemgtaGFudFwiLFxuICBcInpoLWhhbnNcIixcbiAgXCJ0aFwiLFxuICBcImlkXCIsXG4gIFwiZXNcIixcbiAgXCJmclwiLFxuICBcImRlXCIsXG5dO1xuXG50eXBlIERpY3QgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG5jb25zdCBlbjogRGljdCA9IHtcbiAgXCJwbHVnaW4uZGVzY3JpYmVcIjogXCJXRUJUT09OIG9mZmljaWFsIHdlYiBzb3VyY2VcIixcbiAgXCJzZXR0aW5ncy5zZWN0aW9uLmNvbnRlbnRcIjogXCJDb250ZW50XCIsXG4gIFwic2V0dGluZ3MubGFuZy5sYWJlbFwiOiBcIkRlZmF1bHQgc2VhcmNoIGxhbmd1YWdlXCIsXG4gIFwic2V0dGluZ3MubGFuZy5mb2xsb3dTeXN0ZW1cIjogXCJGb2xsb3cgc3lzdGVtIChjdXJyZW50OiB7bGFuZ30pXCIsXG4gIFwic2V0dGluZ3MucjE4LmxhYmVsXCI6IFwiU2hvdyBSMTggLyBtYXR1cmUgY29udGVudFwiLFxuICBcImFkdmFuY2VkU2VhcmNoLnRpdGxlXCI6IFwiQWR2YW5jZWQgc2VhcmNoXCIsXG4gIFwiYWR2YW5jZWRTZWFyY2gubGFuZ1wiOiBcIkxhbmd1YWdlXCIsXG4gIFwibWV0YS5hdXRob3JcIjogXCJBdXRob3JcIixcbiAgXCJtZXRhLmNhdGVnb3JpZXNcIjogXCJHZW5yZVwiLFxuICBcInRpdGxlTWV0YS50eXBlXCI6IFwiVHlwZToge3R5cGV9XCIsXG4gIFwidGl0bGVNZXRhLmNoYXB0ZXJzXCI6IFwiQ2hhcHRlcnM6IHtjb3VudH1cIixcbiAgXCJ0aXRsZU1ldGEubGFuZ1wiOiBcIkxhbmd1YWdlOiB7bGFuZ31cIixcbiAgXCJ0eXBlLm9yaWdpbmFsXCI6IFwiT3JpZ2luYWxcIixcbiAgXCJ0eXBlLmNhbnZhc1wiOiBcIkNhbnZhc1wiLFxuICBcImVycm9yLmtleXdvcmRSZXF1aXJlZFwiOiBcIlBsZWFzZSBlbnRlciBhIHNlYXJjaCBrZXl3b3JkXCIsXG4gIFwiZXJyb3IuY29taWNJZFJlcXVpcmVkXCI6IFwiY29taWNJZCBpcyByZXF1aXJlZFwiLFxuICBcImVycm9yLm5vRXBpc29kZXNcIjogXCJObyBlcGlzb2RlcyBhdmFpbGFibGVcIixcbiAgXCJlcnJvci5ub1ZpZXdlckxpbmtcIjogXCJFcGlzb2RlIHtpZH0gaXMgbWlzc2luZyB2aWV3ZXJMaW5rXCIsXG4gIFwiZXJyb3Iubm9JbWFnZUxpc3RcIjogXCJpbWFnZUxpc3Qgbm90IGZvdW5kIG9uIHZpZXdlciBwYWdlXCIsXG4gIFwiZXJyb3IuZW1wdHlJbWFnZUxpc3RcIjogXCJpbWFnZUxpc3QgaXMgZW1wdHlcIixcbiAgXCJlcnJvci5kZXRhaWxVcmxFbXB0eVwiOiBcIkRldGFpbCBwYWdlIFVSTCBpcyBlbXB0eVwiLFxuICBcImVycm9yLmNhbm5vdFJlc29sdmVEZXRhaWxcIjpcbiAgICBcIkNhbm5vdCByZXNvbHZlIGRldGFpbCBVUkwgKHRpdGxlTm89e3RpdGxlTm99KS4gT3BlbiBhZ2FpbiBmcm9tIHNlYXJjaC5cIixcbiAgXCJlcnJvci5kb3dubG9hZEZhaWxlZFwiOiBcIkRvd25sb2FkIGZhaWxlZDoge3N0YXR1c30ge3N0YXR1c1RleHR9XCIsXG4gIFwiZXJyb3IuaHR0cFwiOiBcIkhUVFAge3N0YXR1c306IHt1cmx9XCIsXG4gIFwiZXJyb3IucjE4QmxvY2tlZFwiOiBcIlRoaXMgdGl0bGUgaXMgbWF0dXJlIGNvbnRlbnQuIEVuYWJsZSBSMTggaW4gcGx1Z2luIHNldHRpbmdzLlwiLFxuICBcImVycm9yLnVybFJlcXVpcmVkXCI6IFwidXJsIGlzIHJlcXVpcmVkXCIsXG59O1xuXG5jb25zdCB6aEhhbnQ6IERpY3QgPSB7XG4gIFwicGx1Z2luLmRlc2NyaWJlXCI6IFwiV0VCVE9PTiDlrpjmlrkgV2ViIOerr+a6kFwiLFxuICBcInNldHRpbmdzLnNlY3Rpb24uY29udGVudFwiOiBcIuWFp+WuuVwiLFxuICBcInNldHRpbmdzLmxhbmcubGFiZWxcIjogXCLpoJDoqK3mkJzlsIvoqp7oqIBcIixcbiAgXCJzZXR0aW5ncy5sYW5nLmZvbGxvd1N5c3RlbVwiOiBcIui3n+maqOezu+e1se+8iOebruWJjSB7bGFuZ33vvIlcIixcbiAgXCJzZXR0aW5ncy5yMTgubGFiZWxcIjogXCLpoa/npLogUjE4IC8g5oiQ5Lq65YWn5a65XCIsXG4gIFwiYWR2YW5jZWRTZWFyY2gudGl0bGVcIjogXCLpgLLpmo7mkJzlsItcIixcbiAgXCJhZHZhbmNlZFNlYXJjaC5sYW5nXCI6IFwi6Kqe6KiAXCIsXG4gIFwibWV0YS5hdXRob3JcIjogXCLkvZzogIVcIixcbiAgXCJtZXRhLmNhdGVnb3JpZXNcIjogXCLliIbpoZ5cIixcbiAgXCJ0aXRsZU1ldGEudHlwZVwiOiBcIumhnuWei++8mnt0eXBlfVwiLFxuICBcInRpdGxlTWV0YS5jaGFwdGVyc1wiOiBcIueroOevgO+8mntjb3VudH1cIixcbiAgXCJ0aXRsZU1ldGEubGFuZ1wiOiBcIuiqnuiogO+8mntsYW5nfVwiLFxuICBcInR5cGUub3JpZ2luYWxcIjogXCJPcmlnaW5hbFwiLFxuICBcInR5cGUuY2FudmFzXCI6IFwiQ2FudmFzXCIsXG4gIFwiZXJyb3Iua2V5d29yZFJlcXVpcmVkXCI6IFwi6KuL6Ly45YWl5pCc5bCL6Zec6Y215a2XXCIsXG4gIFwiZXJyb3IuY29taWNJZFJlcXVpcmVkXCI6IFwiY29taWNJZCDkuI3og73ngrrnqbpcIixcbiAgXCJlcnJvci5ub0VwaXNvZGVzXCI6IFwi6Kmy5L2c5ZOB5pqr54Sh56ug56+AXCIsXG4gIFwiZXJyb3Iubm9WaWV3ZXJMaW5rXCI6IFwi56ug56+AIHtpZH0g57y65bCRIHZpZXdlckxpbmtcIixcbiAgXCJlcnJvci5ub0ltYWdlTGlzdFwiOiBcIuacquWcqCB2aWV3ZXIg6aCB6Z2i5om+5YiwIGltYWdlTGlzdFwiLFxuICBcImVycm9yLmVtcHR5SW1hZ2VMaXN0XCI6IFwiaW1hZ2VMaXN0IOeCuuepulwiLFxuICBcImVycm9yLmRldGFpbFVybEVtcHR5XCI6IFwi6Kmz5oOF6aCBIFVSTCDngrrnqbpcIixcbiAgXCJlcnJvci5jYW5ub3RSZXNvbHZlRGV0YWlsXCI6XG4gICAgXCLnhKHms5Xop6PmnpDoqbPmg4XpoIEgVVJMICh0aXRsZU5vPXt0aXRsZU5vfSnvvIzoq4vlvp7mkJzlsIvntZDmnpzph43mlrDplovllZ9cIixcbiAgXCJlcnJvci5kb3dubG9hZEZhaWxlZFwiOiBcIuS4i+i8ieWkseaVl++8mntzdGF0dXN9IHtzdGF0dXNUZXh0fVwiLFxuICBcImVycm9yLmh0dHBcIjogXCJIVFRQIHtzdGF0dXN9OiB7dXJsfVwiLFxuICBcImVycm9yLnIxOEJsb2NrZWRcIjogXCLmraTkvZzlk4HngrrmiJDkurrlhaflrrnvvIzoq4vlnKjlpJbmjpvoqK3lrprkuK3plovllZ8gUjE4XCIsXG4gIFwiZXJyb3IudXJsUmVxdWlyZWRcIjogXCJ1cmwg5LiN6IO954K656m6XCIsXG59O1xuXG5jb25zdCB6aEhhbnM6IERpY3QgPSB7XG4gIFwicGx1Z2luLmRlc2NyaWJlXCI6IFwiV0VCVE9PTiDlrpjmlrkgV2ViIOerr+a6kFwiLFxuICBcInNldHRpbmdzLnNlY3Rpb24uY29udGVudFwiOiBcIuWGheWuuVwiLFxuICBcInNldHRpbmdzLmxhbmcubGFiZWxcIjogXCLpu5jorqTmkJzntKLor63oqIBcIixcbiAgXCJzZXR0aW5ncy5sYW5nLmZvbGxvd1N5c3RlbVwiOiBcIui3n+maj+ezu+e7n++8iOW9k+WJjSB7bGFuZ33vvIlcIixcbiAgXCJzZXR0aW5ncy5yMTgubGFiZWxcIjogXCLmmL7npLogUjE4IC8g5oiQ5Lq65YaF5a65XCIsXG4gIFwiYWR2YW5jZWRTZWFyY2gudGl0bGVcIjogXCLpq5jnuqfmkJzntKJcIixcbiAgXCJhZHZhbmNlZFNlYXJjaC5sYW5nXCI6IFwi6K+t6KiAXCIsXG4gIFwibWV0YS5hdXRob3JcIjogXCLkvZzogIVcIixcbiAgXCJtZXRhLmNhdGVnb3JpZXNcIjogXCLliIbnsbtcIixcbiAgXCJ0aXRsZU1ldGEudHlwZVwiOiBcIuexu+Wei++8mnt0eXBlfVwiLFxuICBcInRpdGxlTWV0YS5jaGFwdGVyc1wiOiBcIueroOiKgu+8mntjb3VudH1cIixcbiAgXCJ0aXRsZU1ldGEubGFuZ1wiOiBcIuivreiogO+8mntsYW5nfVwiLFxuICBcInR5cGUub3JpZ2luYWxcIjogXCJPcmlnaW5hbFwiLFxuICBcInR5cGUuY2FudmFzXCI6IFwiQ2FudmFzXCIsXG4gIFwiZXJyb3Iua2V5d29yZFJlcXVpcmVkXCI6IFwi6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NXCIsXG4gIFwiZXJyb3IuY29taWNJZFJlcXVpcmVkXCI6IFwiY29taWNJZCDkuI3og73kuLrnqbpcIixcbiAgXCJlcnJvci5ub0VwaXNvZGVzXCI6IFwi6K+l5L2c5ZOB5pqC5peg56ug6IqCXCIsXG4gIFwiZXJyb3Iubm9WaWV3ZXJMaW5rXCI6IFwi56ug6IqCIHtpZH0g57y65bCRIHZpZXdlckxpbmtcIixcbiAgXCJlcnJvci5ub0ltYWdlTGlzdFwiOiBcIuacquWcqCB2aWV3ZXIg6aG16Z2i5om+5YiwIGltYWdlTGlzdFwiLFxuICBcImVycm9yLmVtcHR5SW1hZ2VMaXN0XCI6IFwiaW1hZ2VMaXN0IOS4uuepulwiLFxuICBcImVycm9yLmRldGFpbFVybEVtcHR5XCI6IFwi6K+m5oOF6aG1IFVSTCDkuLrnqbpcIixcbiAgXCJlcnJvci5jYW5ub3RSZXNvbHZlRGV0YWlsXCI6XG4gICAgXCLml6Dms5Xop6PmnpDor6bmg4XpobUgVVJMICh0aXRsZU5vPXt0aXRsZU5vfSnvvIzor7fku47mkJzntKLnu5Pmnpzph43mlrDmiZPlvIBcIixcbiAgXCJlcnJvci5kb3dubG9hZEZhaWxlZFwiOiBcIuS4i+i9veWksei0pe+8mntzdGF0dXN9IHtzdGF0dXNUZXh0fVwiLFxuICBcImVycm9yLmh0dHBcIjogXCJIVFRQIHtzdGF0dXN9OiB7dXJsfVwiLFxuICBcImVycm9yLnIxOEJsb2NrZWRcIjogXCLmraTkvZzlk4HkuLrmiJDkurrlhoXlrrnvvIzor7flnKjmj5Lku7borr7nva7kuK3lvIDlkK8gUjE4XCIsXG4gIFwiZXJyb3IudXJsUmVxdWlyZWRcIjogXCJ1cmwg5LiN6IO95Li656m6XCIsXG59O1xuXG5jb25zdCB0aDogRGljdCA9IHtcbiAgLi4uZW4sXG4gIFwicGx1Z2luLmRlc2NyaWJlXCI6IFwi4LmB4Lir4Lil4LmI4LiHIFdFQlRPT04g4LmA4Lin4LmH4Lia4Lit4Lii4LmI4Liy4LiH4LmA4Lib4LmH4LiZ4LiX4Liy4LiH4LiB4Liy4LijXCIsXG4gIFwic2V0dGluZ3Muc2VjdGlvbi5jb250ZW50XCI6IFwi4LmA4LiZ4Li34LmJ4Lit4Lir4LiyXCIsXG4gIFwic2V0dGluZ3MubGFuZy5sYWJlbFwiOiBcIuC4oOC4suC4qeC4suC4hOC5ieC4meC4q+C4suC5gOC4o+C4tOC5iOC4oeC4leC5ieC4mVwiLFxuICBcInNldHRpbmdzLmxhbmcuZm9sbG93U3lzdGVtXCI6IFwi4LiV4Liy4Lih4Lij4Liw4Lia4LiaICjguJvguLHguIjguIjguLjguJrguLHguJk6IHtsYW5nfSlcIixcbiAgXCJzZXR0aW5ncy5yMTgubGFiZWxcIjogXCLguYHguKrguJTguIfguYDguJnguLfguYnguK3guKvguLIgUjE4IC8gMTgrXCIsXG4gIFwiYWR2YW5jZWRTZWFyY2gudGl0bGVcIjogXCLguITguYnguJnguKvguLLguILguLHguYnguJnguKrguLnguIdcIixcbiAgXCJhZHZhbmNlZFNlYXJjaC5sYW5nXCI6IFwi4Lig4Liy4Lip4LiyXCIsXG4gIFwibWV0YS5hdXRob3JcIjogXCLguJzguLnguYnguYHguJXguYjguIdcIixcbiAgXCJtZXRhLmNhdGVnb3JpZXNcIjogXCLguJvguKPguLDguYDguKDguJdcIixcbiAgXCJ0aXRsZU1ldGEudHlwZVwiOiBcIuC4m+C4o+C4sOC5gOC4oOC4lzoge3R5cGV9XCIsXG4gIFwidGl0bGVNZXRhLmNoYXB0ZXJzXCI6IFwi4LiV4Lit4LiZOiB7Y291bnR9XCIsXG4gIFwidGl0bGVNZXRhLmxhbmdcIjogXCLguKDguLLguKnguLI6IHtsYW5nfVwiLFxuICBcImVycm9yLmtleXdvcmRSZXF1aXJlZFwiOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4hOC4s+C4hOC5ieC4meC4q+C4slwiLFxuICBcImVycm9yLmNvbWljSWRSZXF1aXJlZFwiOiBcIuC4leC5ieC4reC4h+C4o+C4sOC4muC4uCBjb21pY0lkXCIsXG4gIFwiZXJyb3Iubm9FcGlzb2Rlc1wiOiBcIuC4ouC4seC4h+C5hOC4oeC5iOC4oeC4teC4leC4reC4mVwiLFxuICBcImVycm9yLnIxOEJsb2NrZWRcIjogXCLguYDguKPguLfguYjguK3guIfguJnguLXguYnguYDguJvguYfguJnguYDguJnguLfguYnguK3guKvguLLguKrguLPguKvguKPguLHguJrguJzguLnguYnguYPguKvguI3guYgg4LmA4Lib4Li04LiUIFIxOCDguYPguJnguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJvguKXguLHguYrguIHguK3guLTguJlcIixcbn07XG5cbmNvbnN0IGlkOiBEaWN0ID0ge1xuICAuLi5lbixcbiAgXCJwbHVnaW4uZGVzY3JpYmVcIjogXCJTdW1iZXIgd2ViIHJlc21pIFdFQlRPT05cIixcbiAgXCJzZXR0aW5ncy5zZWN0aW9uLmNvbnRlbnRcIjogXCJLb250ZW5cIixcbiAgXCJzZXR0aW5ncy5sYW5nLmxhYmVsXCI6IFwiQmFoYXNhIHBlbmNhcmlhbiBkZWZhdWx0XCIsXG4gIFwic2V0dGluZ3MubGFuZy5mb2xsb3dTeXN0ZW1cIjogXCJJa3V0aSBzaXN0ZW0gKHNhYXQgaW5pOiB7bGFuZ30pXCIsXG4gIFwic2V0dGluZ3MucjE4LmxhYmVsXCI6IFwiVGFtcGlsa2FuIGtvbnRlbiBSMTggLyBkZXdhc2FcIixcbiAgXCJhZHZhbmNlZFNlYXJjaC50aXRsZVwiOiBcIlBlbmNhcmlhbiBsYW5qdXRhblwiLFxuICBcImFkdmFuY2VkU2VhcmNoLmxhbmdcIjogXCJCYWhhc2FcIixcbiAgXCJtZXRhLmF1dGhvclwiOiBcIlBlbnVsaXNcIixcbiAgXCJtZXRhLmNhdGVnb3JpZXNcIjogXCJHZW5yZVwiLFxuICBcInRpdGxlTWV0YS50eXBlXCI6IFwiVGlwZToge3R5cGV9XCIsXG4gIFwidGl0bGVNZXRhLmNoYXB0ZXJzXCI6IFwiRXBpc29kZToge2NvdW50fVwiLFxuICBcInRpdGxlTWV0YS5sYW5nXCI6IFwiQmFoYXNhOiB7bGFuZ31cIixcbiAgXCJlcnJvci5rZXl3b3JkUmVxdWlyZWRcIjogXCJNYXN1a2thbiBrYXRhIGt1bmNpIHBlbmNhcmlhblwiLFxuICBcImVycm9yLmNvbWljSWRSZXF1aXJlZFwiOiBcImNvbWljSWQgd2FqaWIgZGlpc2lcIixcbiAgXCJlcnJvci5ub0VwaXNvZGVzXCI6IFwiQmVsdW0gYWRhIGVwaXNvZGVcIixcbiAgXCJlcnJvci5yMThCbG9ja2VkXCI6XG4gICAgXCJKdWR1bCBpbmkga29udGVuIGRld2FzYS4gQWt0aWZrYW4gUjE4IGRpIHBlbmdhdHVyYW4gcGx1Z2luLlwiLFxufTtcblxuY29uc3QgZXM6IERpY3QgPSB7XG4gIC4uLmVuLFxuICBcInBsdWdpbi5kZXNjcmliZVwiOiBcIkZ1ZW50ZSB3ZWIgb2ZpY2lhbCBkZSBXRUJUT09OXCIsXG4gIFwic2V0dGluZ3Muc2VjdGlvbi5jb250ZW50XCI6IFwiQ29udGVuaWRvXCIsXG4gIFwic2V0dGluZ3MubGFuZy5sYWJlbFwiOiBcIklkaW9tYSBkZSBiw7pzcXVlZGEgcHJlZGV0ZXJtaW5hZG9cIixcbiAgXCJzZXR0aW5ncy5sYW5nLmZvbGxvd1N5c3RlbVwiOiBcIlNlZ3VpciBlbCBzaXN0ZW1hIChhY3R1YWw6IHtsYW5nfSlcIixcbiAgXCJzZXR0aW5ncy5yMTgubGFiZWxcIjogXCJNb3N0cmFyIGNvbnRlbmlkbyBSMTggLyBhZHVsdG9cIixcbiAgXCJhZHZhbmNlZFNlYXJjaC50aXRsZVwiOiBcIkLDunNxdWVkYSBhdmFuemFkYVwiLFxuICBcImFkdmFuY2VkU2VhcmNoLmxhbmdcIjogXCJJZGlvbWFcIixcbiAgXCJtZXRhLmF1dGhvclwiOiBcIkF1dG9yXCIsXG4gIFwibWV0YS5jYXRlZ29yaWVzXCI6IFwiR8OpbmVyb1wiLFxuICBcInRpdGxlTWV0YS50eXBlXCI6IFwiVGlwbzoge3R5cGV9XCIsXG4gIFwidGl0bGVNZXRhLmNoYXB0ZXJzXCI6IFwiQ2Fww610dWxvczoge2NvdW50fVwiLFxuICBcInRpdGxlTWV0YS5sYW5nXCI6IFwiSWRpb21hOiB7bGFuZ31cIixcbiAgXCJlcnJvci5rZXl3b3JkUmVxdWlyZWRcIjogXCJJbnRyb2R1Y2UgdW5hIHBhbGFicmEgY2xhdmVcIixcbiAgXCJlcnJvci5jb21pY0lkUmVxdWlyZWRcIjogXCJjb21pY0lkIGVzIG9ibGlnYXRvcmlvXCIsXG4gIFwiZXJyb3Iubm9FcGlzb2Rlc1wiOiBcIk5vIGhheSBlcGlzb2Rpb3NcIixcbiAgXCJlcnJvci5yMThCbG9ja2VkXCI6XG4gICAgXCJFc3RlIHTDrXR1bG8gZXMgY29udGVuaWRvIGFkdWx0by4gQWN0aXZhIFIxOCBlbiBsYSBjb25maWd1cmFjacOzbiBkZWwgcGx1Z2luLlwiLFxufTtcblxuY29uc3QgZnI6IERpY3QgPSB7XG4gIC4uLmVuLFxuICBcInBsdWdpbi5kZXNjcmliZVwiOiBcIlNvdXJjZSB3ZWIgb2ZmaWNpZWxsZSBXRUJUT09OXCIsXG4gIFwic2V0dGluZ3Muc2VjdGlvbi5jb250ZW50XCI6IFwiQ29udGVudVwiLFxuICBcInNldHRpbmdzLmxhbmcubGFiZWxcIjogXCJMYW5ndWUgZGUgcmVjaGVyY2hlIHBhciBkw6lmYXV0XCIsXG4gIFwic2V0dGluZ3MubGFuZy5mb2xsb3dTeXN0ZW1cIjogXCJTdWl2cmUgbGUgc3lzdMOobWUgKGFjdHVlbCA6IHtsYW5nfSlcIixcbiAgXCJzZXR0aW5ncy5yMTgubGFiZWxcIjogXCJBZmZpY2hlciBsZSBjb250ZW51IFIxOCAvIG1hdHVyZVwiLFxuICBcImFkdmFuY2VkU2VhcmNoLnRpdGxlXCI6IFwiUmVjaGVyY2hlIGF2YW5jw6llXCIsXG4gIFwiYWR2YW5jZWRTZWFyY2gubGFuZ1wiOiBcIkxhbmd1ZVwiLFxuICBcIm1ldGEuYXV0aG9yXCI6IFwiQXV0ZXVyXCIsXG4gIFwibWV0YS5jYXRlZ29yaWVzXCI6IFwiR2VucmVcIixcbiAgXCJ0aXRsZU1ldGEudHlwZVwiOiBcIlR5cGUgOiB7dHlwZX1cIixcbiAgXCJ0aXRsZU1ldGEuY2hhcHRlcnNcIjogXCJDaGFwaXRyZXMgOiB7Y291bnR9XCIsXG4gIFwidGl0bGVNZXRhLmxhbmdcIjogXCJMYW5ndWUgOiB7bGFuZ31cIixcbiAgXCJlcnJvci5rZXl3b3JkUmVxdWlyZWRcIjogXCJWZXVpbGxleiBzYWlzaXIgdW4gbW90LWNsw6lcIixcbiAgXCJlcnJvci5jb21pY0lkUmVxdWlyZWRcIjogXCJjb21pY0lkIGVzdCByZXF1aXNcIixcbiAgXCJlcnJvci5ub0VwaXNvZGVzXCI6IFwiQXVjdW4gw6lwaXNvZGUgZGlzcG9uaWJsZVwiLFxuICBcImVycm9yLnIxOEJsb2NrZWRcIjpcbiAgICBcIkNlIHRpdHJlIGVzdCByw6lzZXJ2w6kgYXV4IGFkdWx0ZXMuIEFjdGl2ZXogUjE4IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGR1IHBsdWdpbi5cIixcbn07XG5cbmNvbnN0IGRlOiBEaWN0ID0ge1xuICAuLi5lbixcbiAgXCJwbHVnaW4uZGVzY3JpYmVcIjogXCJPZmZpemllbGxlciBXRUJUT09OLVdlYi1RdWVsbFwiLFxuICBcInNldHRpbmdzLnNlY3Rpb24uY29udGVudFwiOiBcIkluaGFsdFwiLFxuICBcInNldHRpbmdzLmxhbmcubGFiZWxcIjogXCJTdGFuZGFyZC1TdWNoc3ByYWNoZVwiLFxuICBcInNldHRpbmdzLmxhbmcuZm9sbG93U3lzdGVtXCI6IFwiU3lzdGVtIGZvbGdlbiAoYWt0dWVsbDoge2xhbmd9KVwiLFxuICBcInNldHRpbmdzLnIxOC5sYWJlbFwiOiBcIlIxOC0gLyBNYXR1cmUtSW5oYWx0ZSBhbnplaWdlblwiLFxuICBcImFkdmFuY2VkU2VhcmNoLnRpdGxlXCI6IFwiRXJ3ZWl0ZXJ0ZSBTdWNoZVwiLFxuICBcImFkdmFuY2VkU2VhcmNoLmxhbmdcIjogXCJTcHJhY2hlXCIsXG4gIFwibWV0YS5hdXRob3JcIjogXCJBdXRvclwiLFxuICBcIm1ldGEuY2F0ZWdvcmllc1wiOiBcIkdlbnJlXCIsXG4gIFwidGl0bGVNZXRhLnR5cGVcIjogXCJUeXA6IHt0eXBlfVwiLFxuICBcInRpdGxlTWV0YS5jaGFwdGVyc1wiOiBcIkthcGl0ZWw6IHtjb3VudH1cIixcbiAgXCJ0aXRsZU1ldGEubGFuZ1wiOiBcIlNwcmFjaGU6IHtsYW5nfVwiLFxuICBcImVycm9yLmtleXdvcmRSZXF1aXJlZFwiOiBcIkJpdHRlIFN1Y2hiZWdyaWZmIGVpbmdlYmVuXCIsXG4gIFwiZXJyb3IuY29taWNJZFJlcXVpcmVkXCI6IFwiY29taWNJZCBpc3QgZXJmb3JkZXJsaWNoXCIsXG4gIFwiZXJyb3Iubm9FcGlzb2Rlc1wiOiBcIktlaW5lIEVwaXNvZGVuIHZlcmbDvGdiYXJcIixcbiAgXCJlcnJvci5yMThCbG9ja2VkXCI6XG4gICAgXCJEaWVzZXIgVGl0ZWwgaXN0IE1hdHVyZS1JbmhhbHQuIFIxOCBpbiBkZW4gUGx1Z2luLUVpbnN0ZWxsdW5nZW4gYWt0aXZpZXJlbi5cIixcbn07XG5cbmNvbnN0IFRBQkxFUzogUmVjb3JkPFVpTGFuZywgRGljdD4gPSB7XG4gIGVuLFxuICBcInpoLWhhbnRcIjogemhIYW50LFxuICBcInpoLWhhbnNcIjogemhIYW5zLFxuICB0aCxcbiAgaWQsXG4gIGVzLFxuICBmcixcbiAgZGUsXG59O1xuXG4vKiogQXBwIC8g57O757ufIGxvY2FsZSDihpIg5o+S5Lu2IFVJIOivreiogCAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcExvY2FsZVRvVWlMYW5nKGxvY2FsZVJhdzogc3RyaW5nKTogVWlMYW5nIHtcbiAgY29uc3QgcmF3ID0gcmVhZFN0cmluZyhsb2NhbGVSYXcpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG4gIGlmICghcmF3KSByZXR1cm4gXCJlblwiO1xuXG4gIGlmICgoVUlfTEFOR1MgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHJhdykpIHJldHVybiByYXcgYXMgVWlMYW5nO1xuXG4gIC8vIOS4reaWh++8muS4reWbveWkp+mZhiAvIOeugOS9kyDihpIg566A5L2T5paH5qGI77yb5Y+w5riv5r6zIC8g57mB5L2TIOKGkiDnuYHkvZPmlofmoYhcbiAgaWYgKHJhdy5zdGFydHNXaXRoKFwiemhcIikpIHtcbiAgICBpZiAoXG4gICAgICByYXcuaW5jbHVkZXMoXCJoYW50XCIpIHx8XG4gICAgICByYXcuaW5jbHVkZXMoXCJ0d1wiKSB8fFxuICAgICAgcmF3LmluY2x1ZGVzKFwiaGtcIikgfHxcbiAgICAgIHJhdy5pbmNsdWRlcyhcIm1vXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gXCJ6aC1oYW50XCI7XG4gICAgfVxuICAgIC8vIHpoIC8gemgtQ04gLyB6aC1IYW5zIC8gemgtU0cg562JXG4gICAgcmV0dXJuIFwiemgtaGFuc1wiO1xuICB9XG5cbiAgY29uc3QgcHJpbWFyeSA9IHJhdy5zcGxpdChcIi1cIilbMF0gfHwgXCJcIjtcbiAgaWYgKChVSV9MQU5HUyBhcyBzdHJpbmdbXSkuaW5jbHVkZXMocHJpbWFyeSkpIHJldHVybiBwcmltYXJ5IGFzIFVpTGFuZztcblxuICByZXR1cm4gXCJlblwiO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SG9zdExvY2FsZVJhdygpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJyaWRnZSA9IChcbiAgICAgIGdsb2JhbFRoaXMgYXMgeyBicmlkZ2U/OiB7IGNhbGw/OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIH0gfVxuICAgICkuYnJpZGdlO1xuICAgIGlmICh0eXBlb2YgYnJpZGdlPy5jYWxsICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShicmlkZ2UuY2FsbChcImRhcnQuZ2V0TG9jYWxlSW5mb1wiKSk7XG4gICAgY29uc3QgdGV4dCA9IHR5cGVvZiByYXcgPT09IFwic3RyaW5nXCIgPyByYXcgOiBKU09OLnN0cmluZ2lmeShyYXcgPz8gXCJcIik7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBpbmZvID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyB7XG4gICAgICBsb2NhbGU/OiB1bmtub3duO1xuICAgICAgc3lzdGVtTG9jYWxlPzogdW5rbm93bjtcbiAgICAgIGxhbmd1YWdlPzogdW5rbm93bjtcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICByZWFkU3RyaW5nKGluZm8ubG9jYWxlKSB8fFxuICAgICAgcmVhZFN0cmluZyhpbmZvLnN5c3RlbUxvY2FsZSkgfHxcbiAgICAgIHJlYWRTdHJpbmcoaW5mby5sYW5ndWFnZSkgfHxcbiAgICAgIFwiXCJcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG4vKiog5oyJ5a6/5Li7IEFwcCDor63oqIDop6PmnpDmj5Lku7YgVUkg6K+t6KiAICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVVpTGFuZygpOiBQcm9taXNlPFVpTGFuZz4ge1xuICByZXR1cm4gbWFwTG9jYWxlVG9VaUxhbmcoYXdhaXQgZ2V0SG9zdExvY2FsZVJhdygpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHQoXG4gIGxhbmc6IFVpTGFuZyxcbiAga2V5OiBzdHJpbmcsXG4gIHZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGFibGUgPSBUQUJMRVNbbGFuZ10gfHwgZW47XG4gIGxldCB0ZXh0ID0gdGFibGVba2V5XSA/PyBlbltrZXldID8/IGtleTtcbiAgaWYgKHZhcnMpIHtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxceyR7a31cXFxcfWAsIFwiZ1wiKSwgU3RyaW5nKHYpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEluZm9Db250cmFjdCB9IGZyb20gXCJicmVlemUtcGx1Z2luLWtpdFwiO1xuaW1wb3J0IHsgUExVR0lOX0lEIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIFVpTGFuZywgcmVzb2x2ZVVpTGFuZywgdCB9IGZyb20gXCIuL2kxOG5cIjtcblxuZnVuY3Rpb24gYnVpbGRJbmZvKHVpTGFuZzogVWlMYW5nKTogSW5mb0NvbnRyYWN0IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIldFQlRPT05cIixcbiAgICB1dWlkOiBQTFVHSU5fSUQsXG4gICAgaWNvblVybDogXCJodHRwczovL3dlYnRvb25zLXN0YXRpYy5wc3RhdGljLm5ldC9pbWFnZS9mYXZpY29uL2Zhdmljb24uaWNvXCIsXG4gICAgY3JlYXRvcjoge1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGRlc2NyaWJlOiBcIlwiLFxuICAgIH0sXG4gICAgZGVzY3JpYmU6IHQodWlMYW5nLCBcInBsdWdpbi5kZXNjcmliZVwiKSxcbiAgICB2ZXJzaW9uOiBcIjAuMC4zXCIsXG4gICAgaG9tZTogXCJodHRwczovL3d3dy53ZWJ0b29ucy5jb21cIixcbiAgICB1cGRhdGVVcmw6IFwiXCIsXG4gICAgbnBtTmFtZTogXCJicmVlemUtcGx1Z2luLXdlYnRvb25cIixcbiAgICBmdW5jdGlvbjogW10sXG4gIH07XG59XG5cbi8qKiDov5DooYzml7bvvJrmjIkgQXBwIOivreiogOi/lOWbnuaPkuS7tuS/oeaBryAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGx1Z2luSW5mbygpOiBQcm9taXNlPEluZm9Db250cmFjdD4ge1xuICByZXR1cm4gYnVpbGRJbmZvKGF3YWl0IHJlc29sdmVVaUxhbmcoKSk7XG59XG5cbi8qKiDmnoTlu7rkuqfniakgbWFuaWZlc3TvvJrpu5jorqToi7Hmlofmj4/ov7AgKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1hbmlmZXN0SW5mbygpOiBJbmZvQ29udHJhY3Qge1xuICByZXR1cm4gYnVpbGRJbmZvKFwiZW5cIik7XG59XG4iLCIvKipcbiAqIOi/m+eoi+WGhee8k+WtmO+8jOWhnuS7gOS5iOWHuuadpeWwseaYr+S7gOS5iOOAglxuICpcbiAqIEBleGFtcGxlXG4gKiAgIGF3YWl0IGNhY2hlLnNldChcImZvb1wiLCB7IHg6IDEgfSk7XG4gKiAgIGNvbnN0IGdvdCA9IGF3YWl0IGNhY2hlLmdldDx7IHg6IG51bWJlciB9PihcImZvb1wiLCBudWxsKTsgIC8vIHsgeDogMSB9XG4gKi9cbmV4cG9ydCBjb25zdCBjYWNoZSA9IHtcbiAgICBnZXQ6IChrZXksIGZhbGxiYWNrID0gbnVsbCkgPT4gYnJpZGdlLmNhbGwoXCJjYWNoZS5nZXRcIiwga2V5LCBmYWxsYmFjayksXG4gICAgZ2V0U3luYzogKGtleSwgZmFsbGJhY2sgPSBudWxsKSA9PiBicmlkZ2UuY2FsbFN5bmMoXCJjYWNoZS5nZXQuc3luY1wiLCBrZXksIGZhbGxiYWNrKSxcbiAgICBzZXQ6IChrZXksIHZhbHVlKSA9PiBicmlkZ2UuY2FsbChcImNhY2hlLnNldFwiLCBrZXksIHZhbHVlKSxcbiAgICBzZXRTeW5jOiAoa2V5LCB2YWx1ZSkgPT4gYnJpZGdlLmNhbGxTeW5jKFwiY2FjaGUuc2V0LnN5bmNcIiwga2V5LCB2YWx1ZSksXG4gICAgc2V0SWZBYnNlbnQ6IChrZXksIHZhbHVlKSA9PiBicmlkZ2UuY2FsbChcImNhY2hlLnNldF9pZl9hYnNlbnRcIiwga2V5LCB2YWx1ZSksXG4gICAgY29tcGFyZUFuZFNldDogKGtleSwgZXhwZWN0ZWQsIG5leHQpID0+IGJyaWRnZS5jYWxsKFwiY2FjaGUuY29tcGFyZV9hbmRfc2V0XCIsIGtleSwgZXhwZWN0ZWQsIG5leHQpLFxuICAgIGRlbGV0ZTogKGtleSkgPT4gYnJpZGdlLmNhbGwoXCJjYWNoZS5kZWxldGVcIiwga2V5KSxcbn07XG5leHBvcnQgY29uc3QgcGx1Z2luQ29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIOaMgeS5heWMlumFjee9ruWtmOWCqO+8muS/neWtmOmFjee9ruOAglxuICAgICAqICogRGFydCDnq6/kvJrlr7kgdmFsdWUg5bCd6K+VIGBqc29uRGVjb2RlYO+8jFxuICAgICAqIOaIkOWKn+WQjuS7peino+eggeWQjueahOWAvOWtmOWFpSBPYmplY3RCb3jvvIjlpLHotKXliJnlrZjljp/lrZfnrKbkuLLvvInjgIJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiAvLyDlrZjnroDljZXlrZfnrKbkuLIg4oCUIEpTT04g5Y+v6Kej5p6Q77yM5a2Y5Li65a2X56ym5Liy5YC8XG4gICAgICogYXdhaXQgcGx1Z2luQ29uZmlnLnNhdmUoXCJzaXRlXCIsIFwiRUhcIik7XG4gICAgICpcbiAgICAgKiAvLyDlrZggSlNPTiDlr7nosaEg4oCUIGpzb25EZWNvZGUg5ZCO5a2Y5Li6IE1hcFxuICAgICAqIGF3YWl0IHBsdWdpbkNvbmZpZy5zYXZlKFwib3B0c1wiLCAne1wiYVwiOjF9Jyk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGtleSDphY3nva7plK7lkI1cbiAgICAgKiBAcGFyYW0gdmFsdWUg6KaB5L+d5a2Y55qE5YC877yI5Y+v5Lul5pivIEpTT04g5a2X56ym5Liy77yJXG4gICAgICovXG4gICAgc2F2ZTogKGtleSwgdmFsdWUpID0+IGJyaWRnZS5jYWxsKFwic2F2ZV9wbHVnaW5fY29uZmlnXCIsIGtleSwgdmFsdWUpLFxuICAgIC8qKlxuICAgICAqIOaMgeS5heWMlumFjee9ruWtmOWCqO+8muivu+WPlumFjee9ruOAglxuICAgICAqICog6L+U5ZueIGAne1wib2tcIjp0cnVlLFwidmFsdWVcIjouLi59J2Ag5qC85byP55qEIEpTT04g5a2X56ym5Liy44CCXG4gICAgICog6ZyA6KaBIGBKU09OLnBhcnNlYCDkuIDlsYLmi7/liLAgYHsgb2ssIHZhbHVlIH1g77yM5YaN5Y+WIGAudmFsdWVg44CCXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmF3ID0gYXdhaXQgcGx1Z2luQ29uZmlnLmxvYWQoXCJzaXRlXCIsIFwiRUhcIik7XG4gICAgICogY29uc3QgeyB2YWx1ZSB9ID0gSlNPTi5wYXJzZShyYXcpOyAgLy8gXCJFSFwiXG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGtleSDphY3nva7plK7lkI1cbiAgICAgKiBAcGFyYW0gZmFsbGJhY2sg5om+5LiN5Yiw6ZSu5pe255qE6buY6K6k6L+U5Zue5YC877yM6buY6K6k5Li6IFwiXCJcbiAgICAgKi9cbiAgICBsb2FkOiAoa2V5LCBmYWxsYmFjayA9IFwiXCIpID0+IGJyaWRnZS5jYWxsKFwibG9hZF9wbHVnaW5fY29uZmlnXCIsIGtleSwgZmFsbGJhY2spLFxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIGdjOiAoKSA9PiBicmlkZ2UuY2FsbChcInJ1bnRpbWUuZ2NcIiksXG4gICAgaXNUYXNrR3JvdXBDYW5jZWxsZWQ6ICh0YXNrR3JvdXBLZXkpID0+IGJyaWRnZS5jYWxsKFwicnVudGltZS5pc190YXNrX2dyb3VwX2NhbmNlbGxlZFwiLCB0YXNrR3JvdXBLZXkpLFxufTtcbmV4cG9ydCBjb25zdCBvcGVuY2MgPSB7XG4gICAgY29udmVydDogKHRleHQsIGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gYnJpZGdlLmNhbGwoXCJvcGVuY2MuY29udmVydFwiLCB7IHRleHQsIGNvbmZpZyB9KTtcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBmbHV0dGVyVG9vbHMgPSB7XG4gICAgZ2V0QXBwVmVyc2lvbjogKCkgPT4gYnJpZGdlLmNhbGwoXCJkYXJ0LmdldEFwcFZlcnNpb25cIiksXG4gICAgc2hvd1RvYXN0OiAob3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gYnJpZGdlLmNhbGwoXCJmbHV0dGVyLnNob3dUb2FzdFwiLCBKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b29scy5qcy5tYXAiLCJpbXBvcnQgdHlwZSB7XG4gIENoYXB0ZXJDb250ZW50Q29udHJhY3QsXG4gIENoYXB0ZXJQYWdlLFxuICBDaGFwdGVyUGF5bG9hZCxcbiAgQ2hhcHRlclN1bW1hcnksXG4gIENvbWljRGV0YWlsQ29udHJhY3QsXG4gIENvbWljRGV0YWlsUGF5bG9hZCxcbiAgQ29taWNMaXN0SXRlbSxcbiAgRmV0Y2hJbWFnZUJ5dGVzUGF5bG9hZCxcbiAgRmV0Y2hJbWFnZUJ5dGVzUmVzdWx0LFxuICBSZWFkU25hcHNob3RDb250cmFjdCxcbiAgUmVhZFNuYXBzaG90UGF5bG9hZCxcbiAgU2VhcmNoQ29taWNQYXlsb2FkLFxuICBTZWFyY2hSZXN1bHRDb250cmFjdCxcbiAgU2V0dGluZ3NCdW5kbGVDb250cmFjdCxcbiAgU3RyaW5nTWFwLFxufSBmcm9tIFwiYnJlZXplLXBsdWdpbi1raXRcIjtcbmltcG9ydCB7IHBsdWdpbkNvbmZpZywgcnVudGltZSB9IGZyb20gXCJicmVlemUtcGx1Z2luLWtpdFwiO1xuaW1wb3J0IHtcbiAgTU9CSUxFX0JBU0UsXG4gIE5PVF9GT1VORF9JTUFHRV9VUkwsXG4gIFBDX0JBU0UsXG4gIFBMVUdJTl9JRCxcbiAgV0VCVE9PTl9SRUZFUkVSLFxuICBjcmVhdGVBY3Rpb25JdGVtLFxuICBjcmVhdGVJbWFnZSxcbiAgY3JlYXRlUGFnaW5nLFxuICByZWFkU3RyaW5nLFxuICB0b1N0cmluZ01hcCxcbiAgdHJpbVRyYWlsaW5nLFxufSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgVWlMYW5nLFxuICBnZXRIb3N0TG9jYWxlUmF3LFxuICByZXNvbHZlVWlMYW5nLFxuICB0LFxufSBmcm9tIFwiLi9pMThuXCI7XG5cbmV4cG9ydCB0eXBlIFdlYnRvb25UeXBlID0gXCJ3ZWJ0b29uXCIgfCBcImNhbnZhc1wiO1xuXG5leHBvcnQgdHlwZSBDb21pY0lkUGFydHMgPSB7XG4gIHRpdGxlTm86IHN0cmluZztcbiAgdHlwZTogV2VidG9vblR5cGU7XG4gIGxhbmc6IHN0cmluZztcbiAgaHJlZjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgV2VidG9vbkVwaXNvZGUgPSB7XG4gIGVwaXNvZGVObzogbnVtYmVyO1xuICBlcGlzb2RlVGl0bGU6IHN0cmluZztcbiAgdmlld2VyTGluazogc3RyaW5nO1xuICB0aHVtYm5haWw/OiBzdHJpbmc7XG4gIGV4cG9zdXJlRGF0ZU1pbGxpcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFdlYnRvb25JbWFnZSA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHNvcnRPcmRlcj86IG51bWJlcjtcbn07XG5cbi8qKiDkuI4gd3d3LndlYnRvb25zLmNvbSDor63oqIDliIfmjaLkuIDoh7TvvIjml6DnroDkvZMgLyDml6Xpn6nvvIkgKi9cbmNvbnN0IExBTkdfT1BUSU9OUyA9IFtcbiAgeyBsYWJlbDogXCJFbmdsaXNoXCIsIHZhbHVlOiBcImVuXCIgfSxcbiAgeyBsYWJlbDogXCLkuK3mlocgKOe5gemrlClcIiwgdmFsdWU6IFwiemgtaGFudFwiIH0sXG4gIHsgbGFiZWw6IFwi4Lig4Liy4Lip4Liy4LmE4LiX4LiiXCIsIHZhbHVlOiBcInRoXCIgfSxcbiAgeyBsYWJlbDogXCJJbmRvbmVzaWFcIiwgdmFsdWU6IFwiaWRcIiB9LFxuICB7IGxhYmVsOiBcIkVzcGHDsW9sXCIsIHZhbHVlOiBcImVzXCIgfSxcbiAgeyBsYWJlbDogXCJGcmFuw6dhaXNcIiwgdmFsdWU6IFwiZnJcIiB9LFxuICB7IGxhYmVsOiBcIkRldXRzY2hcIiwgdmFsdWU6IFwiZGVcIiB9LFxuXSBhcyBjb25zdDtcblxuY29uc3QgU1VQUE9SVEVEX0xBTkdTID0gbmV3IFNldChMQU5HX09QVElPTlMubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSk7XG5jb25zdCBERUZBVUxUX0xBTkcgPSBcImVuXCI7XG4vKiog6K6+572u6aG577yaYXV0byA9IOacquaJi+WKqOaMh+Wumu+8jOi3n+maj+WQjuWPsOivreiogCAqL1xuY29uc3QgTEFOR19BVVRPID0gXCJhdXRvXCI7XG5cbmNvbnN0IERFU0tUT1BfVUEgPVxuICBcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTUuMC4wLjAgU2FmYXJpLzUzNy4zNlwiO1xuY29uc3QgTU9CSUxFX1VBID0gXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IE1vYmlsZSkgQXBwbGVXZWJLaXQvNTM3LjM2XCI7XG5cbnR5cGUgUmVxdWVzdE9wdHMgPSB7XG4gIGFsbG93UjE4PzogYm9vbGVhbjtcbiAgdWlMYW5nPzogVWlMYW5nO1xufTtcblxuZnVuY3Rpb24gYnVpbGRDb29raWUoYWxsb3dSMTg6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAvLyBUYWNoaXlvbWkgLyDlrpjmlrkgV2Vi77yaYWdlR2F0ZVBhc3Mg5o6n5Yi25oiQ5Lq65YaF5a656K6/6ZeuXG4gIHJldHVybiBbXG4gICAgYGFnZUdhdGVQYXNzPSR7YWxsb3dSMTggPyBcInRydWVcIiA6IFwiZmFsc2VcIn1gLFxuICAgIFwibmVlZEdEUFI9ZmFsc2VcIixcbiAgXS5qb2luKFwiOyBcIik7XG59XG5cbmZ1bmN0aW9uIGRlc2t0b3BIZWFkZXJzKGFsbG93UjE4ID0gZmFsc2UpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBcIlVzZXItQWdlbnRcIjogREVTS1RPUF9VQSxcbiAgICBSZWZlcmVyOiBXRUJUT09OX1JFRkVSRVIsXG4gICAgXCJBY2NlcHQtTGFuZ3VhZ2VcIjogXCJlbi1VUyxlbjtxPTAuOVwiLFxuICAgIENvb2tpZTogYnVpbGRDb29raWUoYWxsb3dSMTgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBtb2JpbGVIZWFkZXJzKGFsbG93UjE4ID0gZmFsc2UpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBcIlVzZXItQWdlbnRcIjogTU9CSUxFX1VBLFxuICAgIFJlZmVyZXI6IFdFQlRPT05fUkVGRVJFUixcbiAgICBcIkFjY2VwdC1MYW5ndWFnZVwiOiBcImVuLVVTLGVuO3E9MC45XCIsXG4gICAgQ29va2llOiBidWlsZENvb2tpZShhbGxvd1IxOCksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVGV4dChcbiAgdXJsOiBzdHJpbmcsXG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIHRpbWVvdXRNcyA9IDIwMDAwLFxuICB1aUxhbmc6IFVpTGFuZyA9IFwiZW5cIixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICBoZWFkZXJzLFxuICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aW1lb3V0TXMpLFxuICB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3IuaHR0cFwiLCB7IHN0YXR1czogcmVzLnN0YXR1cywgdXJsIH0pKTtcbiAgfVxuICByZXR1cm4gcmVzLnRleHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hKc29uPFQgPSB1bmtub3duPihcbiAgdXJsOiBzdHJpbmcsXG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIHRpbWVvdXRNcyA9IDIwMDAwLFxuICB1aUxhbmc6IFVpTGFuZyA9IFwiZW5cIixcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB0ZXh0ID0gYXdhaXQgZmV0Y2hUZXh0KHVybCwgaGVhZGVycywgdGltZW91dE1zLCB1aUxhbmcpO1xuICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KSBhcyBUO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkUjE4UHJlZmVyZW5jZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBwbHVnaW5Db25maWcubG9hZChcImNvbnRlbnQucjE4XCIsIFwiXCIpO1xuICAgIGlmICghcmF3KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIHsgdmFsdWU/OiB1bmtub3duIH07XG4gICAgcmV0dXJuIHBhcnNlZC52YWx1ZSA9PT0gdHJ1ZSB8fCBwYXJzZWQudmFsdWUgPT09IFwidHJ1ZVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIOaQnOe0oue7k+aenCAvIOivpuaDhSBIVE1MIOeyl+WIpOaYr+WQpiBtYXR1cmUgKi9cbmZ1bmN0aW9uIGRldGVjdE1hdHVyZUZyb21Ob2RlKCRlbDoge1xuICBmaW5kOiAoczogc3RyaW5nKSA9PiB7IGxlbmd0aDogbnVtYmVyIH07XG4gIGF0dHI6IChzOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaHRtbDogKCkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn0pOiBib29sZWFuIHtcbiAgaWYgKCRlbC5maW5kKFwiLmljb19hZ2UxOSwgLmFnZTE5LCAuaWNvX21hdHVyZSwgLm1hdHVyZVwiKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgY2xzID0gcmVhZFN0cmluZygkZWwuYXR0cihcImNsYXNzXCIpKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoY2xzLmluY2x1ZGVzKFwiYWdlMTlcIikgfHwgY2xzLmluY2x1ZGVzKFwibWF0dXJlXCIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgaHRtbCA9IHJlYWRTdHJpbmcoJGVsLmh0bWwoKSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoXG4gICAgaHRtbC5pbmNsdWRlcyhcImljb19hZ2UxOVwiKSB8fFxuICAgIGh0bWwuaW5jbHVkZXMoXCJhZ2UxOVwiKSB8fFxuICAgIGh0bWwuaW5jbHVkZXMoXCJncmFkZTE5XCIpIHx8XG4gICAgaHRtbC5pbmNsdWRlcyhcIm1hdHVyZVwiKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGRldGVjdE1hdHVyZUZyb21EZXRhaWxIdG1sKGh0bWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlciA9IGh0bWwudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChcbiAgICBsb3dlci5pbmNsdWRlcyhcImljb19hZ2UxOVwiKSB8fFxuICAgIGxvd2VyLmluY2x1ZGVzKFwiYWdlZ2F0ZVwiKSB8fFxuICAgIGxvd2VyLmluY2x1ZGVzKFwiYWdlX2dhdGVcIikgfHxcbiAgICBsb3dlci5pbmNsdWRlcyhcIm1hdHVyZVwiKSB8fFxuICAgIC9ncmFkZVxccypbPTpdXFxzKltcIiddPzE5Ly50ZXN0KGxvd2VyKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1N1cHBvcnRlZExhbmcobGFuZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBTVVBQT1JURURfTEFOR1MuaGFzKGxhbmcgYXMgKHR5cGVvZiBMQU5HX09QVElPTlMpW251bWJlcl1bXCJ2YWx1ZVwiXSk7XG59XG5cbi8qKiDmiorlrr/kuLsgLyDns7vnu58gbG9jYWxlIOaYoOWwhOWIsCBXZWJ0b29uIGNvbnRlbnQtbGFuZ3VhZ2UgKi9cbmZ1bmN0aW9uIG1hcExvY2FsZVRvV2VidG9vbkxhbmcobG9jYWxlUmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByYXcgPSByZWFkU3RyaW5nKGxvY2FsZVJhdykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIFwiLVwiKTtcbiAgaWYgKCFyYXcpIHJldHVybiBERUZBVUxUX0xBTkc7XG5cbiAgLy8g55u05o6l5ZG95LitIGNvbnRlbnQtbGFuZ3VhZ2VcbiAgaWYgKGlzU3VwcG9ydGVkTGFuZyhyYXcpKSByZXR1cm4gcmF3O1xuXG4gIC8vIHpoLVRXIC8gemgtSEsgLyB6aC1IYW50KiDihpIg57mB5L2T77yb566A5L2T56uZ5rKh5pyJ5a+55bqU6K+t6KiA77yM5Zue6YCA57mB5L2TXG4gIGlmIChyYXcuc3RhcnRzV2l0aChcInpoXCIpKSB7XG4gICAgaWYgKFxuICAgICAgcmF3LmluY2x1ZGVzKFwiaGFudFwiKSB8fFxuICAgICAgcmF3LmluY2x1ZGVzKFwidHdcIikgfHxcbiAgICAgIHJhdy5pbmNsdWRlcyhcImhrXCIpIHx8XG4gICAgICByYXcuaW5jbHVkZXMoXCJtb1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIFwiemgtaGFudFwiO1xuICAgIH1cbiAgICAvLyB6aC1DTiAvIHpoLUhhbnMg562JXG4gICAgcmV0dXJuIFwiemgtaGFudFwiO1xuICB9XG5cbiAgY29uc3QgcHJpbWFyeSA9IHJhdy5zcGxpdChcIi1cIilbMF0gfHwgXCJcIjtcbiAgaWYgKGlzU3VwcG9ydGVkTGFuZyhwcmltYXJ5KSkgcmV0dXJuIHByaW1hcnk7XG5cbiAgcmV0dXJuIERFRkFVTFRfTEFORztcbn1cblxuLyoqIOaQnOe0oueUqCBjb250ZW50LWxhbmd1YWdl77ya5pyq6K6+572u5YiZ55So5a6/5Li7IGxvY2FsZSDmmKDlsIQgKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMb2NhbGVMYW5nKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGdldEhvc3RMb2NhbGVSYXcoKTtcbiAgaWYgKCFyYXcpIHJldHVybiBERUZBVUxUX0xBTkc7XG4gIHJldHVybiBtYXBMb2NhbGVUb1dlYnRvb25MYW5nKHJhdyk7XG59XG5cbi8qKiDor7vlj5borr7nva7ph4znmoTjgIzpu5jorqTmkJzntKLor63oqIDjgI3ljp/lp4vlgLzvvIhhdXRvIC8g5YW35L2T6K+t6KiA77yJICovXG5hc3luYyBmdW5jdGlvbiBsb2FkTGFuZ1ByZWZlcmVuY2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBwbHVnaW5Db25maWcubG9hZChcImNvbnRlbnQubGFuZ1wiLCBcIlwiKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuIExBTkdfQVVUTztcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgeyB2YWx1ZT86IHVua25vd24gfTtcbiAgICBjb25zdCBsYW5nID0gcmVhZFN0cmluZyhwYXJzZWQudmFsdWUpO1xuICAgIGlmICghbGFuZyB8fCBsYW5nID09PSBMQU5HX0FVVE8pIHJldHVybiBMQU5HX0FVVE87XG4gICAgaWYgKGlzU3VwcG9ydGVkTGFuZyhsYW5nKSkgcmV0dXJuIGxhbmc7XG4gICAgcmV0dXJuIExBTkdfQVVUTztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIExBTkdfQVVUTztcbiAgfVxufVxuXG4vKipcbiAqIOino+aekOWunumZheeUqOS6juaQnOe0oueahOivreiogO+8mlxuICogMS4g55So5oi35Zyo6K6+572u5Lit5oyH5a6a5LqG5YW35L2T6K+t6KiAIOKGkiDnlKjor6Xor63oqIBcbiAqIDIuIOacquiuvue9riAvIGF1dG8g4oaSIOeUqOWuv+S4u+acrOWcsOWMluS/oeaBr+aYoOWwhFxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2VhcmNoTGFuZygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcmVmID0gYXdhaXQgbG9hZExhbmdQcmVmZXJlbmNlKCk7XG4gIGlmIChwcmVmICE9PSBMQU5HX0FVVE8gJiYgaXNTdXBwb3J0ZWRMYW5nKHByZWYpKSByZXR1cm4gcHJlZjtcbiAgcmV0dXJuIHJlc29sdmVMb2NhbGVMYW5nKCk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUNvbWljSWQocGFydHM6IENvbWljSWRQYXJ0cyk6IHN0cmluZyB7XG4gIGNvbnN0IGhyZWYgPSBwYXJ0cy5ocmVmIHx8IFwiXCI7XG4gIHJldHVybiBbcGFydHMubGFuZywgcGFydHMudHlwZSwgcGFydHMudGl0bGVObywgaHJlZl1cbiAgICAubWFwKChzKSA9PiBlbmNvZGVVUklDb21wb25lbnQocykpXG4gICAgLmpvaW4oXCJ8XCIpO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVDb21pY0lkKGNvbWljSWQ6IHN0cmluZywgZmFsbGJhY2tMYW5nID0gREVGQVVMVF9MQU5HKTogQ29taWNJZFBhcnRzIHtcbiAgY29uc3QgcmF3ID0gcmVhZFN0cmluZyhjb21pY0lkKTtcbiAgaWYgKCFyYXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb21pY0lkIOS4jeiDveS4uuepulwiKTtcbiAgfVxuXG4gIGlmIChyYXcuaW5jbHVkZXMoXCJ8XCIpKSB7XG4gICAgY29uc3Qgc2VncyA9IHJhdy5zcGxpdChcInxcIikubWFwKChzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHMpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGxhbmcgPSBzZWdzWzBdIHx8IGZhbGxiYWNrTGFuZztcbiAgICBjb25zdCB0eXBlID0gKHNlZ3NbMV0gPT09IFwiY2FudmFzXCIgPyBcImNhbnZhc1wiIDogXCJ3ZWJ0b29uXCIpIGFzIFdlYnRvb25UeXBlO1xuICAgIGNvbnN0IHRpdGxlTm8gPSBzZWdzWzJdIHx8IFwiXCI7XG4gICAgY29uc3QgaHJlZiA9IHNlZ3NbM10gfHwgXCJcIjtcbiAgICBpZiAoIXRpdGxlTm8pIHRocm93IG5ldyBFcnJvcihg5peg5pWIIGNvbWljSWQ6ICR7Y29taWNJZH1gKTtcbiAgICByZXR1cm4geyBsYW5nLCB0eXBlLCB0aXRsZU5vLCBocmVmIH07XG4gIH1cblxuICAvLyDlhbzlrrnnuq8gdGl0bGVOb1xuICByZXR1cm4ge1xuICAgIGxhbmc6IGZhbGxiYWNrTGFuZyxcbiAgICB0eXBlOiBcIndlYnRvb25cIixcbiAgICB0aXRsZU5vOiByYXcsXG4gICAgaHJlZjogXCJcIixcbiAgfTtcbn1cblxuLyoqXG4gKiDliKTmlq0gT3JpZ2luYWwgLyBDYW52YXPjgIJcbiAqIFBDIOi3r+W+hOWkmuS4uiBgL2NhbnZhcy9g77yM6YOo5YiGIGRlZXAgbGluayDkuLogYC9jaGFsbGVuZ2UvYO+8m1xuICog56e75Yqo56uvIEFQSSDnsbvlnovlkI3kuIDlvovnlKggYGNhbnZhc2DjgIJcbiAqL1xuZnVuY3Rpb24gaW5mZXJUeXBlKGhyZWY6IHN0cmluZyk6IFdlYnRvb25UeXBlIHtcbiAgY29uc3QgcyA9IHJlYWRTdHJpbmcoaHJlZikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFxuICAgIHMuaW5jbHVkZXMoXCIvY2FudmFzL1wiKSB8fFxuICAgIHMuaW5jbHVkZXMoXCIvY2hhbGxlbmdlL1wiKSB8fFxuICAgIHMuaW5jbHVkZXMoXCJlcGlzb2RlbGlzdC9jaGFsbGVuZ2VcIikgfHxcbiAgICBzLmluY2x1ZGVzKFwidHlwZT1jaGFsbGVuZ2VcIikgfHxcbiAgICBzLmluY2x1ZGVzKFwidHlwZT1jYW52YXNcIilcbiAgKSB7XG4gICAgcmV0dXJuIFwiY2FudmFzXCI7XG4gIH1cbiAgcmV0dXJuIFwid2VidG9vblwiO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVIcmVmKGhyZWY6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHMgPSByZWFkU3RyaW5nKGhyZWYpO1xuICBpZiAoIXMpIHJldHVybiBcIlwiO1xuICBpZiAocy5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSB8fCBzLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkgcmV0dXJuIHM7XG4gIGlmIChzLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gYCR7UENfQkFTRX0ke3N9YDtcbiAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZpZXdlclVybCh2aWV3ZXJMaW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzID0gcmVhZFN0cmluZyh2aWV3ZXJMaW5rKTtcbiAgaWYgKCFzKSByZXR1cm4gXCJcIjtcbiAgaWYgKHMuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHJldHVybiBzO1xuICBpZiAocy5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIGAke01PQklMRV9CQVNFfSR7c31gO1xuICByZXR1cm4gYCR7TU9CSUxFX0JBU0V9LyR7c31gO1xufVxuXG5mdW5jdGlvbiBsaXN0VXJsRnJvbVZpZXdlcih2aWV3ZXJMaW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmdWxsID0gbm9ybWFsaXplVmlld2VyVXJsKHZpZXdlckxpbmspO1xuICBpZiAoIWZ1bGwpIHJldHVybiBcIlwiO1xuICB0cnkge1xuICAgIGNvbnN0IHUgPSBuZXcgVVJMKGZ1bGwpO1xuICAgIGNvbnN0IHBhcnRzID0gdS5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIC8vIGVuIC8gZmFudGFzeSAvIHNsdWcgLyBlcC14eHggLyB2aWV3ZXJcbiAgICAvLyBlbiAvIGNoYWxsZW5nZSAvIHNsdWcgLyBlcC14eHggLyB2aWV3ZXJcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDMpIHtcbiAgICAgIGNvbnN0IHRpdGxlTm8gPSB1LnNlYXJjaFBhcmFtcy5nZXQoXCJ0aXRsZV9ub1wiKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGAke1BDX0JBU0V9LyR7cGFydHNbMF19LyR7cGFydHNbMV19LyR7cGFydHNbMl19L2xpc3Q/dGl0bGVfbm89JHt0aXRsZU5vfWA7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gXCJcIjtcbn1cblxuZnVuY3Rpb24gaW1hZ2VGaWxlTmFtZSh1cmw6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF0aCA9IG5ldyBVUkwodXJsKS5wYXRobmFtZTtcbiAgICBjb25zdCBuYW1lID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLnBvcCgpIHx8IFwiXCI7XG4gICAgaWYgKG5hbWUpIHJldHVybiBuYW1lO1xuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gYCR7U3RyaW5nKGluZGV4ICsgMSkucGFkU3RhcnQoNCwgXCIwXCIpfS5qcGdgO1xufVxuXG4vKiogbWV0YWRhdGEg54K55Ye777ya5omT5byA5pys5o+S5Lu25pCc57SiICovXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hBY3Rpb24oa2V5d29yZDogc3RyaW5nLCBsYW5nPzogc3RyaW5nKTogU3RyaW5nTWFwIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIm9wZW5TZWFyY2hcIixcbiAgICBwYXlsb2FkOiB7XG4gICAgICBzb3VyY2U6IFBMVUdJTl9JRCxcbiAgICAgIGtleXdvcmQsXG4gICAgICBleHRlcm46IGxhbmcgPyB7IGxhbmcgfSA6IHt9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5Q3JlYXRvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogXCJcIixcbiAgICBuYW1lOiBcIlwiLFxuICAgIGF2YXRhcjoge1xuICAgICAgaWQ6IFwiXCIsXG4gICAgICB1cmw6IFwiXCIsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgcGF0aDogXCJcIixcbiAgICAgIGV4dGVybjoge30sXG4gICAgfSxcbiAgICBvblRhcDoge30sXG4gICAgZXh0ZXJuOiB7fSxcbiAgfTtcbn1cblxuLyoqIOWPr+eCueWHuyBtZXRhZGF0YSDooYzvvIjkvZzogIUgLyDliIbnsbvnrYnvvInvvJtuYW1lIOS4juWQhOmhueWdh+WOu+WwvumDqOepuueZvSAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpY2thYmxlTWV0YWRhdGEoXG4gIHR5cGU6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICB2YWx1ZXM6IHN0cmluZ1tdLFxuICBsYW5nPzogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGxpc3QgPSB2YWx1ZXNcbiAgICAubWFwKCh2KSA9PiB0cmltVHJhaWxpbmcodikudHJpbVN0YXJ0KCkpXG4gICAgLm1hcCgodikgPT4gdi50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICBuYW1lOiB0cmltVHJhaWxpbmcobmFtZSksXG4gICAgdmFsdWU6IGxpc3QubWFwKChpdGVtKSA9PlxuICAgICAgY3JlYXRlQWN0aW9uSXRlbShpdGVtLCBjcmVhdGVTZWFyY2hBY3Rpb24oaXRlbSwgbGFuZykpLFxuICAgICksXG4gIH07XG59XG5cbi8qKiB0aXRsZU1ldGEg5bGV56S66aG577ya5Y675o6J5bC+6YOo56m655m977yM56m65Liy5Lii5byDICovXG5mdW5jdGlvbiBjcmVhdGVUaXRsZU1ldGFJdGVtcyhcbiAgbmFtZXM6IEFycmF5PHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ+LFxuKSB7XG4gIHJldHVybiBuYW1lc1xuICAgIC5tYXAoKG4pID0+IHRyaW1UcmFpbGluZyhuKSlcbiAgICAuZmlsdGVyKChuKSA9PiBuLmxlbmd0aCA+IDApXG4gICAgLm1hcCgobikgPT4gY3JlYXRlQWN0aW9uSXRlbShuKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV2VidG9vbiBBUElcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2ViU2VhcmNoKFxuICBxdWVyeTogc3RyaW5nLFxuICBsYW5nOiBzdHJpbmcsXG4gIHBhZ2UgPSAxLFxuICBvcHRzOiBSZXF1ZXN0T3B0cyA9IHt9LFxuKTogUHJvbWlzZTx7IHJlc3VsdHM6IENvbWljTGlzdEl0ZW1bXTsgaGFzTmV4dDogYm9vbGVhbiB9PiB7XG4gIGNvbnN0IGFsbG93UjE4ID0gQm9vbGVhbihvcHRzLmFsbG93UjE4KTtcbiAgY29uc3QgdWlMYW5nID0gb3B0cy51aUxhbmcgPz8gXCJlblwiO1xuICBjb25zdCB1ID0gbmV3IFVSTChgJHtQQ19CQVNFfS8ke2xhbmd9L3NlYXJjaGApO1xuICB1LnNlYXJjaFBhcmFtcy5zZXQoXCJrZXl3b3JkXCIsIHF1ZXJ5KTtcbiAgdS5zZWFyY2hQYXJhbXMuc2V0KFwicGFnZVwiLCBTdHJpbmcocGFnZSkpO1xuXG4gIGNvbnN0IGh0bWwgPSBhd2FpdCBmZXRjaFRleHQoXG4gICAgdS50b1N0cmluZygpLFxuICAgIGRlc2t0b3BIZWFkZXJzKGFsbG93UjE4KSxcbiAgICAyMDAwMCxcbiAgICB1aUxhbmcsXG4gICk7XG4gIGNvbnN0ICQgPSBCcmVlemVIdG1sLmxvYWQoaHRtbCk7XG4gIGNvbnN0IHJlc3VsdHM6IENvbWljTGlzdEl0ZW1bXSA9IFtdO1xuXG4gICQoXCIud2VidG9vbl9saXN0IGxpIGFcIikuZWFjaCgoXywgZWwpID0+IHtcbiAgICBjb25zdCAkZWwgPSAkKGVsKTtcbiAgICBjb25zdCB0aXRsZSA9IHRyaW1UcmFpbGluZygkZWwuZmluZChcIi50aXRsZVwiKS50ZXh0KCkpLnRyaW0oKTtcbiAgICBjb25zdCBhdXRob3IgPSB0cmltVHJhaWxpbmcoJGVsLmZpbmQoXCIuYXV0aG9yXCIpLnRleHQoKSkudHJpbSgpO1xuICAgIGNvbnN0IGhyZWYgPSBub3JtYWxpemVIcmVmKHJlYWRTdHJpbmcoJGVsLmF0dHIoXCJocmVmXCIpKSk7XG4gICAgY29uc3QgaW1nID0gcmVhZFN0cmluZygkZWwuZmluZChcImltZ1wiKS5hdHRyKFwic3JjXCIpKTtcbiAgICBjb25zdCB0aXRsZU5vID0gcmVhZFN0cmluZygkZWwuYXR0cihcImRhdGEtdGl0bGUtbm9cIikpO1xuICAgIGlmICghdGl0bGUgfHwgIXRpdGxlTm8pIHJldHVybjtcblxuICAgIGNvbnN0IG1hdHVyZSA9IGRldGVjdE1hdHVyZUZyb21Ob2RlKCRlbCk7XG4gICAgaWYgKG1hdHVyZSAmJiAhYWxsb3dSMTgpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBpbmZlclR5cGUoaHJlZik7XG4gICAgY29uc3QgY29taWNJZCA9IGVuY29kZUNvbWljSWQoeyB0aXRsZU5vLCB0eXBlLCBsYW5nLCBocmVmIH0pO1xuICAgIGNvbnN0IGNvdmVyUGF0aCA9IGBjb21pYy8ke3RpdGxlTm99L2NvdmVyLmpwZ2A7XG5cbiAgICByZXN1bHRzLnB1c2goe1xuICAgICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgICBpZDogY29taWNJZCxcbiAgICAgIHRpdGxlLFxuICAgICAgc3VidGl0bGU6IGF1dGhvcixcbiAgICAgIGZpbmlzaGVkOiBmYWxzZSxcbiAgICAgIGxpa2VzQ291bnQ6IDAsXG4gICAgICB2aWV3c0NvdW50OiAwLFxuICAgICAgdXBkYXRlZEF0OiBcIlwiLFxuICAgICAgY292ZXI6IGNyZWF0ZUltYWdlKHtcbiAgICAgICAgaWQ6IHRpdGxlTm8sXG4gICAgICAgIHVybDogaW1nIHx8IE5PVF9GT1VORF9JTUFHRV9VUkwsXG4gICAgICAgIG5hbWU6IFwiY292ZXIuanBnXCIsXG4gICAgICAgIHBhdGg6IGNvdmVyUGF0aCxcbiAgICAgICAgZXh0ZXJuOiB7fSxcbiAgICAgIH0pLFxuICAgICAgbWV0YWRhdGE6IFtcbiAgICAgICAgY3JlYXRlQ2xpY2thYmxlTWV0YWRhdGEoXG4gICAgICAgICAgXCJhdXRob3JcIixcbiAgICAgICAgICB0KHVpTGFuZywgXCJtZXRhLmF1dGhvclwiKSxcbiAgICAgICAgICBhdXRob3IgPyBbYXV0aG9yXSA6IFtdLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICksXG4gICAgICBdLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgTm9uTnVsbGFibGU8dHlwZW9mIGl0ZW0+ID0+IGl0ZW0gIT0gbnVsbCksXG4gICAgICByYXc6IHsgdGl0bGUsIGF1dGhvciwgaHJlZiwgaW1nLCB0aXRsZU5vLCB0eXBlLCBsYW5nLCBtYXR1cmUgfSxcbiAgICAgIGV4dGVybjogeyBocmVmLCB0eXBlLCBsYW5nLCB0aXRsZU5vLCBtYXR1cmUgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFzTmV4dCA9ICQoXCJhLnBhZ2luYXRpb25bYXJpYS1jdXJyZW50PXRydWVdICsgYVwiKS5sZW5ndGggPiAwO1xuICByZXR1cm4geyByZXN1bHRzLCBoYXNOZXh0IH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWJEZXRhaWwoXG4gIGRldGFpbFVybDogc3RyaW5nLFxuICBvcHRzOiBSZXF1ZXN0T3B0cyA9IHt9LFxuKTogUHJvbWlzZTx7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBnZW5yZTogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHRodW1ibmFpbDogc3RyaW5nO1xuICB0aXRsZU5vOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBtYXR1cmU6IGJvb2xlYW47XG59PiB7XG4gIGNvbnN0IGFsbG93UjE4ID0gQm9vbGVhbihvcHRzLmFsbG93UjE4KTtcbiAgY29uc3QgdWlMYW5nID0gb3B0cy51aUxhbmcgPz8gXCJlblwiO1xuICBjb25zdCB1cmwgPSBub3JtYWxpemVIcmVmKGRldGFpbFVybCk7XG4gIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3IuZGV0YWlsVXJsRW1wdHlcIikpO1xuXG4gIGNvbnN0IGh0bWwgPSBhd2FpdCBmZXRjaFRleHQodXJsLCBkZXNrdG9wSGVhZGVycyhhbGxvd1IxOCksIDIwMDAwLCB1aUxhbmcpO1xuICBjb25zdCBtYXR1cmUgPSBkZXRlY3RNYXR1cmVGcm9tRGV0YWlsSHRtbChodG1sKTtcbiAgaWYgKG1hdHVyZSAmJiAhYWxsb3dSMTgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3IucjE4QmxvY2tlZFwiKSk7XG4gIH1cblxuICBjb25zdCAkID0gQnJlZXplSHRtbC5sb2FkKGh0bWwpO1xuXG4gIGNvbnN0IHRpdGxlID0gdHJpbVRyYWlsaW5nKCQoXCJoMS5zdWJqLCBoMy5zdWJqXCIpLmZpcnN0KCkudGV4dCgpKS50cmltKCk7XG4gIGNvbnN0IGF1dGhvciA9IHRyaW1UcmFpbGluZyhcbiAgICAkKFwiLmRldGFpbF9oZWFkZXIgLmluZm8gLmF1dGhvcl9hcmVhXCIpXG4gICAgICAuZmlyc3QoKVxuICAgICAgLnRleHQoKVxuICAgICAgLnJlcGxhY2UoL2F1dGhvciBpbmZvL2dpLCBcIlwiKSxcbiAgKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICAgIC50cmltKCk7XG4gIGNvbnN0IGdlbnJlczogc3RyaW5nW10gPSBbXTtcbiAgJChcIi5kZXRhaWxfaGVhZGVyIC5pbmZvIC5nZW5yZVwiKS5lYWNoKChfLCBlbCkgPT4ge1xuICAgIGNvbnN0IGcgPSB0cmltVHJhaWxpbmcoJChlbCkudGV4dCgpKS50cmltKCk7XG4gICAgaWYgKGcpIGdlbnJlcy5wdXNoKGcpO1xuICB9KTtcbiAgY29uc3Qgc3VtbWFyeSA9XG4gICAgdHJpbVRyYWlsaW5nKCQoXCIjX2FzaWRlRGV0YWlsIHAuc3VtbWFyeVwiKS50ZXh0KCkpLnRyaW0oKSB8fFxuICAgIHRyaW1UcmFpbGluZygkKFwiLmRldGFpbF9oZWFkZXIgcC5zdW1tYXJ5XCIpLnRleHQoKSkudHJpbSgpO1xuICBjb25zdCB0aHVtYm5haWwgPVxuICAgIHJlYWRTdHJpbmcoJChcIi5kZXRhaWxfaGVhZGVyIC50aG1iIGltZ1wiKS5hdHRyKFwic3JjXCIpKSB8fFxuICAgIHJlYWRTdHJpbmcoJCgnaGVhZCBtZXRhW3Byb3BlcnR5PVwib2c6aW1hZ2VcIl0nKS5hdHRyKFwiY29udGVudFwiKSk7XG5cbiAgbGV0IHRpdGxlTm8gPSBcIlwiO1xuICB0cnkge1xuICAgIHRpdGxlTm8gPSBuZXcgVVJMKHVybCkuc2VhcmNoUGFyYW1zLmdldChcInRpdGxlX25vXCIpIHx8IFwiXCI7XG4gIH0gY2F0Y2gge1xuICAgIHRpdGxlTm8gPSBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aXRsZSxcbiAgICBhdXRob3IsXG4gICAgZ2VucmU6IGdlbnJlcy5qb2luKFwiLCBcIiksXG4gICAgc3VtbWFyeSxcbiAgICB0aHVtYm5haWwsXG4gICAgdGl0bGVObyxcbiAgICB1cmwsXG4gICAgbWF0dXJlLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2ViRXBpc29kZUxpc3QoXG4gIHRpdGxlTm86IHN0cmluZyxcbiAgdHlwZTogV2VidG9vblR5cGUgPSBcIndlYnRvb25cIixcbiAgbGFuZyA9IERFRkFVTFRfTEFORyxcbiAgb3B0czogUmVxdWVzdE9wdHMgPSB7fSxcbik6IFByb21pc2U8V2VidG9vbkVwaXNvZGVbXT4ge1xuICBjb25zdCBhbGxvd1IxOCA9IEJvb2xlYW4ob3B0cy5hbGxvd1IxOCk7XG4gIGNvbnN0IHVpTGFuZyA9IG9wdHMudWlMYW5nID8/IFwiZW5cIjtcbiAgY29uc3QgdSA9IG5ldyBVUkwoYCR7TU9CSUxFX0JBU0V9L2FwaS92MS8ke3R5cGV9LyR7dGl0bGVOb30vZXBpc29kZXNgKTtcbiAgdS5zZWFyY2hQYXJhbXMuc2V0KFwicGFnZVNpemVcIiwgXCI5OTk5OVwiKTtcbiAgaWYgKHR5cGUgPT09IFwiY2FudmFzXCIpIHtcbiAgICB1LnNlYXJjaFBhcmFtcy5zZXQoXCJyZWFkaW5nTGFuZ3VhZ2VDb2RlXCIsIGxhbmcpO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbjx7XG4gICAgcmVzdWx0PzogeyBlcGlzb2RlTGlzdD86IFdlYnRvb25FcGlzb2RlW10gfTtcbiAgfT4odS50b1N0cmluZygpLCBtb2JpbGVIZWFkZXJzKGFsbG93UjE4KSwgMjAwMDAsIHVpTGFuZyk7XG5cbiAgY29uc3QgbGlzdCA9IGRhdGE/LnJlc3VsdD8uZXBpc29kZUxpc3Q7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGxpc3QpID8gbGlzdCA6IFtdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2ViQ2hhcHRlclBhZ2VzKFxuICB2aWV3ZXJMaW5rOiBzdHJpbmcsXG4gIG9wdHM6IFJlcXVlc3RPcHRzID0ge30sXG4pOiBQcm9taXNlPHsgdmlld2VyVXJsOiBzdHJpbmc7IGltYWdlTGlzdDogV2VidG9vbkltYWdlW10gfT4ge1xuICBjb25zdCBhbGxvd1IxOCA9IEJvb2xlYW4ob3B0cy5hbGxvd1IxOCk7XG4gIGNvbnN0IHVpTGFuZyA9IG9wdHMudWlMYW5nID8/IFwiZW5cIjtcbiAgY29uc3Qgdmlld2VyVXJsID0gbm9ybWFsaXplVmlld2VyVXJsKHZpZXdlckxpbmspO1xuICBpZiAoIXZpZXdlclVybCkgdGhyb3cgbmV3IEVycm9yKHQodWlMYW5nLCBcImVycm9yLm5vVmlld2VyTGlua1wiLCB7IGlkOiBcIj9cIiB9KSk7XG5cbiAgY29uc3QgaHRtbCA9IGF3YWl0IGZldGNoVGV4dChcbiAgICB2aWV3ZXJVcmwsXG4gICAgbW9iaWxlSGVhZGVycyhhbGxvd1IxOCksXG4gICAgMjAwMDAsXG4gICAgdWlMYW5nLFxuICApO1xuICBjb25zdCBtYXRjaCA9IGh0bWwubWF0Y2goL3ZhclxccytpbWFnZUxpc3RcXHMqPVxccyooXFxbW1xcc1xcU10qP1xcXSk7Lyk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3Iubm9JbWFnZUxpc3RcIikpO1xuICB9XG5cbiAgLy8gSlMgb2JqZWN0LWxpa2Ug4oaSIEpTT05cbiAgY29uc3QganNvbkxpa2UgPSBtYXRjaFsxXS5yZXBsYWNlKFxuICAgIC8oW3ssXVxccyopKFthLXpBLVpfJF1bYS16QS1aMC05XyRdKilcXHMqOi9nLFxuICAgICckMVwiJDJcIjonLFxuICApO1xuICBjb25zdCBpbWFnZUxpc3QgPSBKU09OLnBhcnNlKGpzb25MaWtlKSBhcyBXZWJ0b29uSW1hZ2VbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGltYWdlTGlzdCkgfHwgaW1hZ2VMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcih0KHVpTGFuZywgXCJlcnJvci5lbXB0eUltYWdlTGlzdFwiKSk7XG4gIH1cblxuICBpbWFnZUxpc3Quc29ydChcbiAgICAoYSwgYikgPT4gTnVtYmVyKGEuc29ydE9yZGVyID8/IDApIC0gTnVtYmVyKGIuc29ydE9yZGVyID8/IDApLFxuICApO1xuXG4gIHJldHVybiB7IHZpZXdlclVybCwgaW1hZ2VMaXN0IH07XG59XG5cbmZ1bmN0aW9uIG1hcEVwaXNvZGVzVG9DaGFwdGVycyhcbiAgZXBpc29kZXM6IFdlYnRvb25FcGlzb2RlW10sXG4gIGNvbWljSWQ6IHN0cmluZyxcbik6IENoYXB0ZXJTdW1tYXJ5W10ge1xuICByZXR1cm4gZXBpc29kZXMubWFwKChlcCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IFN0cmluZyhlcC5lcGlzb2RlTm8pO1xuICAgIGNvbnN0IHZpZXdlckxpbmsgPSByZWFkU3RyaW5nKGVwLnZpZXdlckxpbmspO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHJlcXVlc3RJZDogaWQsXG4gICAgICBsb2dpY2FsS2V5OiBpZCxcbiAgICAgIHN0b3JhZ2VDaGFwdGVySWQ6IGlkLFxuICAgICAgbmFtZTogcmVhZFN0cmluZyhlcC5lcGlzb2RlVGl0bGUpIHx8IGBFcC4gJHtlcC5lcGlzb2RlTm99YCxcbiAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICBleHRlcm46IHtcbiAgICAgICAgY29taWNJZCxcbiAgICAgICAgZXBpc29kZU5vOiBlcC5lcGlzb2RlTm8sXG4gICAgICAgIHZpZXdlckxpbmssXG4gICAgICAgIHRodW1ibmFpbDogZXAudGh1bWJuYWlsID8/IFwiXCIsXG4gICAgICAgIGV4cG9zdXJlRGF0ZU1pbGxpczogZXAuZXhwb3N1cmVEYXRlTWlsbGlzID8/IDAsXG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYWdlc0Zyb21JbWFnZUxpc3QoXG4gIGNvbWljSWQ6IHN0cmluZyxcbiAgY2hhcHRlcklkOiBzdHJpbmcsXG4gIGltYWdlTGlzdDogV2VidG9vbkltYWdlW10sXG4pOiBDaGFwdGVyUGFnZVtdIHtcbiAgcmV0dXJuIGltYWdlTGlzdC5tYXAoKGltZywgaWR4KSA9PiB7XG4gICAgY29uc3QgdXJsID0gcmVhZFN0cmluZyhpbWcudXJsKTtcbiAgICBjb25zdCBuYW1lID0gaW1hZ2VGaWxlTmFtZSh1cmwsIGlkeCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtjaGFwdGVySWR9LXAtJHtpZHh9YCxcbiAgICAgIG5hbWUsXG4gICAgICBwYXRoOiBgY29taWMvJHtjb21pY0lkfS8ke2NoYXB0ZXJJZH0vJHtuYW1lfWAsXG4gICAgICB1cmwsXG4gICAgICBleHRlcm46IHtcbiAgICAgICAgd2lkdGg6IGltZy53aWR0aCA/PyAwLFxuICAgICAgICBoZWlnaHQ6IGltZy5oZWlnaHQgPz8gMCxcbiAgICAgICAgc29ydE9yZGVyOiBpbWcuc29ydE9yZGVyID8/IGlkeCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEZXRhaWxVcmwoXG4gIHBhcnRzOiBDb21pY0lkUGFydHMsXG4gIG9wdHM6IFJlcXVlc3RPcHRzID0ge30sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB1aUxhbmcgPSBvcHRzLnVpTGFuZyA/PyBcImVuXCI7XG4gIGlmIChwYXJ0cy5ocmVmKSByZXR1cm4gbm9ybWFsaXplSHJlZihwYXJ0cy5ocmVmKTtcblxuICAvLyDku47nq6DoioLliJfooajlj43mjqjor6bmg4UgVVJMXG4gIGNvbnN0IGVwaXNvZGVzID0gYXdhaXQgd2ViRXBpc29kZUxpc3QoXG4gICAgcGFydHMudGl0bGVObyxcbiAgICBwYXJ0cy50eXBlLFxuICAgIHBhcnRzLmxhbmcsXG4gICAgb3B0cyxcbiAgKTtcbiAgaWYgKGVwaXNvZGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmcm9tVmlld2VyID0gbGlzdFVybEZyb21WaWV3ZXIoZXBpc29kZXNbMF0udmlld2VyTGluayk7XG4gICAgaWYgKGZyb21WaWV3ZXIpIHJldHVybiBmcm9tVmlld2VyO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIHQodWlMYW5nLCBcImVycm9yLmNhbm5vdFJlc29sdmVEZXRhaWxcIiwgeyB0aXRsZU5vOiBwYXJ0cy50aXRsZU5vIH0pLFxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJyZWV6ZSBmblBhdGhcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoQ29taWMoXG4gIHBheWxvYWQ6IFNlYXJjaENvbWljUGF5bG9hZCA9IHt9LFxuKTogUHJvbWlzZTxTZWFyY2hSZXN1bHRDb250cmFjdD4ge1xuICBjb25zdCB1aUxhbmcgPSBhd2FpdCByZXNvbHZlVWlMYW5nKCk7XG4gIGNvbnN0IGFsbG93UjE4ID0gYXdhaXQgbG9hZFIxOFByZWZlcmVuY2UoKTtcbiAgY29uc3QgZXh0ZXJuID0gdG9TdHJpbmdNYXAocGF5bG9hZC5leHRlcm4pO1xuICBjb25zdCBwYWdlID0gTWF0aC5tYXgoMSwgTnVtYmVyKHBheWxvYWQucGFnZSA/PyAxKSB8fCAxKTtcbiAgY29uc3Qga2V5d29yZCA9IHJlYWRTdHJpbmcocGF5bG9hZC5rZXl3b3JkID8/IGV4dGVybi5rZXl3b3JkKTtcbiAgaWYgKCFrZXl3b3JkKSB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3Iua2V5d29yZFJlcXVpcmVkXCIpKTtcblxuICAvLyDpq5jnuqfmkJzntKIgLyBleHRlcm4g5LyY5YWI77yM5ZCm5YiZ55So6K6+572u6buY6K6k6K+t6KiA77yI5pyq6K6+572u5YiZ6Lef6ZqP5ZCO5Y+w6K+t6KiA77yJXG4gIGNvbnN0IHByZWZlcnJlZCA9IGF3YWl0IHJlc29sdmVTZWFyY2hMYW5nKCk7XG4gIGNvbnN0IGZyb21FeHRlcm4gPSByZWFkU3RyaW5nKGV4dGVybi5sYW5nKTtcbiAgY29uc3QgbGFuZyA9XG4gICAgKGZyb21FeHRlcm4gJiYgaXNTdXBwb3J0ZWRMYW5nKGZyb21FeHRlcm4pID8gZnJvbUV4dGVybiA6IFwiXCIpIHx8XG4gICAgcHJlZmVycmVkIHx8XG4gICAgREVGQVVMVF9MQU5HO1xuXG4gIGNvbnN0IHsgcmVzdWx0cywgaGFzTmV4dCB9ID0gYXdhaXQgd2ViU2VhcmNoKGtleXdvcmQsIGxhbmcsIHBhZ2UsIHtcbiAgICBhbGxvd1IxOCxcbiAgICB1aUxhbmcsXG4gIH0pO1xuICBjb25zdCBwYWdpbmcgPSBjcmVhdGVQYWdpbmcoXG4gICAgcGFnZSxcbiAgICBoYXNOZXh0ID8gcGFnZSArIDEgOiBwYWdlLFxuICAgIHJlc3VsdHMubGVuZ3RoLFxuICAgICFoYXNOZXh0LFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgZXh0ZXJuOiB7IC4uLmV4dGVybiwga2V5d29yZCwgbGFuZywgcGFnZSB9LFxuICAgIHNjaGVtZToge1xuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgdHlwZTogXCJzZWFyY2hSZXN1bHRcIixcbiAgICAgIHNvdXJjZTogUExVR0lOX0lELFxuICAgICAgbGlzdDogXCJjb21pY0dyaWRcIixcbiAgICB9LFxuICAgIGRhdGE6IHsgcGFnaW5nLCBpdGVtczogcmVzdWx0cyB9LFxuICAgIHBhZ2luZyxcbiAgICBpdGVtczogcmVzdWx0cyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbWljRGV0YWlsKFxuICBwYXlsb2FkOiBDb21pY0RldGFpbFBheWxvYWQgPSB7fSxcbik6IFByb21pc2U8Q29taWNEZXRhaWxDb250cmFjdD4ge1xuICBjb25zdCB1aUxhbmcgPSBhd2FpdCByZXNvbHZlVWlMYW5nKCk7XG4gIGNvbnN0IGFsbG93UjE4ID0gYXdhaXQgbG9hZFIxOFByZWZlcmVuY2UoKTtcbiAgY29uc3QgY29taWNJZCA9IHJlYWRTdHJpbmcocGF5bG9hZC5jb21pY0lkKTtcbiAgaWYgKCFjb21pY0lkKSB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3IuY29taWNJZFJlcXVpcmVkXCIpKTtcblxuICBjb25zdCBjb25maWdMYW5nID0gYXdhaXQgcmVzb2x2ZVNlYXJjaExhbmcoKTtcbiAgY29uc3QgcGFydHMgPSBkZWNvZGVDb21pY0lkKGNvbWljSWQsIGNvbmZpZ0xhbmcpO1xuICBjb25zdCBleHRlcm4gPSB0b1N0cmluZ01hcChwYXlsb2FkLmV4dGVybik7XG4gIGNvbnN0IHJlcU9wdHM6IFJlcXVlc3RPcHRzID0geyBhbGxvd1IxOCwgdWlMYW5nIH07XG5cbiAgLy8gZXh0ZXJuIOWPr+imhuebliBocmVmIC8gdHlwZSAvIGxhbmdcbiAgaWYgKHJlYWRTdHJpbmcoZXh0ZXJuLmhyZWYpKSBwYXJ0cy5ocmVmID0gcmVhZFN0cmluZyhleHRlcm4uaHJlZik7XG4gIGlmIChyZWFkU3RyaW5nKGV4dGVybi50eXBlKSA9PT0gXCJjYW52YXNcIikgcGFydHMudHlwZSA9IFwiY2FudmFzXCI7XG4gIGlmIChyZWFkU3RyaW5nKGV4dGVybi5sYW5nKSkgcGFydHMubGFuZyA9IHJlYWRTdHJpbmcoZXh0ZXJuLmxhbmcpO1xuXG4gIGNvbnN0IGRldGFpbFVybCA9IGF3YWl0IHJlc29sdmVEZXRhaWxVcmwocGFydHMsIHJlcU9wdHMpO1xuICBwYXJ0cy5ocmVmID0gZGV0YWlsVXJsO1xuICBwYXJ0cy50eXBlID0gaW5mZXJUeXBlKGRldGFpbFVybCk7XG5cbiAgY29uc3QgW2RldGFpbCwgZXBpc29kZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHdlYkRldGFpbChkZXRhaWxVcmwsIHJlcU9wdHMpLFxuICAgIHdlYkVwaXNvZGVMaXN0KHBhcnRzLnRpdGxlTm8sIHBhcnRzLnR5cGUsIHBhcnRzLmxhbmcsIHJlcU9wdHMpLFxuICBdKTtcblxuICBpZiAoZGV0YWlsLnRpdGxlTm8pIHBhcnRzLnRpdGxlTm8gPSBkZXRhaWwudGl0bGVObztcblxuICBjb25zdCBzdGFibGVJZCA9IGVuY29kZUNvbWljSWQocGFydHMpO1xuICBjb25zdCBjaGFwdGVycyA9IG1hcEVwaXNvZGVzVG9DaGFwdGVycyhlcGlzb2Rlcywgc3RhYmxlSWQpO1xuICBjb25zdCBnZW5yZXMgPSBkZXRhaWwuZ2VucmVcbiAgICA/IGRldGFpbC5nZW5yZVxuICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcbiAgY29uc3QgdHlwZUxhYmVsID0gdChcbiAgICB1aUxhbmcsXG4gICAgcGFydHMudHlwZSA9PT0gXCJjYW52YXNcIiA/IFwidHlwZS5jYW52YXNcIiA6IFwidHlwZS5vcmlnaW5hbFwiLFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgY29taWNJZDogc3RhYmxlSWQsXG4gICAgZXh0ZXJuOiB7XG4gICAgICAuLi5leHRlcm4sXG4gICAgICBocmVmOiBkZXRhaWxVcmwsXG4gICAgICB0eXBlOiBwYXJ0cy50eXBlLFxuICAgICAgbGFuZzogcGFydHMubGFuZyxcbiAgICAgIHRpdGxlTm86IHBhcnRzLnRpdGxlTm8sXG4gICAgICBtYXR1cmU6IGRldGFpbC5tYXR1cmUsXG4gICAgfSxcbiAgICBzY2hlbWU6IHtcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIHR5cGU6IFwiY29taWNEZXRhaWxcIixcbiAgICAgIHNvdXJjZTogUExVR0lOX0lELFxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgbm9ybWFsOiB7XG4gICAgICAgIGNvbWljSW5mbzoge1xuICAgICAgICAgIGlkOiBzdGFibGVJZCxcbiAgICAgICAgICB0aXRsZTogZGV0YWlsLnRpdGxlIHx8IGBXRUJUT09OICMke3BhcnRzLnRpdGxlTm99YCxcbiAgICAgICAgICAvLyB0aXRsZU1ldGHvvJrmoIfpopjml4Hnuq/lsZXnpLrkv6Hmga/vvIjkuI3lj6/ngrnvvInvvIznu5/kuIDljrvlsL7pg6jnqbrnmb1cbiAgICAgICAgICB0aXRsZU1ldGE6IGNyZWF0ZVRpdGxlTWV0YUl0ZW1zKFtcbiAgICAgICAgICAgIHQodWlMYW5nLCBcInRpdGxlTWV0YS50eXBlXCIsIHsgdHlwZTogdHlwZUxhYmVsIH0pLFxuICAgICAgICAgICAgdCh1aUxhbmcsIFwidGl0bGVNZXRhLmNoYXB0ZXJzXCIsIHsgY291bnQ6IGNoYXB0ZXJzLmxlbmd0aCB9KSxcbiAgICAgICAgICAgIHQodWlMYW5nLCBcInRpdGxlTWV0YS5sYW5nXCIsIHsgbGFuZzogcGFydHMubGFuZyB9KSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICAvLyDkuI3kvb/nlKjni6znq4vkvZzogIXljaHniYfvvIzkvZzogIXmlL7ov5sgbWV0YWRhdGFcbiAgICAgICAgICBjcmVhdG9yOiBlbXB0eUNyZWF0b3IoKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGV0YWlsLnN1bW1hcnkgfHwgXCJcIixcbiAgICAgICAgICBjb3ZlcjogY3JlYXRlSW1hZ2Uoe1xuICAgICAgICAgICAgaWQ6IHBhcnRzLnRpdGxlTm8sXG4gICAgICAgICAgICB1cmw6IGRldGFpbC50aHVtYm5haWwgfHwgTk9UX0ZPVU5EX0lNQUdFX1VSTCxcbiAgICAgICAgICAgIG5hbWU6IFwiY292ZXIuanBnXCIsXG4gICAgICAgICAgICBwYXRoOiBgY29taWMvJHtwYXJ0cy50aXRsZU5vfS9jb3Zlci5qcGdgLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIG1ldGFkYXRh77ya5Y+v54K55Ye777yM6Lez6L2s5pys5o+S5Lu25pCc57SiXG4gICAgICAgICAgbWV0YWRhdGE6IFtcbiAgICAgICAgICAgIGNyZWF0ZUNsaWNrYWJsZU1ldGFkYXRhKFxuICAgICAgICAgICAgICBcImF1dGhvclwiLFxuICAgICAgICAgICAgICB0KHVpTGFuZywgXCJtZXRhLmF1dGhvclwiKSxcbiAgICAgICAgICAgICAgZGV0YWlsLmF1dGhvciA/IFtkZXRhaWwuYXV0aG9yXSA6IFtdLFxuICAgICAgICAgICAgICBwYXJ0cy5sYW5nLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNyZWF0ZUNsaWNrYWJsZU1ldGFkYXRhKFxuICAgICAgICAgICAgICBcImNhdGVnb3JpZXNcIixcbiAgICAgICAgICAgICAgdCh1aUxhbmcsIFwibWV0YS5jYXRlZ29yaWVzXCIpLFxuICAgICAgICAgICAgICBnZW5yZXMsXG4gICAgICAgICAgICAgIHBhcnRzLmxhbmcsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0uZmlsdGVyKChpdGVtKTogaXRlbSBpcyBOb25OdWxsYWJsZTx0eXBlb2YgaXRlbT4gPT4gaXRlbSAhPSBudWxsKSxcbiAgICAgICAgICBleHRlcm46IHtcbiAgICAgICAgICAgIGhyZWY6IGRldGFpbFVybCxcbiAgICAgICAgICAgIHR5cGU6IHBhcnRzLnR5cGUsXG4gICAgICAgICAgICBsYW5nOiBwYXJ0cy5sYW5nLFxuICAgICAgICAgICAgdGl0bGVObzogcGFydHMudGl0bGVObyxcbiAgICAgICAgICAgIG1hdHVyZTogZGV0YWlsLm1hdHVyZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcHM6IGNoYXB0ZXJzLFxuICAgICAgICByZWNvbW1lbmQ6IFtdLFxuICAgICAgICB0b3RhbFZpZXdzOiAwLFxuICAgICAgICB0b3RhbExpa2VzOiAwLFxuICAgICAgICB0b3RhbENvbW1lbnRzOiAwLFxuICAgICAgICBpc0Zhdm91cml0ZTogZmFsc2UsXG4gICAgICAgIGlzTGlrZWQ6IGZhbHNlLFxuICAgICAgICBhbGxvd0NvbW1lbnRzOiBmYWxzZSxcbiAgICAgICAgYWxsb3dMaWtlOiBmYWxzZSxcbiAgICAgICAgYWxsb3dDb2xsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBhbGxvd0Rvd25sb2FkOiB0cnVlLFxuICAgICAgICBleHRlcm46IHtcbiAgICAgICAgICBocmVmOiBkZXRhaWxVcmwsXG4gICAgICAgICAgdHlwZTogcGFydHMudHlwZSxcbiAgICAgICAgICBsYW5nOiBwYXJ0cy5sYW5nLFxuICAgICAgICAgIHRpdGxlTm86IHBhcnRzLnRpdGxlTm8sXG4gICAgICAgICAgbWF0dXJlOiBkZXRhaWwubWF0dXJlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJhdzogeyBkZXRhaWwsIGVwaXNvZGVzLCBwYXJ0cyB9LFxuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDaGFwdGVyUGFnZXMoXG4gIHBheWxvYWQ6IENoYXB0ZXJQYXlsb2FkIHwgUmVhZFNuYXBzaG90UGF5bG9hZCxcbik6IFByb21pc2U8e1xuICBjb21pY0lkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNoYXB0ZXI6IENoYXB0ZXJTdW1tYXJ5ICYgeyBwYWdlczogQ2hhcHRlclBhZ2VbXSB9O1xuICBjaGFwdGVyczogQ2hhcHRlclN1bW1hcnlbXTtcbiAgZXh0ZXJuOiBTdHJpbmdNYXAgfCBudWxsO1xufT4ge1xuICBjb25zdCB1aUxhbmcgPSBhd2FpdCByZXNvbHZlVWlMYW5nKCk7XG4gIGNvbnN0IGFsbG93UjE4ID0gYXdhaXQgbG9hZFIxOFByZWZlcmVuY2UoKTtcbiAgY29uc3QgY29taWNJZCA9IHJlYWRTdHJpbmcocGF5bG9hZC5jb21pY0lkKTtcbiAgaWYgKCFjb21pY0lkKSB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3IuY29taWNJZFJlcXVpcmVkXCIpKTtcblxuICBjb25zdCBkZXRhaWwgPSBhd2FpdCBnZXRDb21pY0RldGFpbCh7XG4gICAgY29taWNJZCxcbiAgICBleHRlcm46IHBheWxvYWQuZXh0ZXJuLFxuICB9KTtcbiAgY29uc3QgY2hhcHRlcnMgPSBkZXRhaWwuZGF0YS5ub3JtYWwuZXBzO1xuICBpZiAoIWNoYXB0ZXJzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKHQodWlMYW5nLCBcImVycm9yLm5vRXBpc29kZXNcIikpO1xuXG4gIGNvbnN0IGNoYXB0ZXJJZCA9IHJlYWRTdHJpbmcocGF5bG9hZC5jaGFwdGVySWQpO1xuICBsZXQgY2hhcHRlciA9IGNoYXB0ZXJzLmZpbmQoXG4gICAgKGMpID0+IGMucmVxdWVzdElkID09PSBjaGFwdGVySWQgfHwgYy5pZCA9PT0gY2hhcHRlcklkLFxuICApO1xuXG4gIC8vIOWFnOW6le+8mmNoYXB0ZXJJZCDmmK8gY29taWNJZCAvIOWOhuWPsumBl+eVmeWAvOaXtu+8jOeUqCBleHRlcm4uZXBpc29kZU5vIOWumuS9jVxuICBpZiAoIWNoYXB0ZXIpIHtcbiAgICBjb25zdCBleHRlcm4gPSB0b1N0cmluZ01hcChwYXlsb2FkLmV4dGVybik7XG4gICAgY29uc3QgZXBpc29kZU5vID0gTnVtYmVyKGV4dGVybi5lcGlzb2RlTm8pO1xuICAgIGlmIChlcGlzb2RlTm8gPiAwKSB7XG4gICAgICBjaGFwdGVyID0gY2hhcHRlcnMuZmluZCgoYykgPT4ge1xuICAgICAgICBjb25zdCBjRXh0ZXJuID0gdG9TdHJpbmdNYXAoYy5leHRlcm4pO1xuICAgICAgICByZXR1cm4gTnVtYmVyKGNFeHRlcm4uZXBpc29kZU5vKSA9PT0gZXBpc29kZU5vO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhcHRlciA9IGNoYXB0ZXIgPz8gY2hhcHRlcnNbMF07XG5cbiAgY29uc3QgY2hhcHRlckV4dGVybiA9IHRvU3RyaW5nTWFwKGNoYXB0ZXIuZXh0ZXJuKTtcbiAgbGV0IHZpZXdlckxpbmsgPSByZWFkU3RyaW5nKGNoYXB0ZXJFeHRlcm4udmlld2VyTGluayk7XG5cbiAgLy8g5YWc5bqV77ya6YeN5paw5ouJ56ug6IqC5YiX6KGo5ou/IHZpZXdlckxpbmtcbiAgaWYgKCF2aWV3ZXJMaW5rKSB7XG4gICAgY29uc3QgY29uZmlnTGFuZyA9IGF3YWl0IHJlc29sdmVTZWFyY2hMYW5nKCk7XG4gICAgY29uc3QgcGFydHMgPSBkZWNvZGVDb21pY0lkKGNvbWljSWQsIGNvbmZpZ0xhbmcpO1xuICAgIGNvbnN0IGVwaXNvZGVzID0gYXdhaXQgd2ViRXBpc29kZUxpc3QocGFydHMudGl0bGVObywgcGFydHMudHlwZSwgcGFydHMubGFuZywge1xuICAgICAgYWxsb3dSMTgsXG4gICAgICB1aUxhbmcsXG4gICAgfSk7XG4gICAgY29uc3QgZXAgPSBlcGlzb2Rlcy5maW5kKChlKSA9PiBTdHJpbmcoZS5lcGlzb2RlTm8pID09PSBjaGFwdGVyLmlkKTtcbiAgICB2aWV3ZXJMaW5rID0gcmVhZFN0cmluZyhlcD8udmlld2VyTGluayk7XG4gIH1cblxuICBpZiAoIXZpZXdlckxpbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodCh1aUxhbmcsIFwiZXJyb3Iubm9WaWV3ZXJMaW5rXCIsIHsgaWQ6IGNoYXB0ZXIuaWQgfSkpO1xuICB9XG5cbiAgY29uc3QgeyBpbWFnZUxpc3QgfSA9IGF3YWl0IHdlYkNoYXB0ZXJQYWdlcyh2aWV3ZXJMaW5rLCB7IGFsbG93UjE4LCB1aUxhbmcgfSk7XG4gIGNvbnN0IHBhZ2VzID0gcGFnZXNGcm9tSW1hZ2VMaXN0KFxuICAgIGRldGFpbC5jb21pY0lkLFxuICAgIGNoYXB0ZXIuc3RvcmFnZUNoYXB0ZXJJZCxcbiAgICBpbWFnZUxpc3QsXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb21pY0lkOiBkZXRhaWwuY29taWNJZCxcbiAgICB0aXRsZTogZGV0YWlsLmRhdGEubm9ybWFsLmNvbWljSW5mby50aXRsZSxcbiAgICBjaGFwdGVyOiB7XG4gICAgICAuLi5jaGFwdGVyLFxuICAgICAgcGFnZXMsXG4gICAgICBleHRlcm46IHsgLi4uY2hhcHRlckV4dGVybiwgdmlld2VyTGluayB9LFxuICAgIH0sXG4gICAgY2hhcHRlcnMsXG4gICAgZXh0ZXJuOiBwYXlsb2FkLmV4dGVybiA/PyBudWxsLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2hhcHRlcihcbiAgcGF5bG9hZDogQ2hhcHRlclBheWxvYWQgPSB7fSxcbik6IFByb21pc2U8Q2hhcHRlckNvbnRlbnRDb250cmFjdD4ge1xuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkQ2hhcHRlclBhZ2VzKHBheWxvYWQpO1xuICByZXR1cm4ge1xuICAgIHNvdXJjZTogUExVR0lOX0lELFxuICAgIGNvbWljSWQ6IGxvYWRlZC5jb21pY0lkLFxuICAgIGNoYXB0ZXJJZDogbG9hZGVkLmNoYXB0ZXIuaWQsXG4gICAgZXh0ZXJuOiBsb2FkZWQuZXh0ZXJuLFxuICAgIHNjaGVtZToge1xuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgdHlwZTogXCJjaGFwdGVyQ29udGVudFwiLFxuICAgICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgfSxcbiAgICBkYXRhOiB7XG4gICAgICBjb21pYzoge1xuICAgICAgICBpZDogbG9hZGVkLmNvbWljSWQsXG4gICAgICAgIHNvdXJjZTogUExVR0lOX0lELFxuICAgICAgICB0aXRsZTogbG9hZGVkLnRpdGxlLFxuICAgICAgICBleHRlcm46IHt9LFxuICAgICAgfSxcbiAgICAgIGNoYXB0ZXI6IGxvYWRlZC5jaGFwdGVyLFxuICAgICAgY2hhcHRlcnM6IGxvYWRlZC5jaGFwdGVycy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICByZXF1ZXN0SWQ6IGl0ZW0ucmVxdWVzdElkLFxuICAgICAgICBsb2dpY2FsS2V5OiBpdGVtLmxvZ2ljYWxLZXksXG4gICAgICAgIHN0b3JhZ2VDaGFwdGVySWQ6IGl0ZW0uc3RvcmFnZUNoYXB0ZXJJZCxcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICBvcmRlcjogaXRlbS5vcmRlcixcbiAgICAgICAgZXh0ZXJuOiBpdGVtLmV4dGVybixcbiAgICAgIH0pKSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVhZFNuYXBzaG90KFxuICBwYXlsb2FkOiBSZWFkU25hcHNob3RQYXlsb2FkID0ge30sXG4pOiBQcm9taXNlPFJlYWRTbmFwc2hvdENvbnRyYWN0PiB7XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRDaGFwdGVyUGFnZXMocGF5bG9hZCk7XG4gIHJldHVybiB7XG4gICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgZXh0ZXJuOiBsb2FkZWQuZXh0ZXJuLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbWljOiB7XG4gICAgICAgIGlkOiBsb2FkZWQuY29taWNJZCxcbiAgICAgICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgICAgIHRpdGxlOiBsb2FkZWQudGl0bGUsXG4gICAgICAgIGV4dGVybjoge30sXG4gICAgICB9LFxuICAgICAgY2hhcHRlcjogbG9hZGVkLmNoYXB0ZXIsXG4gICAgICBjaGFwdGVyczogbG9hZGVkLmNoYXB0ZXJzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgb3JkZXI6IGl0ZW0ub3JkZXIsXG4gICAgICAgIGV4dGVybjogaXRlbS5leHRlcm4sXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSW1hZ2VCeXRlcyhcbiAgcGF5bG9hZDogRmV0Y2hJbWFnZUJ5dGVzUGF5bG9hZCA9IHt9LFxuKTogUHJvbWlzZTxGZXRjaEltYWdlQnl0ZXNSZXN1bHQ+IHtcbiAgY29uc3QgdWlMYW5nID0gYXdhaXQgcmVzb2x2ZVVpTGFuZygpO1xuICBjb25zdCBhbGxvd1IxOCA9IGF3YWl0IGxvYWRSMThQcmVmZXJlbmNlKCk7XG4gIGNvbnN0IHRhcmdldFVybCA9IHJlYWRTdHJpbmcocGF5bG9hZC51cmwpO1xuICBpZiAoIXRhcmdldFVybCkgdGhyb3cgbmV3IEVycm9yKHQodWlMYW5nLCBcImVycm9yLnVybFJlcXVpcmVkXCIpKTtcblxuICBjb25zdCB0aW1lb3V0TXMgPSBOdW1iZXIocGF5bG9hZC50aW1lb3V0TXMgPz8gMzAwMDApIHx8IDMwMDAwO1xuICBjb25zdCB0YXNrR3JvdXBLZXkgPSByZWFkU3RyaW5nKHBheWxvYWQudGFza0dyb3VwS2V5KTtcblxuICBpZiAodGFza0dyb3VwS2V5ICYmIChhd2FpdCBydW50aW1lLmlzVGFza0dyb3VwQ2FuY2VsbGVkKHRhc2tHcm91cEtleSkpKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICB9XG5cbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godGFyZ2V0VXJsLCB7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiVXNlci1BZ2VudFwiOiBERVNLVE9QX1VBLFxuICAgICAgUmVmZXJlcjogV0VCVE9PTl9SRUZFUkVSLFxuICAgICAgQ29va2llOiBidWlsZENvb2tpZShhbGxvd1IxOCksXG4gICAgICBcIngtcnF1aWNranMtaG9zdC1vZmZsb2FkLWJpbmFyeS12MVwiOiBcIjFcIixcbiAgICB9LFxuICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aW1lb3V0TXMpLFxuICB9KTtcblxuICBpZiAoIXJlcy5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIHQodWlMYW5nLCBcImVycm9yLmRvd25sb2FkRmFpbGVkXCIsIHtcbiAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzVGV4dCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzLmFycmF5QnVmZmVyKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2V0dGluZ3NCdW5kbGUoKTogUHJvbWlzZTxTZXR0aW5nc0J1bmRsZUNvbnRyYWN0PiB7XG4gIGNvbnN0IHVpTGFuZyA9IGF3YWl0IHJlc29sdmVVaUxhbmcoKTtcbiAgY29uc3QgcHJlZiA9IGF3YWl0IGxvYWRMYW5nUHJlZmVyZW5jZSgpO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVTZWFyY2hMYW5nKCk7XG4gIGNvbnN0IHIxOCA9IGF3YWl0IGxvYWRSMThQcmVmZXJlbmNlKCk7XG4gIHJldHVybiB7XG4gICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgc2NoZW1lOiB7XG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICB0eXBlOiBcInNldHRpbmdzXCIsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IHQodWlMYW5nLCBcInNldHRpbmdzLnNlY3Rpb24uY29udGVudFwiKSxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBcImNvbnRlbnQubGFuZ1wiLFxuICAgICAgICAgICAgICBraW5kOiBcImNob2ljZVwiLFxuICAgICAgICAgICAgICBsYWJlbDogdCh1aUxhbmcsIFwic2V0dGluZ3MubGFuZy5sYWJlbFwiKSxcbiAgICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB0KHVpTGFuZywgXCJzZXR0aW5ncy5sYW5nLmZvbGxvd1N5c3RlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmc6IHJlc29sdmVkLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogTEFOR19BVVRPLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uTEFOR19PUFRJT05TLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBmblBhdGg6IFwib25MYW5nQ2hhbmdlZFwiLFxuICAgICAgICAgICAgICBwZXJzaXN0OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBcImNvbnRlbnQucjE4XCIsXG4gICAgICAgICAgICAgIGtpbmQ6IFwic3dpdGNoXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiB0KHVpTGFuZywgXCJzZXR0aW5ncy5yMTgubGFiZWxcIiksXG4gICAgICAgICAgICAgIGZuUGF0aDogXCJvblIxOENoYW5nZWRcIixcbiAgICAgICAgICAgICAgcGVyc2lzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkYXRhOiB7XG4gICAgICBjYW5TaG93VXNlckluZm86IGZhbHNlLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIFwiY29udGVudC5sYW5nXCI6IHByZWYsXG4gICAgICAgIFwiY29udGVudC5yMThcIjogcjE4LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25MYW5nQ2hhbmdlZChwYXlsb2FkOiB7XG4gIGtleT86IHN0cmluZztcbiAgdmFsdWU/OiB1bmtub3duO1xuICBleHRlcm4/OiBTdHJpbmdNYXA7XG59KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBrZXkgPSByZWFkU3RyaW5nKHBheWxvYWQua2V5KSB8fCBcImNvbnRlbnQubGFuZ1wiO1xuICBsZXQgdmFsdWUgPSByZWFkU3RyaW5nKHBheWxvYWQudmFsdWUpIHx8IExBTkdfQVVUTztcbiAgaWYgKHZhbHVlICE9PSBMQU5HX0FVVE8gJiYgIWlzU3VwcG9ydGVkTGFuZyh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IExBTkdfQVVUTztcbiAgfVxuICBhd2FpdCBwbHVnaW5Db25maWcuc2F2ZShrZXksIEpTT04uc3RyaW5naWZ5KHsgdmFsdWUgfSkpO1xuICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uUjE4Q2hhbmdlZChwYXlsb2FkOiB7XG4gIGtleT86IHN0cmluZztcbiAgdmFsdWU/OiB1bmtub3duO1xuICBleHRlcm4/OiBTdHJpbmdNYXA7XG59KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBrZXkgPSByZWFkU3RyaW5nKHBheWxvYWQua2V5KSB8fCBcImNvbnRlbnQucjE4XCI7XG4gIGNvbnN0IHZhbHVlID0gcGF5bG9hZC52YWx1ZSA9PT0gdHJ1ZSB8fCBwYXlsb2FkLnZhbHVlID09PSBcInRydWVcIjtcbiAgYXdhaXQgcGx1Z2luQ29uZmlnLnNhdmUoa2V5LCBKU09OLnN0cmluZ2lmeSh7IHZhbHVlIH0pKTtcbiAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBZHZhbmNlZFNlYXJjaFNjaGVtZSgpOiBQcm9taXNlPHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNjaGVtZToge1xuICAgIHZlcnNpb246IFwiMS4wLjBcIjtcbiAgICB0eXBlOiBcImFkdmFuY2VkU2VhcmNoXCI7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBmaWVsZHM6IEFycmF5PHtcbiAgICAgIGtleTogc3RyaW5nO1xuICAgICAga2luZDogXCJjaG9pY2VcIjtcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICBvcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG4gICAgfT47XG4gIH07XG4gIGRhdGE6IHsgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xufT4ge1xuICBjb25zdCB1aUxhbmcgPSBhd2FpdCByZXNvbHZlVWlMYW5nKCk7XG4gIGNvbnN0IGxhbmcgPSBhd2FpdCByZXNvbHZlU2VhcmNoTGFuZygpO1xuICByZXR1cm4ge1xuICAgIHNvdXJjZTogUExVR0lOX0lELFxuICAgIHNjaGVtZToge1xuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgdHlwZTogXCJhZHZhbmNlZFNlYXJjaFwiLFxuICAgICAgdGl0bGU6IHQodWlMYW5nLCBcImFkdmFuY2VkU2VhcmNoLnRpdGxlXCIpLFxuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IFwibGFuZ1wiLFxuICAgICAgICAgIGtpbmQ6IFwiY2hvaWNlXCIsXG4gICAgICAgICAgbGFiZWw6IHQodWlMYW5nLCBcImFkdmFuY2VkU2VhcmNoLmxhbmdcIiksXG4gICAgICAgICAgb3B0aW9uczogTEFOR19PUFRJT05TLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRhdGE6IHsgdmFsdWVzOiB7IGxhbmcgfSB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICBDYXBhYmlsaXRpZXNCdW5kbGVDb250cmFjdCxcbiAgSW5mb0NvbnRyYWN0LFxufSBmcm9tIFwiYnJlZXplLXBsdWdpbi1raXRcIjtcbmltcG9ydCB7IFBMVUdJTl9JRCB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgYnVpbGRQbHVnaW5JbmZvIH0gZnJvbSBcIi4vZ2V0LWluZm9cIjtcbmltcG9ydCB7XG4gIGZldGNoSW1hZ2VCeXRlcyxcbiAgZ2V0QWR2YW5jZWRTZWFyY2hTY2hlbWUsXG4gIGdldENoYXB0ZXIsXG4gIGdldENvbWljRGV0YWlsLFxuICBnZXRSZWFkU25hcHNob3QsXG4gIGdldFNldHRpbmdzQnVuZGxlLFxuICBvbkxhbmdDaGFuZ2VkLFxuICBvblIxOENoYW5nZWQsXG4gIHNlYXJjaENvbWljLFxufSBmcm9tIFwiLi93ZWJ0b29uLWNvcmVcIjtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0SW5mbygpOiBQcm9taXNlPEluZm9Db250cmFjdD4ge1xuICByZXR1cm4gYXdhaXQgYnVpbGRQbHVnaW5JbmZvKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc0J1bmRsZSgpOiBQcm9taXNlPENhcGFiaWxpdGllc0J1bmRsZUNvbnRyYWN0PiB7XG4gIHJldHVybiB7XG4gICAgc291cmNlOiBQTFVHSU5fSUQsXG4gICAgc2NoZW1lOiB7XG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICB0eXBlOiBcImNhcGFiaWxpdGllc1wiLFxuICAgICAgYWN0aW9uczogW10sXG4gICAgfSxcbiAgICBkYXRhOiB7fSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRJbmZvLFxuICBzZWFyY2hDb21pYyxcbiAgZ2V0Q29taWNEZXRhaWwsXG4gIGdldENoYXB0ZXIsXG4gIGdldFJlYWRTbmFwc2hvdCxcbiAgZmV0Y2hJbWFnZUJ5dGVzLFxuICBnZXRTZXR0aW5nc0J1bmRsZSxcbiAgZ2V0Q2FwYWJpbGl0aWVzQnVuZGxlLFxuICBnZXRBZHZhbmNlZFNlYXJjaFNjaGVtZSxcbiAgb25MYW5nQ2hhbmdlZCxcbiAgb25SMThDaGFuZ2VkLFxufTtcbiJdLCJuYW1lcyI6WyJPYmplY3QiLCJlIiwiU3ltYm9sIiwiUExVR0lOX0lEIiwiTk9UX0ZPVU5EX0lNQUdFX1VSTCIsIldFQlRPT05fUkVGRVJFUiIsIlBDX0JBU0UiLCJNT0JJTEVfQkFTRSIsInRvU3RyaW5nTWFwIiwidmFsdWUiLCJBcnJheSIsInJlYWRTdHJpbmciLCJTdHJpbmciLCJ0cmltVHJhaWxpbmciLCJjcmVhdGVBY3Rpb25JdGVtIiwibmFtZSIsIm9uVGFwIiwiZXh0ZXJuIiwiY3JlYXRlSW1hZ2UiLCJpbnB1dCIsIl9pbnB1dF9pZCIsIl9pbnB1dF91cmwiLCJfaW5wdXRfbmFtZSIsIl9pbnB1dF9wYXRoIiwiX2lucHV0X2V4dGVybiIsIlVJX0xBTkdTIiwiZW4iLCJ0aCIsImlkIiwiZXMiLCJmciIsImRlIiwiVEFCTEVTIiwiZ2V0SG9zdExvY2FsZVJhdyIsImJyaWRnZSIsImdsb2JhbFRoaXMiLCJyYXciLCJQcm9taXNlIiwidGV4dCIsIkpTT04iLCJpbmZvIiwicmVzb2x2ZVVpTGFuZyIsInByaW1hcnkiLCJ0IiwibGFuZyIsImtleSIsInZhcnMiLCJfcmVmIiwiayIsInYiLCJSZWdFeHAiLCJidWlsZFBsdWdpbkluZm8iLCJMQU5HX09QVElPTlMiLCJTVVBQT1JURURfTEFOR1MiLCJTZXQiLCJpdGVtIiwiTEFOR19BVVRPIiwiREVTS1RPUF9VQSIsImJ1aWxkQ29va2llIiwiYWxsb3dSMTgiLCJkZXNrdG9wSGVhZGVycyIsIm1vYmlsZUhlYWRlcnMiLCJmZXRjaFRleHQiLCJ1cmwiLCJoZWFkZXJzIiwidGltZW91dE1zIiwidWlMYW5nIiwicmVzIiwiZmV0Y2giLCJBYm9ydFNpZ25hbCIsIkVycm9yIiwiZmV0Y2hKc29uIiwibG9hZFIxOFByZWZlcmVuY2UiLCJwbHVnaW5Db25maWciLCJwYXJzZWQiLCJpc1N1cHBvcnRlZExhbmciLCJyZXNvbHZlTG9jYWxlTGFuZyIsImxvYWRMYW5nUHJlZmVyZW5jZSIsInJlc29sdmVTZWFyY2hMYW5nIiwicHJlZiIsImVuY29kZUNvbWljSWQiLCJwYXJ0cyIsImhyZWYiLCJzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlQ29taWNJZCIsImNvbWljSWQiLCJmYWxsYmFja0xhbmciLCJzZWdzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwidHlwZSIsInRpdGxlTm8iLCJpbmZlclR5cGUiLCJub3JtYWxpemVIcmVmIiwibm9ybWFsaXplVmlld2VyVXJsIiwidmlld2VyTGluayIsImNyZWF0ZUNsaWNrYWJsZU1ldGFkYXRhIiwidmFsdWVzIiwibGlzdCIsIkJvb2xlYW4iLCJrZXl3b3JkIiwid2ViU2VhcmNoIiwicXVlcnkiLCJwYWdlIiwib3B0cyIsIl9vcHRzX3VpTGFuZyIsInUiLCJVUkwiLCJodG1sIiwiJCIsIkJyZWV6ZUh0bWwiLCJyZXN1bHRzIiwiXyIsImVsIiwiJGVsIiwidGl0bGUiLCJhdXRob3IiLCJpbWciLCJtYXR1cmUiLCJkZXRlY3RNYXR1cmVGcm9tTm9kZSIsIl8kZWxfaHRtbCIsImNscyIsImNvdmVyUGF0aCIsImhhc05leHQiLCJ3ZWJEZXRhaWwiLCJkZXRhaWxVcmwiLCJsb3dlciIsImdlbnJlcyIsImciLCJzdW1tYXJ5IiwidGh1bWJuYWlsIiwid2ViRXBpc29kZUxpc3QiLCJfZGF0YV9yZXN1bHQiLCJkYXRhIiwid2ViQ2hhcHRlclBhZ2VzIiwidmlld2VyVXJsIiwibWF0Y2giLCJpbWFnZUxpc3QiLCJhIiwiYiIsIl9hX3NvcnRPcmRlciIsIl9iX3NvcnRPcmRlciIsIk51bWJlciIsInJlc29sdmVEZXRhaWxVcmwiLCJlcGlzb2RlcyIsImZyb21WaWV3ZXIiLCJsaXN0VXJsRnJvbVZpZXdlciIsImZ1bGwiLCJnZXRDb21pY0RldGFpbCIsInBheWxvYWQiLCJyZXFPcHRzIiwiZGV0YWlsIiwic3RhYmxlSWQiLCJjaGFwdGVycyIsImVwIiwiaW5kZXgiLCJfZXBfdGh1bWJuYWlsIiwiX2VwX2V4cG9zdXJlRGF0ZU1pbGxpcyIsInR5cGVMYWJlbCIsIm5hbWVzIiwibiIsImxvYWRDaGFwdGVyUGFnZXMiLCJfcGF5bG9hZF9leHRlcm4iLCJjaGFwdGVySWQiLCJjaGFwdGVyIiwiYyIsImVwaXNvZGVObyIsImNFeHRlcm4iLCJjaGFwdGVyRXh0ZXJuIiwicGFnZXMiLCJpZHgiLCJfaW1nX3dpZHRoIiwiX2ltZ19oZWlnaHQiLCJfaW1nX3NvcnRPcmRlciIsImltYWdlRmlsZU5hbWUiLCJwYXRoIiwiZ2V0SW5mbyIsInNlYXJjaENvbWljIiwiX3BheWxvYWRfcGFnZSIsIl9wYXlsb2FkX2tleXdvcmQiLCJNYXRoIiwicHJlZmVycmVkIiwiZnJvbUV4dGVybiIsInBhZ2luZyIsImNyZWF0ZVBhZ2luZyIsInRvdGFsIiwiaGFzUmVhY2hlZE1heCIsImdldENoYXB0ZXIiLCJsb2FkZWQiLCJnZXRSZWFkU25hcHNob3QiLCJmZXRjaEltYWdlQnl0ZXMiLCJfcGF5bG9hZF90aW1lb3V0TXMiLCJ0YXJnZXRVcmwiLCJ0YXNrR3JvdXBLZXkiLCJVaW50OEFycmF5IiwiZ2V0U2V0dGluZ3NCdW5kbGUiLCJyZXNvbHZlZCIsInIxOCIsImdldENhcGFiaWxpdGllc0J1bmRsZSIsImdldEFkdmFuY2VkU2VhcmNoU2NoZW1lIiwib25MYW5nQ2hhbmdlZCIsIm9uUjE4Q2hhbmdlZCJdLCJtYXBwaW5ncyI6IjJCQUFBLEdBQW9CLENBQUMsQ0FBRyxDQUFDLEVBQVMsRUFBUyxLQUMxQyxJQUFJLEVBQVMsQ0FBQyxFQUFNLEtBQ25CLElBQUksSUFBSSxLQUFPLEVBQ1gsRUFBb0IsQ0FBQyxDQUFDLEVBQU0sSUFBUSxDQUFDLEVBQW9CLENBQUMsQ0FBQyxFQUFTLElBQ3RFQSxPQUFPLGNBQWMsQ0FBQyxFQUFTLEVBQUssQ0FBRSxXQUFZLEdBQU0sQ0FBQyxFQUFLLENBQUUsQ0FBSSxDQUFDLEVBQUksQUFBQyxFQUc3RSxFQUNBLEVBQU8sRUFBUyxPQUNoQixFQUFPLEVBQVEsUUFDaEIsRUNWQSxFQUFvQixDQUFDLENBQUcsQ0FBQyxFQUFLLElBQVVBLE9BQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBSyxHQ0NsRixFQUFvQixDQUFDLENBQUcsQUFBQ0MsSUFDckIsQUFBa0IsSUFBbEIsT0FBT0MsUUFBMEJBLE9BQU8sV0FBVyxFQUNyREYsT0FBTyxjQUFjLENBQUNDLEVBQVNDLE9BQU8sV0FBVyxDQUFFLENBQUUsTUFBTyxRQUFTLEdBRXRFRixPQUFPLGNBQWMsQ0FBQ0MsRUFBUyxhQUFjLENBQUUsTUFBTyxFQUFLLEVBQzVELEUsdUNDTk8sSUFBTUUsRUFBWSx1Q0FDWkMsRUFDWCxnRUFFV0MsRUFBa0IsMEJBQ2xCQyxFQUFVLDJCQUNWQyxFQUFjLHlCQVdwQixTQUFTQyxFQUFZQyxDQUFjLFFBQ3hDLEFBQUksQ0FBQ0EsR0FBUyxBQUFpQixVQUFqQixPQUFPQSxHQUFzQkMsTUFBTSxPQUFPLENBQUNELEdBQ2hELENBQUMsRUFFSEEsQ0FDVCxDQUVPLFNBQVNFLEVBQVdGLENBQWMsRUFDdkMsT0FBT0csT0FBT0gsTUFBQUEsRUFBQUEsRUFBUyxJQUFJLElBQUksRUFDakMsQ0FHTyxTQUFTSSxFQUFhSixDQUFjLEVBQ3pDLE9BQU9HLE9BQU9ILE1BQUFBLEVB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
|
|
Binary file
|