{"threadId":"019f7106-10a6-7a23-9a56-78ef336021e8","checkpoints":[{"id":"cp-1784676114398-523a19bf","turnId":"019f86f9-3422-7552-8d5d-8ae27ea8bcc8","createdAt":"2026-07-21T23:21:54.398Z","changedFiles":0,"files":[]},{"id":"cp-1784708108017-ddb2dd98","turnId":"019f86fd-77a0-71c2-8507-db0bf7bea3b4","createdAt":"2026-07-22T08:15:08.017Z","changedFiles":17,"files":[{"relativePath":"lliria-properties-scraper\\package.json","beforeExisted":true,"beforeHash":"b3bca76d3d041d7675654b5195be8f9b887354e914a440814de289da85018aa7","beforeContent":"ewogICJuYW1lIjogImxsaXJpYS1wcm9wZXJ0aWVzLXNjcmFwZXIiLAogICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAiZGVzY3JpcHRpb24iOiAiQXBsaWNhY2nDs24gd2ViIHBhcmEgc2NyYXBpbmcgYXV0b23DoXRpY28gZGUgcHJvcGllZGFkZXMgZW4gdmVudGEgZW4gTGxpcmlhIHkgYWxyZWRlZG9yZXMsIGNvbiBlbnbDrW8gZGUgY29ycmVvcyBlbGVjdHLDs25pY29zIGF1dG9tw6F0aWNvcyBzZWfDum4gZmlsdHJvcyBlc3RhYmxlY2lkb3MuIiwKICAibWFpbiI6ICJkaXN0L2FwcC5qcyIsCiAgInNjcmlwdHMiOiB7CiAgICAic3RhcnQiOiAibm9kZSBkaXN0L2FwcC5qcyIsCiAgICAiYnVpbGQiOiAidHNjIiwKICAgICJkZXYiOiAidHMtbm9kZS1kZXYgLS1yZXNwYXduIC0tdHJhbnNwaWxlLW9ubHkgc3JjL2FwcC50cyIsCiAgICAiZGV2OnRzIjogInRzLW5vZGUgc3JjL2FwcC50cyIsCiAgICAiaW5pdC1kYiI6ICJ0cy1ub2RlIHNyYy9jb25maWcvaW5pdERiLnRzIiwKICAgICJwb3B1bGF0ZS1tdW5pY2lwYWxpdGllcyI6ICJ0cy1ub2RlIHNyYy9zY3JpcHRzL3BvcHVsYXRlTXVuaWNpcGFsaXRpZXMudHMiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgImF4aW9zIjogIl4xLjYuMiIsCiAgICAiYmNyeXB0anMiOiAiXjIuNC4zIiwKICAgICJib2R5LXBhcnNlciI6ICJeMS4yMC4yIiwKICAgICJjaGVlcmlvIjogIl4xLjAuMC1yYy4xMiIsCiAgICAiY29ycyI6ICJeMi44LjUiLAogICAgImRvdGVudiI6ICJeMTYuMy4xIiwKICAgICJlanMiOiAiXjMuMS4xMCIsCiAgICAiZXhjZWxqcyI6ICJeNC40LjAiLAogICAgImV4cHJlc3MiOiAiXjQuMTguMiIsCiAgICAiZXhwcmVzcy1teXNxbC1zZXNzaW9uIjogIl4zLjAuMyIsCiAgICAiZXhwcmVzcy1yYXRlLWxpbWl0IjogIl44LjIuMSIsCiAgICAiZXhwcmVzcy1zZXNzaW9uIjogIl4xLjE3LjMiLAogICAgIm15c3FsMiI6ICJeMy42LjUiLAogICAgIm5vZGUtY3JvbiI6ICJeMy4wLjMiLAogICAgIm5vZGVtYWlsZXIiOiAiXjguMC4xIiwKICAgICJwLWxpbWl0IjogIl43LjMuMCIsCiAgICAicGxheXdyaWdodCI6ICJeMS41OC4yIiwKICAgICJwdXBwZXRlZXItZXh0cmEiOiAiXjMuMy42IiwKICAgICJwdXBwZXRlZXItZXh0cmEtcGx1Z2luLXN0ZWFsdGgiOiAiXjIuMTEuMiIsCiAgICAic2hhcnAiOiAiXjAuMzQuNSIKICB9LAogICJkZXZEZXBlbmRlbmNpZXMiOiB7CiAgICAiQHR5cGVzL2JjcnlwdGpzIjogIl4yLjQuNiIsCiAgICAiQHR5cGVzL2JvZHktcGFyc2VyIjogIl4xLjE5LjUiLAogICAgIkB0eXBlcy9jaGVlcmlvIjogIl4wLjIyLjM1IiwKICAgICJAdHlwZXMvY29ycyI6ICJeMi44LjE3IiwKICAgICJAdHlwZXMvZWpzIjogIl4zLjEuNSIsCiAgICAiQHR5cGVzL2V4cHJlc3MiOiAiXjQuMTcuMjEiLAogICAgIkB0eXBlcy9leHByZXNzLW15c3FsLXNlc3Npb24iOiAiXjMuMC44IiwKICAgICJAdHlwZXMvZXhwcmVzcy1zZXNzaW9uIjogIl4xLjE3LjEwIiwKICAgICJAdHlwZXMvbm9kZSI6ICJeMjAuMTAuMCIsCiAgICAiQHR5cGVzL25vZGUtY3JvbiI6ICJeMy4wLjExIiwKICAgICJAdHlwZXMvbm9kZW1haWxlciI6ICJeNi40LjE0IiwKICAgICJ0cy1ub2RlIjogIl4xMC45LjIiLAogICAgInRzLW5vZGUtZGV2IjogIl4yLjAuMCIsCiAgICAidHlwZXNjcmlwdCI6ICJeNS4zLjIiCiAgfSwKICAiZW5naW5lcyI6IHsKICAgICJub2RlIjogIj49MTYuMC4wIgogIH0sCiAgImxpY2Vuc2UiOiAiTUlUIgp9Cg==","afterExisted":true,"afterHash":"69dcd65380d1f1aec161982a1a3b632b36a62b21f612c71e254ac6e1b571dbca","afterContent":"ewogICJuYW1lIjogImxsaXJpYS1wcm9wZXJ0aWVzLXNjcmFwZXIiLAogICJ2ZXJzaW9uIjogIjEuMC4wIiwKICAiZGVzY3JpcHRpb24iOiAiQXBsaWNhY2nDs24gd2ViIHBhcmEgc2NyYXBpbmcgYXV0b23DoXRpY28gZGUgcHJvcGllZGFkZXMgZW4gdmVudGEgZW4gTGxpcmlhIHkgYWxyZWRlZG9yZXMsIGNvbiBlbnbDrW8gZGUgY29ycmVvcyBlbGVjdHLDs25pY29zIGF1dG9tw6F0aWNvcyBzZWfDum4gZmlsdHJvcyBlc3RhYmxlY2lkb3MuIiwKICAibWFpbiI6ICJkaXN0L2FwcC5qcyIsCiAgInNjcmlwdHMiOiB7CiAgICAic3RhcnQiOiAibm9kZSBkaXN0L2FwcC5qcyIsCiAgICAiYnVpbGQiOiAidHNjIiwKICAgICJ0ZXN0OnJlbnRhbC1yb3V0aW5nIjogIm5wbSBydW4gYnVpbGQgJiYgbm9kZSB0ZXN0LXJlbnRhbC1yb3V0aW5nLmpzIiwKICAgICJkZXYiOiAidHMtbm9kZS1kZXYgLS1yZXNwYXduIC0tdHJhbnNwaWxlLW9ubHkgc3JjL2FwcC50cyIsCiAgICAiZGV2OnRzIjogInRzLW5vZGUgc3JjL2FwcC50cyIsCiAgICAiaW5pdC1kYiI6ICJ0cy1ub2RlIHNyYy9jb25maWcvaW5pdERiLnRzIiwKICAgICJwb3B1bGF0ZS1tdW5pY2lwYWxpdGllcyI6ICJ0cy1ub2RlIHNyYy9zY3JpcHRzL3BvcHVsYXRlTXVuaWNpcGFsaXRpZXMudHMiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgImF4aW9zIjogIl4xLjYuMiIsCiAgICAiYmNyeXB0anMiOiAiXjIuNC4zIiwKICAgICJib2R5LXBhcnNlciI6ICJeMS4yMC4yIiwKICAgICJjaGVlcmlvIjogIl4xLjAuMC1yYy4xMiIsCiAgICAiY29ycyI6ICJeMi44LjUiLAogICAgImRvdGVudiI6ICJeMTYuMy4xIiwKICAgICJlanMiOiAiXjMuMS4xMCIsCiAgICAiZXhjZWxqcyI6ICJeNC40LjAiLAogICAgImV4cHJlc3MiOiAiXjQuMTguMiIsCiAgICAiZXhwcmVzcy1teXNxbC1zZXNzaW9uIjogIl4zLjAuMyIsCiAgICAiZXhwcmVzcy1yYXRlLWxpbWl0IjogIl44LjIuMSIsCiAgICAiZXhwcmVzcy1zZXNzaW9uIjogIl4xLjE3LjMiLAogICAgIm15c3FsMiI6ICJeMy42LjUiLAogICAgIm5vZGUtY3JvbiI6ICJeMy4wLjMiLAogICAgIm5vZGVtYWlsZXIiOiAiXjguMC4xIiwKICAgICJwLWxpbWl0IjogIl43LjMuMCIsCiAgICAicGxheXdyaWdodCI6ICJeMS41OC4yIiwKICAgICJwdXBwZXRlZXItZXh0cmEiOiAiXjMuMy42IiwKICAgICJwdXBwZXRlZXItZXh0cmEtcGx1Z2luLXN0ZWFsdGgiOiAiXjIuMTEuMiIsCiAgICAic2hhcnAiOiAiXjAuMzQuNSIKICB9LAogICJkZXZEZXBlbmRlbmNpZXMiOiB7CiAgICAiQHR5cGVzL2JjcnlwdGpzIjogIl4yLjQuNiIsCiAgICAiQHR5cGVzL2JvZHktcGFyc2VyIjogIl4xLjE5LjUiLAogICAgIkB0eXBlcy9jaGVlcmlvIjogIl4wLjIyLjM1IiwKICAgICJAdHlwZXMvY29ycyI6ICJeMi44LjE3IiwKICAgICJAdHlwZXMvZWpzIjogIl4zLjEuNSIsCiAgICAiQHR5cGVzL2V4cHJlc3MiOiAiXjQuMTcuMjEiLAogICAgIkB0eXBlcy9leHByZXNzLW15c3FsLXNlc3Npb24iOiAiXjMuMC44IiwKICAgICJAdHlwZXMvZXhwcmVzcy1zZXNzaW9uIjogIl4xLjE3LjEwIiwKICAgICJAdHlwZXMvbm9kZSI6ICJeMjAuMTAuMCIsCiAgICAiQHR5cGVzL25vZGUtY3JvbiI6ICJeMy4wLjExIiwKICAgICJAdHlwZXMvbm9kZW1haWxlciI6ICJeNi40LjE0IiwKICAgICJ0cy1ub2RlIjogIl4xMC45LjIiLAogICAgInRzLW5vZGUtZGV2IjogIl4yLjAuMCIsCiAgICAidHlwZXNjcmlwdCI6ICJeNS4zLjIiCiAgfSwKICAiZW5naW5lcyI6IHsKICAgICJub2RlIjogIj49MTYuMC4wIgogIH0sCiAgImxpY2Vuc2UiOiAiTUlUIgp9Cg==","decision":"accepted","decidedAt":"2026-07-22T10:45:55.017Z"},{"relativePath":"lliria-properties-scraper\\src\\app.ts","beforeExisted":true,"beforeHash":"235d6e5409c90cbe6a1010cbd7e7a1e3d5de8069d49054ed3b441288bedf5328","beforeContent":"aW1wb3J0ICJkb3RlbnYvY29uZmlnIjsKaW1wb3J0IGV4cHJlc3MsIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gImV4cHJlc3MiOwppbXBvcnQgc2Vzc2lvbiBmcm9tICJleHByZXNzLXNlc3Npb24iOwppbXBvcnQgTXlTUUxTdG9yZUZhY3RvcnkgZnJvbSAiZXhwcmVzcy1teXNxbC1zZXNzaW9uIjsKaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAiYm9keS1wYXJzZXIiOwppbXBvcnQgY29ycyBmcm9tICJjb3JzIjsKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCByYXRlTGltaXQgZnJvbSAiZXhwcmVzcy1yYXRlLWxpbWl0IjsKaW1wb3J0IHsgY29ubmVjdERCIH0gZnJvbSAiLi9jb25maWcvZGIiOwppbXBvcnQgcG9vbCBmcm9tICIuL2NvbmZpZy9kYiI7CmltcG9ydCBhdXRoUm91dGVzIGZyb20gIi4vcm91dGVzL2F1dGhSb3V0ZXMiOwppbXBvcnQgcHJvcGVydHlSb3V0ZXMgZnJvbSAiLi9yb3V0ZXMvcHJvcGVydHlSb3V0ZXMiOwppbXBvcnQgc2NyYXBlclJvdXRlcyBmcm9tICIuL3JvdXRlcy9zY3JhcGVyUm91dGVzIjsKaW1wb3J0IGZpbHRlclJvdXRlcyBmcm9tICIuL3JvdXRlcy9maWx0ZXJSb3V0ZXMiOwppbXBvcnQgbWFwUm91dGVzIGZyb20gIi4vcm91dGVzL21hcFJvdXRlcyI7CmltcG9ydCB6b25lUm91dGVzIGZyb20gIi4vcm91dGVzL3pvbmVSb3V0ZXMiOwppbXBvcnQgcG9ydGFsUm91dGVzIGZyb20gIi4vcm91dGVzL3BvcnRhbFJvdXRlcyI7CmltcG9ydCBhbmFseXRpY3NSb3V0ZXMgZnJvbSAiLi9yb3V0ZXMvYW5hbHl0aWNzUm91dGVzIjsKaW1wb3J0IG11bmljaXBhbGl0eVJvdXRlcyBmcm9tICIuL3JvdXRlcy9tdW5pY2lwYWxpdHlSb3V0ZXMiOwppbXBvcnQgdmFsZW5jaWFEaXN0cmljdFJvdXRlcyBmcm9tICIuL3JvdXRlcy92YWxlbmNpYURpc3RyaWN0Um91dGVzIjsKaW1wb3J0IGFpUm91dGVzIGZyb20gIi4vcm91dGVzL2FpUm91dGVzIjsKaW1wb3J0IGFpQWRtaW5Sb3V0ZXMgZnJvbSAiLi9yb3V0ZXMvYWlBZG1pblJvdXRlcyI7CmltcG9ydCB7IHJlcXVpcmVBZG1pbiB9IGZyb20gIi4vbWlkZGxld2FyZS9yZXF1aXJlQWRtaW4iOwppbXBvcnQgeyByZXF1aXJlQXV0aCB9IGZyb20gIi4vbWlkZGxld2FyZS9hdXRoIjsKaW1wb3J0IHsgc3RhcnRTY2hlZHVsZXIsIGdldFNjaGVkdWxlclN0YXR1cywgZ2V0UmVjZW50U2NyYXBpbmdMb2dzIH0gZnJvbSAiLi9zZXJ2aWNlcy9zY2hlZHVsZXJTZXJ2aWNlIjsKaW1wb3J0IHsgRmlsdGVyTW9kZWwgfSBmcm9tICIuL21vZGVscy9maWx0ZXJNb2RlbCI7CmltcG9ydCB7IFByb3BlcnR5TW9kZWwgfSBmcm9tICIuL21vZGVscy9wcm9wZXJ0eU1vZGVsIjsKaW1wb3J0IHsgWm9uZU1vZGVsIH0gZnJvbSAiLi9tb2RlbHMvem9uZU1vZGVsIjsKaW1wb3J0IHsgUG9ydGFsTW9kZWwgfSBmcm9tICIuL21vZGVscy9wb3J0YWxNb2RlbCI7CmltcG9ydCB7IGdlbmVyYXRlUG5nSWNvbnMgfSBmcm9tICIuL3V0aWxzL2dlbmVyYXRlSWNvbnMiOwppbXBvcnQgeyBWQUxFTkNJQV9ORUlHSEJPUkhPT0RTIH0gZnJvbSAiLi9jb25maWcvdmFsZW5jaWFOZWlnaGJvcmhvb2RzIjsKY29uc3QgYXBwID0gZXhwcmVzcygpOwpjb25zdCBQT1JUID0gTnVtYmVyKHByb2Nlc3MuZW52LlBPUlQpIHx8IDMwMDA7CgovLyBNeVNRTCBzZXNzaW9uIHN0b3JlIChldml0YSB3YXJuaW5nIGRlIE1lbW9yeVN0b3JlIGVuIHByb2R1Y2Npw7NuKQpjb25zdCBNeVNRTFN0b3JlID0gTXlTUUxTdG9yZUZhY3Rvcnkoc2Vzc2lvbik7CmNvbnN0IHNlc3Npb25TdG9yZSA9IG5ldyBNeVNRTFN0b3JlKAogIHsgY3JlYXRlRGF0YWJhc2VUYWJsZTogdHJ1ZSwgY2xlYXJFeHBpcmVkOiB0cnVlLCBjaGVja0V4cGlyYXRpb25JbnRlcnZhbDogOTAwMDAwLCBleHBpcmF0aW9uOiA4NjQwMDAwMCB9LAogIChwb29sIGFzIGFueSkucG9vbAopOwoKLy8gTWlkZGxld2FyZQphcHAudXNlKGNvcnMoKSk7CmFwcC51c2UoYm9keVBhcnNlci5qc29uKCkpOwphcHAudXNlKGJvZHlQYXJzZXIudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiB0cnVlIH0pKTsKYXBwLnVzZSgKICBzZXNzaW9uKHsKICAgIHNlY3JldDogcHJvY2Vzcy5lbnYuU0VTU0lPTl9TRUNSRVQgfHwgImxsaXJpYV9zZWNyZXRfa2V5XzIwMjQiLAogICAgc3RvcmU6IHNlc3Npb25TdG9yZSwKICAgIHJlc2F2ZTogZmFsc2UsCiAgICBzYXZlVW5pbml0aWFsaXplZDogZmFsc2UsCiAgICBjb29raWU6IHsgc2VjdXJlOiBmYWxzZSwgbWF4QWdlOiAyNCAqIDYwICogNjAgKiAxMDAwIH0sCiAgfSkKKTsKCi8vIFJhdGUgbGltaXRpbmcgcGFyYSBsb2dpbiAocHJvdGVjY2nDs24gYW50aS1icnV0ZWZvcmNlKQpjb25zdCBsb2dpblJhdGVNYXggPSBOdW1iZXIocHJvY2Vzcy5lbnYuQVVUSF9MT0dJTl9SQVRFX01BWCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICJwcm9kdWN0aW9uIiA/IDEwIDogNjApKTsKY29uc3QgbG9naW5MaW1pdGVyID0gcmF0ZUxpbWl0KHsKICB3aW5kb3dNczogMTUgKiA2MCAqIDEwMDAsCiAgbWF4OiBsb2dpblJhdGVNYXgsCiAgbWVzc2FnZTogIkRlbWFzaWFkb3MgaW50ZW50b3MgZGUgaW5pY2lvIGRlIHNlc2nDs24uIEludMOpbnRhbG8gZW4gMTUgbWludXRvcy4iLAogIHN0YW5kYXJkSGVhZGVyczogdHJ1ZSwKICBsZWdhY3lIZWFkZXJzOiBmYWxzZSwKICBza2lwOiAocmVxKSA9PiB7CiAgICBjb25zdCBpcCA9IFN0cmluZyhyZXEuaXAgfHwgcmVxLnNvY2tldD8ucmVtb3RlQWRkcmVzcyB8fCAiIikucmVwbGFjZSgvXjo6ZmZmZjovLCAiIik7CiAgICByZXR1cm4gKAogICAgICBpcCA9PT0gIjEyNy4wLjAuMSIgfHwKICAgICAgaXAuc3RhcnRzV2l0aCgiMTkyLjE2OC4iKSB8fAogICAgICBpcC5zdGFydHNXaXRoKCIxMDAuIikgfHwKICAgICAgaXAuc3RhcnRzV2l0aCgiMTAuIikKICAgICk7CiAgfSwKfSk7CmFwcC51c2UoIi9sb2dpbiIsIGxvZ2luTGltaXRlcik7CgovLyBWaWV3IGVuZ2luZQphcHAuc2V0KCJ2aWV3IGVuZ2luZSIsICJlanMiKTsKYXBwLnNldCgidmlld3MiLCBwYXRoLmpvaW4oX19kaXJuYW1lLCAiLi4iLCAic3JjIiwgInZpZXdzIikpOwppZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICJwcm9kdWN0aW9uIikgYXBwLnNldCgidmlldyBjYWNoZSIsIGZhbHNlKTsKCi8vIEFyY2hpdm9zIGVzdGF0aWNvcwphcHAudXNlKGV4cHJlc3Muc3RhdGljKHBhdGguam9pbihfX2Rpcm5hbWUsICIuLiIsICJwdWJsaWMiKSkpOwoKYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHsKICByZXMubG9jYWxzLnNlc3Npb25Sb2xlID0gKHJlcS5zZXNzaW9uIGFzIHsgcm9sZT86IHN0cmluZyB9KS5yb2xlIHx8ICIiOwogIHJlcy5sb2NhbHMuc2Vzc2lvblVzZXIgPSAocmVxLnNlc3Npb24gYXMgeyB1c2VybmFtZT86IHN0cmluZyB9KS51c2VybmFtZSB8fCAiIjsKICBuZXh0KCk7Cn0pOwoKLy8gUmVkaXJlY2Npb24gcmFpegphcHAuZ2V0KCIvIiwgKF9yZXEsIHJlcykgPT4gcmVzLnJlZGlyZWN0KCIvbG9naW4iKSk7CgovLyBSdXRhcyBkZSBhdXRlbnRpY2FjaW9uIChzaW4gcHJvdGVjY2lvbikKYXBwLnVzZSgiLyIsIGF1dGhSb3V0ZXMpOwphcHAuZ2V0KCIvbG9naW4iLCAoX3JlcSwgcmVzKSA9PiByZXMucmVkaXJlY3QoIi9sb2dpbiIpKTsgLy8geWEgY3ViaWVydG8gcG9yIGF1dGhSb3V0ZXMKCi8vIERhc2hib2FyZCBwcmluY2lwYWwKYXBwLmdldCgiL2Rhc2hib2FyZCIsIHJlcXVpcmVBdXRoLCBhc3luYyAocmVxLCByZXMpID0+IHsKICB0cnkgewogICAgY29uc3Qgb3BlcmF0aW9uID0gU3RyaW5nKHJlcS5xdWVyeS5vcCB8fCAic2FsZSIpLnRvTG93ZXJDYXNlKCkgPT09ICJyZW50IiA/ICJyZW50IiA6ICJzYWxlIjsKICAgIGNvbnN0IFtzdGF0cywgcG9ydGFscywgem9uZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICBQcm9wZXJ0eU1vZGVsLmdldFN0YXRzKG9wZXJhdGlvbiksCiAgICAgIFBvcnRhbE1vZGVsLmZpbmRBbGwoKSwKICAgICAgWm9uZU1vZGVsLmZpbmRBbGwoKSwKICAgIF0pOwogICAgcmVzLnJlbmRlcigiZGFzaGJvYXJkL2luZGV4IiwgewogICAgICBwb3J0YWxzLAogICAgICB6b25lcywKICAgICAgdXNlcjogKHJlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgIkdlb3JnZSIsCiAgICAgIGNvdW50OiBzdGF0cy50b3RhbCwKICAgICAgYXZnX3ByaWNlOiBzdGF0cy5hdmdfcHJpY2UsCiAgICAgIG1pbl9wcmljZTogc3RhdHMubWluX3ByaWNlLAogICAgICBzb3VyY2VfY291bnQ6IHN0YXRzLnNvdXJjZV9jb3VudCwKICAgICAgb3BlcmF0aW9uLAogICAgICB2YWxlbmNpYV9uZWlnaGJvcmhvb2RzOiBWQUxFTkNJQV9ORUlHSEJPUkhPT0RTLAogICAgfSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgiRXJyb3IgYWwgY2FyZ2FyIGVsIGRhc2hib2FyZCIpOwogIH0KfSk7CgovLyBWaXN0YSBkZWwgYXJjaGl2byBkZSBwcm9waWVkYWRlcyBlbGltaW5hZGFzCmFwcC5nZXQoIi9kYXNoYm9hcmQvYXJjaGl2ZSIsIHJlcXVpcmVBdXRoLCBhc3luYyAocmVxLCByZXMpID0+IHsKICB0cnkgewogICAgcmVzLnJlbmRlcigiZGFzaGJvYXJkL2FyY2hpdmUiLCB7CiAgICAgIHVzZXI6IChyZXEuc2Vzc2lvbiBhcyBhbnkpLnVzZXJuYW1lIHx8ICJHZW9yZ2UiLAogICAgfSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgiRXJyb3IgYWwgY2FyZ2FyIGVsIGFyY2hpdm8iKTsKICB9Cn0pOwoKLy8gVmlzdGEgZGUgZmlsdHJvcwphcHAuZ2V0KCIvZGFzaGJvYXJkL2ZpbHRlcnMiLCByZXF1aXJlQXV0aCwgYXN5bmMgKF9yZXEsIHJlcykgPT4gewogIHRyeSB7CiAgICBjb25zdCBbZmlsdGVycywgcG9ydGFsc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIEZpbHRlck1vZGVsLmZpbmRBbGwoKSwKICAgICAgUG9ydGFsTW9kZWwuZmluZEFsbCgpLAogICAgXSk7CiAgICByZXMucmVuZGVyKCJkYXNoYm9hcmQvZmlsdGVycyIsIHsKICAgICAgZmlsdGVycywKICAgICAgcG9ydGFscywKICAgICAgdXNlcjogKF9yZXEuc2Vzc2lvbiBhcyBhbnkpLnVzZXJuYW1lIHx8ICJHZW9yZ2UiLAogICAgfSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgiRXJyb3IgYWwgY2FyZ2FyIGZpbHRyb3MiKTsKICB9Cn0pOwoKLy8gVmlzdGEgZGUgbWFwYQphcHAuZ2V0KCIvZGFzaGJvYXJkL21hcCIsIHJlcXVpcmVBdXRoLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7CiAgdHJ5IHsKICAgIGNvbnN0IG9wZXJhdGlvbiA9IFN0cmluZyhfcmVxLnF1ZXJ5Lm9wIHx8ICJzYWxlIikudG9Mb3dlckNhc2UoKSA9PT0gInJlbnQiID8gInJlbnQiIDogInNhbGUiOwogICAgY29uc3QgW3Byb3BzLCB6b25lc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIFByb3BlcnR5TW9kZWwuZmluZEZvck1hcChvcGVyYXRpb24pLAogICAgICBab25lTW9kZWwuZmluZEFsbCgpLAogICAgXSk7CiAgICByZXMucmVuZGVyKCJkYXNoYm9hcmQvbWFwIiwgewogICAgICBwcm9wZXJ0aWVzOiBwcm9wcywKICAgICAgem9uZXMsCiAgICAgIHVzZXI6IChfcmVxLnNlc3Npb24gYXMgYW55KS51c2VybmFtZSB8fCAiR2VvcmdlIiwKICAgICAgb3BlcmF0aW9uLAogICAgfSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgiRXJyb3IgYWwgY2FyZ2FyIG1hcGEiKTsKICB9Cn0pOwoKLy8gVmlzdGEgZGUgem9uYXMKYXBwLmdldCgiL2Rhc2hib2FyZC96b25lcyIsIHJlcXVpcmVBdXRoLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7CiAgdHJ5IHsKICAgIHJlcy5yZW5kZXIoImRhc2hib2FyZC96b25lcyIsIHsKICAgICAgdXNlcjogKF9yZXEuc2Vzc2lvbiBhcyBhbnkpLnVzZXJuYW1lIHx8ICJHZW9yZ2UiLAogICAgfSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgiRXJyb3IgYWwgY2FyZ2FyIHpvbmFzIik7CiAgfQp9KTsKCi8vIFZpc3RhIElBIOKAlCByZWNvbWVuZGFjaW9uZXMgbXVsdGlhZ2VudCAob3BlcmFkb3IgR2VvcmdlKQphcHAuZ2V0KCIvZGFzaGJvYXJkL2FpIiwgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4gewogIGlmICgocmVxLnNlc3Npb24gYXMgYW55KS5yb2xlID09PSAiaWFfYWRtaW4iKSB7CiAgICByZXMucmVkaXJlY3QoIi9kYXNoYm9hcmQvYWktYWRtaW4iKTsKICAgIHJldHVybjsKICB9CiAgY29uc3QgYnJpZGdlVXJsID0gcHJvY2Vzcy5lbnYuQ1VSU09SX0JSSURHRV9VUkwgfHwgImh0dHA6Ly8xMDAuNzguMTk4Ljk4OjgwOTUiOwogIHJlcy5yZW5kZXIoImRhc2hib2FyZC9haSIsIHsKICAgIHVzZXI6IChyZXEuc2Vzc2lvbiBhcyBhbnkpLnVzZXJuYW1lIHx8ICJHZW9yZ2UiLAogICAgYnJpZGdlVXJsLAogIH0pOwp9KTsKCi8vIFBvcnRhbCBJQSBhdmFuemFkbyDigJQgc29sbyBhZG1pbgphcHAuZ2V0KCIvZGFzaGJvYXJkL2FpLWFkbWluIiwgcmVxdWlyZUFkbWluLCBhc3luYyAocmVxLCByZXMpID0+IHsKICBjb25zdCBicmlkZ2VVcmwgPSBwcm9jZXNzLmVudi5DVVJTT1JfQlJJREdFX1VSTCB8fCAiaHR0cDovLzEwMC43OC4xOTguOTg6ODA5NSI7CiAgcmVzLnJlbmRlcigiZGFzaGJvYXJkL2FpLWFkbWluIiwgewogICAgdXNlcjogKHJlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgImFkbWluIiwKICAgIGJyaWRnZVVybCwKICB9KTsKfSk7CgovLyBWaXN0YSBkZSBwb3J0YWxlcwphcHAuZ2V0KCIvZGFzaGJvYXJkL3BvcnRhbHMiLCByZXF1aXJlQXV0aCwgYXN5bmMgKF9yZXEsIHJlcykgPT4gewogIHRyeSB7CiAgICByZXMucmVuZGVyKCJkYXNoYm9hcmQvcG9ydGFscyIsIHsKICAgICAgdXNlcjogKF9yZXEuc2Vzc2lvbiBhcyBhbnkpLnVzZXJuYW1lIHx8ICJHZW9yZ2UiLAogICAgfSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXMuc3RhdHVzKDUwMCkuc2VuZCgiRXJyb3IgYWwgY2FyZ2FyIHBvcnRhbGVzIik7CiAgfQp9KTsKCi8vIFJ1dGEgb2ZmbGluZSAoU2VydmljZSBXb3JrZXIgZmFsbGJhY2spCmFwcC5nZXQoIi9vZmZsaW5lIiwgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHsKICByZXMucmVuZGVyKCJvZmZsaW5lIik7Cn0pOwoKLy8gQVBJIHJvdXRlcwphcHAudXNlKCIvYXBpL3Byb3BlcnRpZXMiLCBwcm9wZXJ0eVJvdXRlcyk7CmFwcC51c2UoIi9hcGkvc2NyYXBlciIsIHNjcmFwZXJSb3V0ZXMpOwphcHAudXNlKCIvYXBpL2ZpbHRlcnMiLCBmaWx0ZXJSb3V0ZXMpOwphcHAudXNlKCIvYXBpL21hcCIsIG1hcFJvdXRlcyk7CmFwcC51c2UoIi9hcGkvem9uZXMiLCB6b25lUm91dGVzKTsKYXBwLnVzZSgiL2FwaS9wb3J0YWxzIiwgcG9ydGFsUm91dGVzKTsKYXBwLnVzZSgiL2FwaS9tdW5pY2lwYWxpdGllcyIsIG11bmljaXBhbGl0eVJvdXRlcyk7CmFwcC51c2UoIi9hcGkvdmFsZW5jaWEtZGlzdHJpY3RzIiwgdmFsZW5jaWFEaXN0cmljdFJvdXRlcyk7CmFwcC51c2UoIi9hcGkvYWkiLCBhaVJvdXRlcyk7CmFwcC51c2UoIi9hcGkvYWktYWRtaW4iLCBhaUFkbWluUm91dGVzKTsKYXBwLnVzZSgiLyIsIGFuYWx5dGljc1JvdXRlcyk7CgovLyBBUEk6IEVzdGFkbyBkZWwgc2NoZWR1bGVyIHkgbG9ncyBkZSBzY3JhcGluZwphcHAuZ2V0KCIvYXBpL3NjaGVkdWxlci9zdGF0dXMiLCByZXF1aXJlQXV0aCwgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHsKICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IGdldFNjaGVkdWxlclN0YXR1cygpIH0pOwp9KTsKYXBwLmdldCgiL2FwaS9zY2hlZHVsZXIvbG9ncyIsIHJlcXVpcmVBdXRoLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gewogIGNvbnN0IGxvZ3MgPSBhd2FpdCBnZXRSZWNlbnRTY3JhcGluZ0xvZ3MoMjApOwogIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogbG9ncyB9KTsKfSk7CgovLyBJbmljaW8gZGVsIHNlcnZpZG9yCmNvbnN0IHN0YXJ0ID0gYXN5bmMgKCkgPT4gewogIGF3YWl0IGNvbm5lY3REQigpOwoKICAvLyBNaWdyYWNpw7NuOiBhw7FhZGlyIGNvbHVtbmEgZGVsZXRlZF9hdCBzaSBubyBleGlzdGUgKHNhZmUgdG8gcnVuIG11bHRpcGxlIHRpbWVzKQogIHRyeSB7CiAgICBhd2FpdCBwb29sLnF1ZXJ5KGBBTFRFUiBUQUJMRSBwcm9wZXJ0aWVzCiAgICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBkZWxldGVkX2F0IERBVEVUSU1FIE5VTEwgREVGQVVMVCBOVUxMLAogICAgICBBREQgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfZGVsZXRlZCAoZGVsZXRlZF9hdClgKTsKICAgIGF3YWl0IHBvb2wucXVlcnkoYEFMVEVSIFRBQkxFIHByb3BlcnRpZXMKICAgICAgQUREIENPTFVNTiBJRiBOT1QgRVhJU1RTIG9wZXJhdGlvbl90eXBlIEVOVU0oJ3NhbGUnLCdyZW50JykgTk9UIE5VTEwgREVGQVVMVCAnc2FsZScsCiAgICAgIEFERCBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9vcGVyYXRpb25fdHlwZSAob3BlcmF0aW9uX3R5cGUpYCk7CiAgICBhd2FpdCBwb29sLnF1ZXJ5KGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB2YWxlbmNpYV9kaXN0cmljdF9zbHVncyAoCiAgICAgIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICAgICAgbmFtZSBWQVJDSEFSKDEyMCkgTk9UIE5VTEwgVU5JUVVFLAogICAgICBpZGVhbGlzdGFfc2x1ZyBWQVJDSEFSKDE2MCkgTk9UIE5VTEwsCiAgICAgIGZvdG9jYXNhX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogICAgICBwaXNvc19zbHVnIFZBUkNIQVIoMTYwKSBOT1QgTlVMTCwKICAgICAgYWN0aXZlIFRJTllJTlQoMSkgREVGQVVMVCAxLAogICAgICBzb3J0X29yZGVyIElOVCBERUZBVUxUIDk5OSwKICAgICAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAogICAgKWApOwogICAgY29uc29sZS5sb2coIltEQl0gQ29sdW1uYSBkZWxldGVkX2F0IHZlcmlmaWNhZGEvYcOxYWRpZGEuIik7CgogICAgLy8gUHVyZ2EgaW5pY2lhbDogbGltcGlhciByZWdpc3Ryb3MgZW4gYXJjaGl2byA+MzAgZMOtYXMKICAgIGNvbnN0IHsgUHJvcGVydHlNb2RlbDogUE0gfSA9IGF3YWl0IGltcG9ydCgiLi9tb2RlbHMvcHJvcGVydHlNb2RlbCIpOwogICAgY29uc3QgcHVyZ2VkID0gYXdhaXQgUE0ucHVyZ2VPbGREZWxldGVkKCk7CiAgICBpZiAocHVyZ2VkID4gMCkgY29uc29sZS5sb2coYFtEQl0gUHVyZ2Fkb3MgJHtwdXJnZWR9IGFudW5jaW9zIGRlbCBhcmNoaXZvICg+MzAgZMOtYXMpLmApOwogIH0gY2F0Y2ggKGU6IGFueSkgewogICAgY29uc29sZS53YXJuKCJbREJdIE1pZ3JhY2nDs24gZGVsZXRlZF9hdDoiLCBlLm1lc3NhZ2UpOwogIH0KCiAgLy8gR2VuZXJhciBpY29ub3MgUE5HIHBhcmEgUFdBIChkZXNkZSBpY29uLnN2ZykKICBhd2FpdCBnZW5lcmF0ZVBuZ0ljb25zKCkuY2F0Y2goKGUpID0+IGNvbnNvbGUud2FybigiW0ljb25zXSIsIGUubWVzc2FnZSkpOwogIGFwcC5saXN0ZW4oUE9SVCwgKCkgPT4gewogICAgY29uc29sZS5sb2coYFNlcnZpZG9yIGFycmFuY2FkbyBlbiBodHRwOi8vbG9jYWxob3N0OiR7UE9SVH1gKTsKICAgIGNvbnNvbGUubG9nKGBEYXNoYm9hcmQ6IGh0dHA6Ly9sb2NhbGhvc3Q6JHtQT1JUfS9kYXNoYm9hcmRgKTsKICAgIGNvbnNvbGUubG9nKGBMb2dpbjogR2VvcmdlIC8gNDIxM2ApOwogIH0pOwogIHN0YXJ0U2NoZWR1bGVyKCk7Cn07CgpzdGFydCgpLmNhdGNoKChlcnIpID0+IHsKICBjb25zb2xlLmVycm9yKCJFcnJvciBhbCBpbmljaWFyOiIsIGVycik7CiAgcHJvY2Vzcy5leGl0KDEpOwp9KTsKCi8vIEVycm9yIGhhbmRsZXIgY2VudHJhbGl6YWRvIChkZWJlIGlyIERFU1BVw4lTIGRlIHRvZGFzIGxhcyBydXRhcykKYXBwLnVzZSgoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gewogIHJlcy5zdGF0dXMoNDA0KS5yZW5kZXIoImVycm9yIiwgeyBtZXNzYWdlOiAiUMOhZ2luYSBubyBlbmNvbnRyYWRhICg0MDQpIiwgdXNlcjogbnVsbCB9KTsKfSk7CgovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzCmFwcC51c2UoKGVycjogRXJyb3IsIF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIF9uZXh0OiBOZXh0RnVuY3Rpb24pID0+IHsKICBjb25zb2xlLmVycm9yKCJbRXJyb3IgSGFuZGxlcl0iLCBlcnIubWVzc2FnZSwgZXJyLnN0YWNrKTsKICByZXMuc3RhdHVzKDUwMCkucmVuZGVyKCJlcnJvciIsIHsgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfHwgIkVycm9yIGludGVybm8gZGVsIHNlcnZpZG9yIiwgdXNlcjogbnVsbCB9KTsKfSk7CgpleHBvcnQgZGVmYXVsdCBhcHA7Cg==","afterExisted":true,"afterHash":"021aec4d7aa5cc3f3772e5d3e90d3c5161a36051bc24b46ce5ff4d0c1c1be51b","afterContent":"aW1wb3J0ICJkb3RlbnYvY29uZmlnIjsKaW1wb3J0IGV4cHJlc3MsIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gImV4cHJlc3MiOwppbXBvcnQgc2Vzc2lvbiBmcm9tICJleHByZXNzLXNlc3Npb24iOwppbXBvcnQgTXlTUUxTdG9yZUZhY3RvcnkgZnJvbSAiZXhwcmVzcy1teXNxbC1zZXNzaW9uIjsKaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAiYm9keS1wYXJzZXIiOwppbXBvcnQgY29ycyBmcm9tICJjb3JzIjsKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCByYXRlTGltaXQgZnJvbSAiZXhwcmVzcy1yYXRlLWxpbWl0IjsKaW1wb3J0IHsgY29ubmVjdERCIH0gZnJvbSAiLi9jb25maWcvZGIiOwppbXBvcnQgcG9vbCBmcm9tICIuL2NvbmZpZy9kYiI7CmltcG9ydCBhdXRoUm91dGVzIGZyb20gIi4vcm91dGVzL2F1dGhSb3V0ZXMiOwppbXBvcnQgcHJvcGVydHlSb3V0ZXMgZnJvbSAiLi9yb3V0ZXMvcHJvcGVydHlSb3V0ZXMiOwppbXBvcnQgc2NyYXBlclJvdXRlcyBmcm9tICIuL3JvdXRlcy9zY3JhcGVyUm91dGVzIjsKaW1wb3J0IGZpbHRlclJvdXRlcyBmcm9tICIuL3JvdXRlcy9maWx0ZXJSb3V0ZXMiOwppbXBvcnQgbWFwUm91dGVzIGZyb20gIi4vcm91dGVzL21hcFJvdXRlcyI7CmltcG9ydCB6b25lUm91dGVzIGZyb20gIi4vcm91dGVzL3pvbmVSb3V0ZXMiOwppbXBvcnQgcG9ydGFsUm91dGVzIGZyb20gIi4vcm91dGVzL3BvcnRhbFJvdXRlcyI7CmltcG9ydCBhbmFseXRpY3NSb3V0ZXMgZnJvbSAiLi9yb3V0ZXMvYW5hbHl0aWNzUm91dGVzIjsKaW1wb3J0IG11bmljaXBhbGl0eVJvdXRlcyBmcm9tICIuL3JvdXRlcy9tdW5pY2lwYWxpdHlSb3V0ZXMiOwppbXBvcnQgdmFsZW5jaWFEaXN0cmljdFJvdXRlcyBmcm9tICIuL3JvdXRlcy92YWxlbmNpYURpc3RyaWN0Um91dGVzIjsKaW1wb3J0IGFpUm91dGVzIGZyb20gIi4vcm91dGVzL2FpUm91dGVzIjsKaW1wb3J0IGFpQWRtaW5Sb3V0ZXMgZnJvbSAiLi9yb3V0ZXMvYWlBZG1pblJvdXRlcyI7CmltcG9ydCB7IHJlcXVpcmVBZG1pbiB9IGZyb20gIi4vbWlkZGxld2FyZS9yZXF1aXJlQWRtaW4iOwppbXBvcnQgeyByZXF1aXJlQXV0aCB9IGZyb20gIi4vbWlkZGxld2FyZS9hdXRoIjsKaW1wb3J0IHsgc3RhcnRTY2hlZHVsZXIsIGdldFNjaGVkdWxlclN0YXR1cywgZ2V0UmVjZW50U2NyYXBpbmdMb2dzIH0gZnJvbSAiLi9zZXJ2aWNlcy9zY2hlZHVsZXJTZXJ2aWNlIjsKaW1wb3J0IHsgRmlsdGVyTW9kZWwgfSBmcm9tICIuL21vZGVscy9maWx0ZXJNb2RlbCI7CmltcG9ydCB7IFByb3BlcnR5TW9kZWwgfSBmcm9tICIuL21vZGVscy9wcm9wZXJ0eU1vZGVsIjsKaW1wb3J0IHsgWm9uZU1vZGVsIH0gZnJvbSAiLi9tb2RlbHMvem9uZU1vZGVsIjsKaW1wb3J0IHsgUG9ydGFsTW9kZWwgfSBmcm9tICIuL21vZGVscy9wb3J0YWxNb2RlbCI7CmltcG9ydCB7IGdlbmVyYXRlUG5nSWNvbnMgfSBmcm9tICIuL3V0aWxzL2dlbmVyYXRlSWNvbnMiOwppbXBvcnQgeyBWQUxFTkNJQV9ORUlHSEJPUkhPT0RTIH0gZnJvbSAiLi9jb25maWcvdmFsZW5jaWFOZWlnaGJvcmhvb2RzIjsKaW1wb3J0IHsgVkFMRU5DSUFfRElTVFJJQ1RTIH0gZnJvbSAiLi9jb25maWcvdmFsZW5jaWFEaXN0cmljdHMiOwpjb25zdCBhcHAgPSBleHByZXNzKCk7CmNvbnN0IFBPUlQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuUE9SVCkgfHwgMzAwMDsKCi8vIE15U1FMIHNlc3Npb24gc3RvcmUgKGV2aXRhIHdhcm5pbmcgZGUgTWVtb3J5U3RvcmUgZW4gcHJvZHVjY2nDs24pCmNvbnN0IE15U1FMU3RvcmUgPSBNeVNRTFN0b3JlRmFjdG9yeShzZXNzaW9uKTsKY29uc3Qgc2Vzc2lvblN0b3JlID0gbmV3IE15U1FMU3RvcmUoCiAgeyBjcmVhdGVEYXRhYmFzZVRhYmxlOiB0cnVlLCBjbGVhckV4cGlyZWQ6IHRydWUsIGNoZWNrRXhwaXJhdGlvbkludGVydmFsOiA5MDAwMDAsIGV4cGlyYXRpb246IDg2NDAwMDAwIH0sCiAgKHBvb2wgYXMgYW55KS5wb29sCik7CgovLyBNaWRkbGV3YXJlCmFwcC51c2UoY29ycygpKTsKYXBwLnVzZShib2R5UGFyc2VyLmpzb24oKSk7CmFwcC51c2UoYm9keVBhcnNlci51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUgfSkpOwphcHAudXNlKAogIHNlc3Npb24oewogICAgc2VjcmV0OiBwcm9jZXNzLmVudi5TRVNTSU9OX1NFQ1JFVCB8fCAibGxpcmlhX3NlY3JldF9rZXlfMjAyNCIsCiAgICBzdG9yZTogc2Vzc2lvblN0b3JlLAogICAgcmVzYXZlOiBmYWxzZSwKICAgIHNhdmVVbmluaXRpYWxpemVkOiBmYWxzZSwKICAgIGNvb2tpZTogeyBzZWN1cmU6IGZhbHNlLCBtYXhBZ2U6IDI0ICogNjAgKiA2MCAqIDEwMDAgfSwKICB9KQopOwoKLy8gUmF0ZSBsaW1pdGluZyBwYXJhIGxvZ2luIChwcm90ZWNjacOzbiBhbnRpLWJydXRlZm9yY2UpCmNvbnN0IGxvZ2luUmF0ZU1heCA9IE51bWJlcihwcm9jZXNzLmVudi5BVVRIX0xPR0lOX1JBVEVfTUFYIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gInByb2R1Y3Rpb24iID8gMTAgOiA2MCkpOwpjb25zdCBsb2dpbkxpbWl0ZXIgPSByYXRlTGltaXQoewogIHdpbmRvd01zOiAxNSAqIDYwICogMTAwMCwKICBtYXg6IGxvZ2luUmF0ZU1heCwKICBtZXNzYWdlOiAiRGVtYXNpYWRvcyBpbnRlbnRvcyBkZSBpbmljaW8gZGUgc2VzacOzbi4gSW50w6ludGFsbyBlbiAxNSBtaW51dG9zLiIsCiAgc3RhbmRhcmRIZWFkZXJzOiB0cnVlLAogIGxlZ2FjeUhlYWRlcnM6IGZhbHNlLAogIHNraXA6IChyZXEpID0+IHsKICAgIGNvbnN0IGlwID0gU3RyaW5nKHJlcS5pcCB8fCByZXEuc29ja2V0Py5yZW1vdGVBZGRyZXNzIHx8ICIiKS5yZXBsYWNlKC9eOjpmZmZmOi8sICIiKTsKICAgIHJldHVybiAoCiAgICAgIGlwID09PSAiMTI3LjAuMC4xIiB8fAogICAgICBpcC5zdGFydHNXaXRoKCIxOTIuMTY4LiIpIHx8CiAgICAgIGlwLnN0YXJ0c1dpdGgoIjEwMC4iKSB8fAogICAgICBpcC5zdGFydHNXaXRoKCIxMC4iKQogICAgKTsKICB9LAp9KTsKYXBwLnVzZSgiL2xvZ2luIiwgbG9naW5MaW1pdGVyKTsKCi8vIFZpZXcgZW5naW5lCmFwcC5zZXQoInZpZXcgZW5naW5lIiwgImVqcyIpOwphcHAuc2V0KCJ2aWV3cyIsIHBhdGguam9pbihfX2Rpcm5hbWUsICIuLiIsICJzcmMiLCAidmlld3MiKSk7CmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gInByb2R1Y3Rpb24iKSBhcHAuc2V0KCJ2aWV3IGNhY2hlIiwgZmFsc2UpOwoKLy8gQXJjaGl2b3MgZXN0YXRpY29zCmFwcC51c2UoZXhwcmVzcy5zdGF0aWMocGF0aC5qb2luKF9fZGlybmFtZSwgIi4uIiwgInB1YmxpYyIpKSk7CgphcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4gewogIHJlcy5sb2NhbHMuc2Vzc2lvblJvbGUgPSAocmVxLnNlc3Npb24gYXMgeyByb2xlPzogc3RyaW5nIH0pLnJvbGUgfHwgIiI7CiAgcmVzLmxvY2Fscy5zZXNzaW9uVXNlciA9IChyZXEuc2Vzc2lvbiBhcyB7IHVzZXJuYW1lPzogc3RyaW5nIH0pLnVzZXJuYW1lIHx8ICIiOwogIG5leHQoKTsKfSk7CgovLyBSZWRpcmVjY2lvbiByYWl6CmFwcC5nZXQoIi8iLCAoX3JlcSwgcmVzKSA9PiByZXMucmVkaXJlY3QoIi9sb2dpbiIpKTsKCi8vIFJ1dGFzIGRlIGF1dGVudGljYWNpb24gKHNpbiBwcm90ZWNjaW9uKQphcHAudXNlKCIvIiwgYXV0aFJvdXRlcyk7CmFwcC5nZXQoIi9sb2dpbiIsIChfcmVxLCByZXMpID0+IHJlcy5yZWRpcmVjdCgiL2xvZ2luIikpOyAvLyB5YSBjdWJpZXJ0byBwb3IgYXV0aFJvdXRlcwoKLy8gRGFzaGJvYXJkIHByaW5jaXBhbAphcHAuZ2V0KCIvZGFzaGJvYXJkIiwgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4gewogIHRyeSB7CiAgICBjb25zdCBvcGVyYXRpb24gPSBTdHJpbmcocmVxLnF1ZXJ5Lm9wIHx8ICJzYWxlIikudG9Mb3dlckNhc2UoKSA9PT0gInJlbnQiID8gInJlbnQiIDogInNhbGUiOwogICAgY29uc3QgW3N0YXRzLCBwb3J0YWxzLCB6b25lc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIFByb3BlcnR5TW9kZWwuZ2V0U3RhdHMob3BlcmF0aW9uKSwKICAgICAgUG9ydGFsTW9kZWwuZmluZEFsbCgpLAogICAgICBab25lTW9kZWwuZmluZEFsbCgpLAogICAgXSk7CiAgICByZXMucmVuZGVyKCJkYXNoYm9hcmQvaW5kZXgiLCB7CiAgICAgIHBvcnRhbHMsCiAgICAgIHpvbmVzLAogICAgICB1c2VyOiAocmVxLnNlc3Npb24gYXMgYW55KS51c2VybmFtZSB8fCAiR2VvcmdlIiwKICAgICAgY291bnQ6IHN0YXRzLnRvdGFsLAogICAgICBhdmdfcHJpY2U6IHN0YXRzLmF2Z19wcmljZSwKICAgICAgbWluX3ByaWNlOiBzdGF0cy5taW5fcHJpY2UsCiAgICAgIHNvdXJjZV9jb3VudDogc3RhdHMuc291cmNlX2NvdW50LAogICAgICBvcGVyYXRpb24sCiAgICAgIHZhbGVuY2lhX25laWdoYm9yaG9vZHM6IFZBTEVOQ0lBX05FSUdIQk9SSE9PRFMsCiAgICB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCJFcnJvciBhbCBjYXJnYXIgZWwgZGFzaGJvYXJkIik7CiAgfQp9KTsKCi8vIFZpc3RhIGRlbCBhcmNoaXZvIGRlIHByb3BpZWRhZGVzIGVsaW1pbmFkYXMKYXBwLmdldCgiL2Rhc2hib2FyZC9hcmNoaXZlIiwgcmVxdWlyZUF1dGgsIGFzeW5jIChyZXEsIHJlcykgPT4gewogIHRyeSB7CiAgICByZXMucmVuZGVyKCJkYXNoYm9hcmQvYXJjaGl2ZSIsIHsKICAgICAgdXNlcjogKHJlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgIkdlb3JnZSIsCiAgICB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCJFcnJvciBhbCBjYXJnYXIgZWwgYXJjaGl2byIpOwogIH0KfSk7CgovLyBWaXN0YSBkZSBmaWx0cm9zCmFwcC5nZXQoIi9kYXNoYm9hcmQvZmlsdGVycyIsIHJlcXVpcmVBdXRoLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7CiAgdHJ5IHsKICAgIGNvbnN0IFtmaWx0ZXJzLCBwb3J0YWxzXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgRmlsdGVyTW9kZWwuZmluZEFsbCgpLAogICAgICBQb3J0YWxNb2RlbC5maW5kQWxsKCksCiAgICBdKTsKICAgIHJlcy5yZW5kZXIoImRhc2hib2FyZC9maWx0ZXJzIiwgewogICAgICBmaWx0ZXJzLAogICAgICBwb3J0YWxzLAogICAgICB1c2VyOiAoX3JlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgIkdlb3JnZSIsCiAgICB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCJFcnJvciBhbCBjYXJnYXIgZmlsdHJvcyIpOwogIH0KfSk7CgovLyBWaXN0YSBkZSBtYXBhCmFwcC5nZXQoIi9kYXNoYm9hcmQvbWFwIiwgcmVxdWlyZUF1dGgsIGFzeW5jIChfcmVxLCByZXMpID0+IHsKICB0cnkgewogICAgY29uc3Qgb3BlcmF0aW9uID0gU3RyaW5nKF9yZXEucXVlcnkub3AgfHwgInNhbGUiKS50b0xvd2VyQ2FzZSgpID09PSAicmVudCIgPyAicmVudCIgOiAic2FsZSI7CiAgICBjb25zdCBbcHJvcHMsIHpvbmVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgUHJvcGVydHlNb2RlbC5maW5kRm9yTWFwKG9wZXJhdGlvbiksCiAgICAgIFpvbmVNb2RlbC5maW5kQWxsKCksCiAgICBdKTsKICAgIHJlcy5yZW5kZXIoImRhc2hib2FyZC9tYXAiLCB7CiAgICAgIHByb3BlcnRpZXM6IHByb3BzLAogICAgICB6b25lcywKICAgICAgdXNlcjogKF9yZXEuc2Vzc2lvbiBhcyBhbnkpLnVzZXJuYW1lIHx8ICJHZW9yZ2UiLAogICAgICBvcGVyYXRpb24sCiAgICB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCJFcnJvciBhbCBjYXJnYXIgbWFwYSIpOwogIH0KfSk7CgovLyBWaXN0YSBkZSB6b25hcwphcHAuZ2V0KCIvZGFzaGJvYXJkL3pvbmVzIiwgcmVxdWlyZUF1dGgsIGFzeW5jIChfcmVxLCByZXMpID0+IHsKICB0cnkgewogICAgcmVzLnJlbmRlcigiZGFzaGJvYXJkL3pvbmVzIiwgewogICAgICB1c2VyOiAoX3JlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgIkdlb3JnZSIsCiAgICB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCJFcnJvciBhbCBjYXJnYXIgem9uYXMiKTsKICB9Cn0pOwoKLy8gVmlzdGEgSUEg4oCUIHJlY29tZW5kYWNpb25lcyBtdWx0aWFnZW50IChvcGVyYWRvciBHZW9yZ2UpCmFwcC5nZXQoIi9kYXNoYm9hcmQvYWkiLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7CiAgaWYgKChyZXEuc2Vzc2lvbiBhcyBhbnkpLnJvbGUgPT09ICJpYV9hZG1pbiIpIHsKICAgIHJlcy5yZWRpcmVjdCgiL2Rhc2hib2FyZC9haS1hZG1pbiIpOwogICAgcmV0dXJuOwogIH0KICBjb25zdCBicmlkZ2VVcmwgPSBwcm9jZXNzLmVudi5DVVJTT1JfQlJJREdFX1VSTCB8fCAiaHR0cDovLzEwMC43OC4xOTguOTg6ODA5NSI7CiAgcmVzLnJlbmRlcigiZGFzaGJvYXJkL2FpIiwgewogICAgdXNlcjogKHJlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgIkdlb3JnZSIsCiAgICBicmlkZ2VVcmwsCiAgfSk7Cn0pOwoKLy8gUG9ydGFsIElBIGF2YW56YWRvIOKAlCBzb2xvIGFkbWluCmFwcC5nZXQoIi9kYXNoYm9hcmQvYWktYWRtaW4iLCByZXF1aXJlQWRtaW4sIGFzeW5jIChyZXEsIHJlcykgPT4gewogIGNvbnN0IGJyaWRnZVVybCA9IHByb2Nlc3MuZW52LkNVUlNPUl9CUklER0VfVVJMIHx8ICJodHRwOi8vMTAwLjc4LjE5OC45ODo4MDk1IjsKICByZXMucmVuZGVyKCJkYXNoYm9hcmQvYWktYWRtaW4iLCB7CiAgICB1c2VyOiAocmVxLnNlc3Npb24gYXMgYW55KS51c2VybmFtZSB8fCAiYWRtaW4iLAogICAgYnJpZGdlVXJsLAogIH0pOwp9KTsKCi8vIFZpc3RhIGRlIHBvcnRhbGVzCmFwcC5nZXQoIi9kYXNoYm9hcmQvcG9ydGFscyIsIHJlcXVpcmVBdXRoLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7CiAgdHJ5IHsKICAgIHJlcy5yZW5kZXIoImRhc2hib2FyZC9wb3J0YWxzIiwgewogICAgICB1c2VyOiAoX3JlcS5zZXNzaW9uIGFzIGFueSkudXNlcm5hbWUgfHwgIkdlb3JnZSIsCiAgICB9KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKCJFcnJvciBhbCBjYXJnYXIgcG9ydGFsZXMiKTsKICB9Cn0pOwoKLy8gUnV0YSBvZmZsaW5lIChTZXJ2aWNlIFdvcmtlciBmYWxsYmFjaykKYXBwLmdldCgiL29mZmxpbmUiLCAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gewogIHJlcy5yZW5kZXIoIm9mZmxpbmUiKTsKfSk7CgovLyBBUEkgcm91dGVzCmFwcC51c2UoIi9hcGkvcHJvcGVydGllcyIsIHByb3BlcnR5Um91dGVzKTsKYXBwLnVzZSgiL2FwaS9zY3JhcGVyIiwgc2NyYXBlclJvdXRlcyk7CmFwcC51c2UoIi9hcGkvZmlsdGVycyIsIGZpbHRlclJvdXRlcyk7CmFwcC51c2UoIi9hcGkvbWFwIiwgbWFwUm91dGVzKTsKYXBwLnVzZSgiL2FwaS96b25lcyIsIHpvbmVSb3V0ZXMpOwphcHAudXNlKCIvYXBpL3BvcnRhbHMiLCBwb3J0YWxSb3V0ZXMpOwphcHAudXNlKCIvYXBpL211bmljaXBhbGl0aWVzIiwgbXVuaWNpcGFsaXR5Um91dGVzKTsKYXBwLnVzZSgiL2FwaS92YWxlbmNpYS1kaXN0cmljdHMiLCB2YWxlbmNpYURpc3RyaWN0Um91dGVzKTsKYXBwLnVzZSgiL2FwaS9haSIsIGFpUm91dGVzKTsKYXBwLnVzZSgiL2FwaS9haS1hZG1pbiIsIGFpQWRtaW5Sb3V0ZXMpOwphcHAudXNlKCIvIiwgYW5hbHl0aWNzUm91dGVzKTsKCi8vIEFQSTogRXN0YWRvIGRlbCBzY2hlZHVsZXIgeSBsb2dzIGRlIHNjcmFwaW5nCmFwcC5nZXQoIi9hcGkvc2NoZWR1bGVyL3N0YXR1cyIsIHJlcXVpcmVBdXRoLCAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gewogIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogZ2V0U2NoZWR1bGVyU3RhdHVzKCkgfSk7Cn0pOwphcHAuZ2V0KCIvYXBpL3NjaGVkdWxlci9sb2dzIiwgcmVxdWlyZUF1dGgsIGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7CiAgY29uc3QgbG9ncyA9IGF3YWl0IGdldFJlY2VudFNjcmFwaW5nTG9ncygyMCk7CiAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBsb2dzIH0pOwp9KTsKCi8vIEluaWNpbyBkZWwgc2Vydmlkb3IKY29uc3Qgc3RhcnQgPSBhc3luYyAoKSA9PiB7CiAgYXdhaXQgY29ubmVjdERCKCk7CgogIC8vIE1pZ3JhY2nDs246IGHDsWFkaXIgY29sdW1uYSBkZWxldGVkX2F0IHNpIG5vIGV4aXN0ZSAoc2FmZSB0byBydW4gbXVsdGlwbGUgdGltZXMpCiAgdHJ5IHsKICAgIGF3YWl0IHBvb2wucXVlcnkoYEFMVEVSIFRBQkxFIHByb3BlcnRpZXMKICAgICAgQUREIENPTFVNTiBJRiBOT1QgRVhJU1RTIGRlbGV0ZWRfYXQgREFURVRJTUUgTlVMTCBERUZBVUxUIE5VTEwsCiAgICAgIEFERCBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9kZWxldGVkIChkZWxldGVkX2F0KWApOwogICAgYXdhaXQgcG9vbC5xdWVyeShgQUxURVIgVEFCTEUgcHJvcGVydGllcwogICAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgb3BlcmF0aW9uX3R5cGUgRU5VTSgnc2FsZScsJ3JlbnQnKSBOT1QgTlVMTCBERUZBVUxUICdzYWxlJywKICAgICAgQUREIElOREVYIElGIE5PVCBFWElTVFMgaWR4X29wZXJhdGlvbl90eXBlIChvcGVyYXRpb25fdHlwZSlgKTsKICAgIGF3YWl0IHBvb2wucXVlcnkoYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHZhbGVuY2lhX2Rpc3RyaWN0X3NsdWdzICgKICAgICAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogICAgICBuYW1lIFZBUkNIQVIoMTIwKSBOT1QgTlVMTCBVTklRVUUsCiAgICAgIGlkZWFsaXN0YV9zbHVnIFZBUkNIQVIoMTYwKSBOT1QgTlVMTCwKICAgICAgZm90b2Nhc2Ffc2x1ZyBWQVJDSEFSKDE2MCkgTk9UIE5VTEwsCiAgICAgIHBpc29zX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogICAgICBhY3RpdmUgVElOWUlOVCgxKSBERUZBVUxUIDEsCiAgICAgIHNvcnRfb3JkZXIgSU5UIERFRkFVTFQgOTk5LAogICAgICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCiAgICApYCk7CgogICAgLy8gTGEgdGFibGEgc2UgYcOxYWRpw7MgZGVzcHXDqXMgZGVsIGluaXQtZGIgb3JpZ2luYWwgeSBwdWVkZSBleGlzdGlyIHZhY8OtYS4KICAgIC8vIFNlbWJyYXIgc8OzbG8gY3VhbmRvIGVzdMOhIHZhY8OtYSBwcmVzZXJ2YSBhbHRhcy9iYWphcyBoZWNoYXMgZGVzZGUgbGEgVUkuCiAgICBjb25zdCBbZGlzdHJpY3RDb3VudFJvd3NdID0gYXdhaXQgcG9vbC5xdWVyeShgU0VMRUNUIENPVU5UKCopIEFTIHRvdGFsIEZST00gdmFsZW5jaWFfZGlzdHJpY3Rfc2x1Z3NgKTsKICAgIGNvbnN0IGRpc3RyaWN0Q291bnQgPSBOdW1iZXIoKGRpc3RyaWN0Q291bnRSb3dzIGFzIGFueVtdKVswXT8udG90YWwgfHwgMCk7CiAgICBpZiAoZGlzdHJpY3RDb3VudCA9PT0gMCkgewogICAgICBmb3IgKGNvbnN0IFtpbmRleCwgZGlzdHJpY3RdIG9mIFZBTEVOQ0lBX0RJU1RSSUNUUy5lbnRyaWVzKCkpIHsKICAgICAgICBhd2FpdCBwb29sLnF1ZXJ5KAogICAgICAgICAgYElOU0VSVCBJR05PUkUgSU5UTyB2YWxlbmNpYV9kaXN0cmljdF9zbHVncwogICAgICAgICAgIChuYW1lLCBpZGVhbGlzdGFfc2x1ZywgZm90b2Nhc2Ffc2x1ZywgcGlzb3Nfc2x1ZywgYWN0aXZlLCBzb3J0X29yZGVyKQogICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgMSwgPylgLAogICAgICAgICAgW2Rpc3RyaWN0Lm5hbWUsIGRpc3RyaWN0LmlkZWFsaXN0YSwgZGlzdHJpY3QuZm90b2Nhc2EsIGRpc3RyaWN0LnBpc29zLCAoaW5kZXggKyAxKSAqIDEwXQogICAgICAgICk7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coYFtEQl0gU2VtYnJhZG9zICR7VkFMRU5DSUFfRElTVFJJQ1RTLmxlbmd0aH0gZGlzdHJpdG9zIGRlIFZhbGVuY2lhLmApOwogICAgfSBlbHNlIHsKICAgICAgLy8gTWlncmFyIMO6bmljYW1lbnRlIGxvcyBzbHVncyBwb3IgZGVmZWN0byBhbnRpZ3Vvcy9pbmNvcnJlY3Rvczsgbm8gdG9jYXIKICAgICAgLy8gdmFsb3JlcyBwZXJzb25hbGl6YWRvcyBxdWUgZWwgdXN1YXJpbyBoYXlhIGNvbmZpZ3VyYWRvIGVuIGxhIFVJLgogICAgICBjb25zdCBsZWdhY3lQaXNvc1NsdWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7CiAgICAgICAgIkNpdXRhdCBWZWxsYSI6IFsiY2l1dGF0LXZlbGxhLXZhbGVuY2lhLWNhcGl0YWwiXSwKICAgICAgICAiRWl4YW1wbGUiOiBbImVpeGFtcGxlLXZhbGVuY2lhLWNhcGl0YWwiXSwKICAgICAgICAiRXh0cmFtdXJzIjogWyJleHRyYW11cnMtdmFsZW5jaWEtY2FwaXRhbCIsICJwaXNvcy12YWxlbmNpYV9jYXBpdGFsX2V4dHJhbXVycyJdLAogICAgICAgICJDYW1wYW5hciI6IFsiY2FtcGFuYXItdmFsZW5jaWEtY2FwaXRhbCJdLAogICAgICAgICJQYXRyYWl4IjogWyJwYXRyYWl4LXZhbGVuY2lhLWNhcGl0YWwiLCAicGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9wYXRyYWl4Il0sCiAgICAgICAgIlF1YXRyZSBDYXJyZXJlcyI6IFsicXVhdHJlLWNhcnJlcmVzLXZhbGVuY2lhLWNhcGl0YWwiLCAicGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9xdWF0cmVfY2FycmVyZXMiXSwKICAgICAgICAiUG9ibGF0cyBNYXJpdGltcyI6IFsicG9ibGF0cy1tYXJpdGltcy12YWxlbmNpYS1jYXBpdGFsIiwgInBpc29zLXZhbGVuY2lhX2NhcGl0YWxfcG9ibGF0c19tYXJpdGltcyJdLAogICAgICAgICJDYW1pbnMgYWwgR3JhdSI6IFsiY2FtaW5zLWFsLWdyYXUtdmFsZW5jaWEtY2FwaXRhbCIsICJwaXNvcy12YWxlbmNpYV9jYXBpdGFsX2NhbWluc19hbF9ncmF1Il0sCiAgICAgICAgIkJlbmljYWxhcCI6IFsiYmVuaWNhbGFwLXZhbGVuY2lhLWNhcGl0YWwiXSwKICAgICAgICAiUmFzY2FueWEiOiBbInJhc2NhbnlhLXZhbGVuY2lhLWNhcGl0YWwiLCAicGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9yYXNjYW55YSJdLAogICAgICB9OwogICAgICBmb3IgKGNvbnN0IGRpc3RyaWN0IG9mIFZBTEVOQ0lBX0RJU1RSSUNUUykgewogICAgICAgIGNvbnN0IGxlZ2FjeSA9IGxlZ2FjeVBpc29zU2x1Z3NbZGlzdHJpY3QubmFtZV0gfHwgW107CiAgICAgICAgaWYgKGxlZ2FjeS5sZW5ndGggPT09IDApIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IGxlZ2FjeS5tYXAoKCkgPT4gIj8iKS5qb2luKCIsICIpOwogICAgICAgIGF3YWl0IHBvb2wucXVlcnkoCiAgICAgICAgICBgVVBEQVRFIHZhbGVuY2lhX2Rpc3RyaWN0X3NsdWdzIFNFVCBwaXNvc19zbHVnID0gPwogICAgICAgICAgIFdIRVJFIG5hbWUgPSA/IEFORCBwaXNvc19zbHVnIElOICgke3BsYWNlaG9sZGVyc30pYCwKICAgICAgICAgIFtkaXN0cmljdC5waXNvcywgZGlzdHJpY3QubmFtZSwgLi4ubGVnYWN5XQogICAgICAgICk7CiAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKCJbREJdIENvbHVtbmEgZGVsZXRlZF9hdCB2ZXJpZmljYWRhL2HDsWFkaWRhLiIpOwoKICAgIC8vIFB1cmdhIGluaWNpYWw6IGxpbXBpYXIgcmVnaXN0cm9zIGVuIGFyY2hpdm8gPjMwIGTDrWFzCiAgICBjb25zdCB7IFByb3BlcnR5TW9kZWw6IFBNIH0gPSBhd2FpdCBpbXBvcnQoIi4vbW9kZWxzL3Byb3BlcnR5TW9kZWwiKTsKICAgIGNvbnN0IHB1cmdlZCA9IGF3YWl0IFBNLnB1cmdlT2xkRGVsZXRlZCgpOwogICAgaWYgKHB1cmdlZCA+IDApIGNvbnNvbGUubG9nKGBbREJdIFB1cmdhZG9zICR7cHVyZ2VkfSBhbnVuY2lvcyBkZWwgYXJjaGl2byAoPjMwIGTDrWFzKS5gKTsKICB9IGNhdGNoIChlOiBhbnkpIHsKICAgIGNvbnNvbGUud2FybigiW0RCXSBNaWdyYWNpw7NuIGRlbGV0ZWRfYXQ6IiwgZS5tZXNzYWdlKTsKICB9CgogIC8vIEdlbmVyYXIgaWNvbm9zIFBORyBwYXJhIFBXQSAoZGVzZGUgaWNvbi5zdmcpCiAgYXdhaXQgZ2VuZXJhdGVQbmdJY29ucygpLmNhdGNoKChlKSA9PiBjb25zb2xlLndhcm4oIltJY29uc10iLCBlLm1lc3NhZ2UpKTsKICBhcHAubGlzdGVuKFBPUlQsICgpID0+IHsKICAgIGNvbnNvbGUubG9nKGBTZXJ2aWRvciBhcnJhbmNhZG8gZW4gaHR0cDovL2xvY2FsaG9zdDoke1BPUlR9YCk7CiAgICBjb25zb2xlLmxvZyhgRGFzaGJvYXJkOiBodHRwOi8vbG9jYWxob3N0OiR7UE9SVH0vZGFzaGJvYXJkYCk7CiAgICBjb25zb2xlLmxvZyhgTG9naW46IEdlb3JnZSAvIDQyMTNgKTsKICB9KTsKICBzdGFydFNjaGVkdWxlcigpOwp9OwoKc3RhcnQoKS5jYXRjaCgoZXJyKSA9PiB7CiAgY29uc29sZS5lcnJvcigiRXJyb3IgYWwgaW5pY2lhcjoiLCBlcnIpOwogIHByb2Nlc3MuZXhpdCgxKTsKfSk7CgovLyBFcnJvciBoYW5kbGVyIGNlbnRyYWxpemFkbyAoZGViZSBpciBERVNQVcOJUyBkZSB0b2RhcyBsYXMgcnV0YXMpCmFwcC51c2UoKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHsKICByZXMuc3RhdHVzKDQwNCkucmVuZGVyKCJlcnJvciIsIHsgbWVzc2FnZTogIlDDoWdpbmEgbm8gZW5jb250cmFkYSAoNDA0KSIsIHVzZXI6IG51bGwgfSk7Cn0pOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycwphcHAudXNlKChlcnI6IEVycm9yLCBfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBfbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7CiAgY29uc29sZS5lcnJvcigiW0Vycm9yIEhhbmRsZXJdIiwgZXJyLm1lc3NhZ2UsIGVyci5zdGFjayk7CiAgcmVzLnN0YXR1cyg1MDApLnJlbmRlcigiZXJyb3IiLCB7IG1lc3NhZ2U6IGVyci5tZXNzYWdlIHx8ICJFcnJvciBpbnRlcm5vIGRlbCBzZXJ2aWRvciIsIHVzZXI6IG51bGwgfSk7Cn0pOwoKZXhwb3J0IGRlZmF1bHQgYXBwOwo=","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\config\\initDb.ts","beforeExisted":true,"beforeHash":"93faab55ab4e34143207b36e750e393ac2f537c1bc8ba325a34c193de9d903e6","beforeContent":"aW1wb3J0ICJkb3RlbnYvY29uZmlnIjsKaW1wb3J0IG15c3FsIGZyb20gIm15c3FsMi9wcm9taXNlIjsKCmNvbnN0IFNRTCA9IGAKQ1JFQVRFIERBVEFCQVNFIElGIE5PVCBFWElTVFMgbGxpcmlhX3Byb3BlcnRpZXMgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF91bmljb2RlX2NpOwpVU0UgbGxpcmlhX3Byb3BlcnRpZXM7CgpDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB1c2VycyAoCiAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogIHVzZXJuYW1lIFZBUkNIQVIoMTAwKSBOT1QgTlVMTCBVTklRVUUsCiAgcGFzc3dvcmQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogIGVtYWlsIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCikgRU5HSU5FPUlubm9EQjsKCkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHByb3BlcnRpZXMgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICB0aXRsZSBWQVJDSEFSKDUwMCkgTk9UIE5VTEwsCiAgcHJpY2UgREVDSU1BTCgxMiwyKSBOT1QgTlVMTCBERUZBVUxUIDAsCiAgbG9jYXRpb24gVkFSQ0hBUig1MDApIE5PVCBOVUxMLAogIG11bmljaXBhbGl0eSBWQVJDSEFSKDIwMCksCiAgcHJvcGVydHlfdHlwZSBWQVJDSEFSKDUwKSBERUZBVUxUICdjYXNhJywKICBvcGVyYXRpb25fdHlwZSBFTlVNKCdzYWxlJywncmVudCcpIE5PVCBOVUxMIERFRkFVTFQgJ3NhbGUnLAogIHJvb21zIFRJTllJTlQsCiAgYmF0aHJvb21zIFRJTllJTlQsCiAgc2l6ZV9tMiBERUNJTUFMKDgsMiksCiAgZGVzY3JpcHRpb24gVEVYVCwKICBpbWFnZV91cmwgVkFSQ0hBUigxMDAwKSwKICB1cmwgVkFSQ0hBUigxMDAwKSBOT1QgTlVMTCBVTklRVUUsCiAgc291cmNlIFZBUkNIQVIoMTAwKSBOT1QgTlVMTCwKICBsYXQgREVDSU1BTCgxMCw3KSwKICBsbmcgREVDSU1BTCgxMCw3KSwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogIHVwZGF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogIElOREVYIGlkeF9wcmljZSAocHJpY2UpLAogIElOREVYIGlkeF9tdW5pY2lwYWxpdHkgKG11bmljaXBhbGl0eSksCiAgSU5ERVggaWR4X3Byb3BlcnR5X3R5cGUgKHByb3BlcnR5X3R5cGUpLAogIElOREVYIGlkeF9vcGVyYXRpb25fdHlwZSAob3BlcmF0aW9uX3R5cGUpLAogIElOREVYIGlkeF9zb3VyY2UgKHNvdXJjZSksCiAgSU5ERVggaWR4X3VwZGF0ZWQgKHVwZGF0ZWRfYXQpCikgRU5HSU5FPUlubm9EQjsKCkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGZpbHRlcnMgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICBuYW1lIFZBUkNIQVIoMjAwKSwKICBtaW5fcHJpY2UgREVDSU1BTCgxMiwyKSwKICBtYXhfcHJpY2UgREVDSU1BTCgxMiwyKSwKICBwcm9wZXJ0eV90eXBlIFZBUkNIQVIoNTApLAogIG11bmljaXBhbGl0eSBWQVJDSEFSKDIwMCksCiAgbWluX3Jvb21zIFRJTllJTlQsCiAgbWluX3NpemVfbTIgREVDSU1BTCg4LDIpLAogIHBvcnRhbCBWQVJDSEFSKDEwMCksCiAgZW1haWxfYWxlcnRzIFRJTllJTlQoMSkgREVGQVVMVCAwLAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKKSBFTkdJTkU9SW5ub0RCOwoKQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgem9uZXMgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICBuYW1lIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCwKICBzbHVnIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCBDT01NRU5UICdTbHVnIHBhcmEgVVJMcyBkZSBzY3JhcGVycyAocC5lajogbGxpcmlhKScsCiAgbGF0IERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgbG5nIERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgcmFkaXVzX2ttIERFQ0lNQUwoNSwyKSBERUZBVUxUIDEwLAogIGFjdGl2ZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICBwaXNvc19zbHVnIFZBUkNIQVIoMjAwKSBDT01NRU5UICdTbHVnIGVzcGVjw61maWNvIHBhcmEgcGlzb3MuY29tJywKICB0aGlua3NwYWluX3NsdWcgVkFSQ0hBUigyMDApIE5VTEwgQ09NTUVOVCAnU2x1ZyBlc3BlY8OtZmljbyBwYXJhIFRoaW5rU3BhaW4gKE5VTEwgPSBubyB0aWVuZSBww6FnaW5hKScsCiAgZ2xvYmFsaXphX3NsdWcgVkFSQ0hBUigyMDApIE5VTEwgQ09NTUVOVCAnU2x1ZyBlc3BlY8OtZmljbyBwYXJhIEdsb2JhbGl6YSAoTlVMTCA9IHNpbiBww6FnaW5hIGVuIEdsb2JhbGl6YSknLAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgVU5JUVVFIEtFWSB1cV96b25lc19zbHVnIChzbHVnKSwKICBJTkRFWCBpZHhfYWN0aXZlIChhY3RpdmUpCikgRU5HSU5FPUlubm9EQjsKCklOU0VSVCBJR05PUkUgSU5UTyB6b25lcyAobmFtZSwgc2x1ZywgbGF0LCBsbmcsIHJhZGl1c19rbSwgYWN0aXZlLCBwaXNvc19zbHVnLCB0aGlua3NwYWluX3NsdWcsIGdsb2JhbGl6YV9zbHVnKSBWQUxVRVMKICAoJ0xsw61yaWEnLCAgICAgICAgICAgICAgICdsbGlyaWEnLCAgICAgICAgICAgIDM5LjYyOTIsIC0wLjU5NzksIDEyLCAxLCAncGlzb3MtbGxpcmlhJywgICAgICAgICAgICAgICAgICAnbGxpcmlhJywgICAgICAgICAgICAgICdsbGlyaWEnKSwKICAoJ01hcmluZXMnLCAgICAgICAgICAgICAgJ21hcmluZXMnLCAgICAgICAgICAgMzkuNjczNiwgLTAuNTQ2OSwgIDgsIDEsICdwaXNvcy1tYXJpbmVzJywgICAgICAgICAgICAgICAgICdtYXJpbmVzJywgICAgICAgICAgICAgJ21hcmluZXMnKSwKICAoJ09sb2NhdScsICAgICAgICAgICAgICAgJ29sb2NhdScsICAgICAgICAgICAgMzkuNjk0OCwgLTAuNTIyNCwgIDgsIDEsICdwaXNvcy1vbG9jYXUnLCAgICAgICAgICAgICAgICAgICdvbG9jYXUnLCAgICAgICAgICAgICAgJ29sb2NhdScpLAogICgnTsOhcXVlcmEnLCAgICAgICAgICAgICAgJ25hcXVlcmEnLCAgICAgICAgICAgMzkuNjUwOSwgLTAuNDkxNywgIDgsIDEsICdwaXNvcy1uYXF1ZXJhJywgICAgICAgICAgICAgICAgICduYXF1ZXJhJywgICAgICAgICAgICAgJ25hcXVlcmEnKSwKICAoJ0LDqXRlcmEnLCAgICAgICAgICAgICAgICdiZXRlcmEnLCAgICAgICAgICAgIDM5LjU5NDUsIC0wLjQ2ODAsIDEwLCAxLCAncGlzb3MtYmV0ZXJhJywgICAgICAgICAgICAgICAgICAnYmV0ZXJhJywgICAgICAgICAgICAgICdiZXRlcmEnKSwKICAoJ1ZpbGxhbWFyY2hhbnRlJywgICAgICAgJ3ZpbGxhbWFyY2hhbnRlJywgICAgMzkuNTc2MywgLTAuNjI2MiwgIDgsIDEsICdwaXNvcy12aWxsYW1hcmNoYW50ZS12YWxlbmNpYScsICBOVUxMLCAgICAgICAgICAgICAgICAgICd2aWxhbWFyeGFudCcpLAogICgnQmVuYWd1YXNpbCcsICAgICAgICAgICAnYmVuYWd1YXNpbCcsICAgICAgICAzOS42MDMwLCAtMC41NzIwLCAgOCwgMSwgJ3Bpc29zLWJlbmFndWFzaWwnLCAgICAgICAgICAgICAgJ2JlbmFndWFzaWwnLCAgICAgICAgICAnYmVuYWd1YXNpbCcpLAogICgnTGEgUG9ibGEgZGUgVmFsbGJvbmEnLCAncG9ibGEtZGUtdmFsbGJvbmEnLCAzOS42MTI2LCAtMC41Mzk2LCAxMCwgMSwgJ3Bpc29zLXBvYmxhLWRlLXZhbGxib25hJywgICAgICAgJ2xhLXBvYmxhLWRlLXZhbGxib25hJywncG9ibGEtdmFsbGJvbmEnKSwKICAoJ0wnJ0VsaWFuYScsICAgICAgICAgICAgJ2VsaWFuYScsICAgICAgICAgICAgMzkuNTYyOSwgLTAuNDk3NSwgIDgsIDEsICdwaXNvcy1lbGlhbmEnLCAgICAgICAgICAgICAgICAgICdsLWVsaWFuYScsICAgICAgICAgICAgJ2wtZWxpYW5hJyksCiAgKCdSaWJhLXJvamEgZGVsIFTDunJpYScsICAncmliYS1yb2phJywgICAgICAgICAzOS41NDQ4LCAtMC41NTM2LCAxMCwgMSwgJ3Bpc29zLXJpYmEtcm9qYS1kZS10dXJpYScsICAgICAgJ3JpYmEtcm9qYS1kZS10dXJpYScsICAncmliYS1yb2phLXR1cmlhJyksCiAgKCdDaGVsdmEnLCAgICAgICAgICAgICAgICdjaGVsdmEnLCAgICAgICAgICAgIDM5Ljc1NTIsIC0xLjAwNTQsIDEwLCAxLCAncGlzb3MtY2hlbHZhJywgICAgICAgICAgICAgICAgICAnY2hlbHZhJywgICAgICAgICAgICAgICdjaGVsdmEnKSwKICAoJ0Nhc2lub3MnLCAgICAgICAgICAgICAgJ2Nhc2lub3MnLCAgICAgICAgICAgMzkuNzIwNywgLTAuNjc0OCwgIDgsIDEsICdwaXNvcy1jYXNpbm9zJywgICAgICAgICAgICAgICAgICdjYXNpbm9zJywgICAgICAgICAgICAgJ2Nhc2lub3MnKSwKICAoJ01vbmNvZmEnLCAgICAgICAgICAgICAgJ21vbmNvZmEnLCAgICAgICAgICAgMzkuODE4NCwgLTAuMTQ2OCwgIDgsIDEsICdwaXNvcy1tb25jb2ZhJywgICAgICAgICAgICAgICAgICdtb25jb2ZhJywgICAgICAgICAgICAgJ21vbmNvZmEnKSwKICAoJ0xhIFZhbGwgZCcnVWl4w7MnLCAgICAgJ2xhLXZhbGwtZHVpeG8nLCAgICAgMzkuODQ3NywgLTAuMjI1NSwgMTAsIDEsICdwaXNvcy1sYS12YWxsLWR1aXhvJywgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgTlVMTCksCiAgKCdWYWxlbmNpYScsICAgICAgICAgICAgICd2YWxlbmNpYScsICAgICAgICAgIDM5LjQ2OTksIC0wLjM3NjMsIDE1LCAxLCAncGlzb3MtdmFsZW5jaWEnLCAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICd2YWxlbmNpYScpOwoKQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcG9ydGFscyAoCiAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogIG5hbWUgVkFSQ0hBUigxMDApIE5PVCBOVUxMLAogIHNsdWcgVkFSQ0hBUigxMDApIE5PVCBOVUxMIFVOSVFVRSwKICBzY3JhcGVyX2NsYXNzIFZBUkNIQVIoMTAwKSBOT1QgTlVMTCBDT01NRU5UICdOb21icmUgZXhhY3RvIGRlIGxhIGNsYXNlIHNjcmFwZXIgZW4gVHlwZVNjcmlwdCcsCiAgYWN0aXZlIFRJTllJTlQoMSkgREVGQVVMVCAxLAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgSU5ERVggaWR4X2FjdGl2ZSAoYWN0aXZlKQopIEVOR0lORT1Jbm5vREI7CgpJTlNFUlQgSUdOT1JFIElOVE8gcG9ydGFscyAobmFtZSwgc2x1Zywgc2NyYXBlcl9jbGFzcywgYWN0aXZlKSBWQUxVRVMKICAoJ0ZvdG9jYXNhJywgICAgICAgICdmb3RvY2FzYScsICAgICAgICdGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyJywgIDEpLAogICgnSGFiaXRhY2xpYScsICAgICAgJ2hhYml0YWNsaWEnLCAgICAgJ0hhYml0YWNsaWFTY3JhcGVyJywgICAgICAgICAgMSksCiAgKCdQaXNvcy5jb20nLCAgICAgICAncGlzb3MtY29tJywgICAgICAnUGlzb3NTY3JhcGVyJywgICAgICAgICAgICAgICAxKSwKICAoJ1RoaW5rU3BhaW4nLCAgICAgICd0aGlua3NwYWluJywgICAgICdUaGlua1NwYWluU2NyYXBlcicsICAgICAgICAgIDEpLAogICgnR2xvYmFsaXphJywgICAgICAgJ2dsb2JhbGl6YScsICAgICAgJ0dsb2JhbGl6YVNjcmFwZXInLCAgICAgICAgICAgMSksCiAgKCdJZGVhbGlzdGEnLCAgICAgICAnaWRlYWxpc3RhJywgICAgICAnSWRlYWxpc3RhUGxheXdyaWdodFNjcmFwZXInLCAxKSwKICAoJ0t5ZXJvJywgICAgICAgICAgICdreWVybycsICAgICAgICAgICdLeWVyb1NjcmFwZXInLCAgICAgICAgICAgICAgIDApLAogICgnTWlsYW51bmNpb3MnLCAgICAgJ21pbGFudW5jaW9zJywgICAgJ01pbGFudW5jaW9zU2NyYXBlcicsICAgICAgICAgIDApLAogICgnWWFlbmNvbnRyZScsICAgICAgJ3lhZW5jb250cmUnLCAgICAgJ1lhZW5jb250cmVTY3JhcGVyJywgICAgICAgICAgMCksCiAgKCdDYXNhc2FwbycsICAgICAgICAnY2FzYXNhcG8nLCAgICAgICAnQ2FzYXNhcG9TY3JhcGVyJywgICAgICAgICAgICAwKSwKICAoJ1ZpYmJvJywgICAgICAgICAgICd2aWJibycsICAgICAgICAgICdWaWJib1NjcmFwZXInLCAgICAgICAgICAgICAgIDApLAogICgnTnVyb2EnLCAgICAgICAgICAgJ251cm9hJywgICAgICAgICAgJ051cm9hU2NyYXBlcicsICAgICAgICAgICAgICAgMCksCiAgKCdFbmdlbCAmIFbDtmxrZXJzJywgJ2VuZ2Vsdm9sa2VycycsICAgJ0VuZ2VsVm9sa2Vyc1NjcmFwZXInLCAgICAgICAgMCksCiAgKCdUZWNub2Nhc2EnLCAgICAgICAndGVjbm9jYXNhJywgICAgICAnVGVjbm9jYXNhU2NyYXBlcicsICAgICAgICAgICAwKSwKICAoJ0VSQSBTcGFpbicsICAgICAgICdlcmEtc3BhaW4nLCAgICAgICdFcmFTcGFpblNjcmFwZXInLCAgICAgICAgICAgIDApLAogICgnUkVNQVggRXNwYcOxYScsICAgICdyZW1heCcsICAgICAgICAgICdSZW1heFNjcmFwZXInLCAgICAgICAgICAgICAgIDApLAogICgnSW5tb2JpbGlhcmlhLmVzJywgJ2lubW9iaWxpYXJpYScsICAgJ0lubW9iaWxpYXJpYVNjcmFwZXInLCAgICAgICAgMCksCiAgKCdTcGFpbkhvdXNlcycsICAgICAnc3BhaW5ob3VzZXMnLCAgICAnU3BhaW5Ib3VzZXNTY3JhcGVyJywgICAgICAgICAwKSwKICAoJ0hvbHByb3AnLCAgICAgICAgICdob2xwcm9wJywgICAgICAgICdIb2xwcm9wU2NyYXBlcicsICAgICAgICAgICAgIDApLAogICgnVHJvdml0JywgICAgICAgICAgJ3Ryb3ZpdCcsICAgICAgICAgJ1Ryb3ZhdFNjcmFwZXInLCAgICAgICAgICAgICAgMCk7CgpDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBtdW5pY2lwYWxpdGllc19lcyAoCiAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogIG5hbWUgVkFSQ0hBUigyMDApIE5PVCBOVUxMLAogIGFzY2lpX25hbWUgVkFSQ0hBUigyMDApLAogIHByb3ZpbmNlIFZBUkNIQVIoMjAwKSwKICBhdXRvbm9teSBWQVJDSEFSKDIwMCksCiAgbGF0IERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgbG5nIERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgcG9wdWxhdGlvbiBJTlQgREVGQVVMVCAwLAogIHNvdXJjZSBWQVJDSEFSKDUwKSBERUZBVUxUICdnZW9uYW1lcycsCiAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICBVTklRVUUgS0VZIHVrX2FzY2lpX2F1dG9ub215IChhc2NpaV9uYW1lKDEwMCksIGF1dG9ub215KDEwMCkpLAogIElOREVYIGlkeF9uYW1lIChuYW1lKSwKICBJTkRFWCBpZHhfYXNjaWlfbmFtZSAoYXNjaWlfbmFtZSkKKSBFTkdJTkU9SW5ub0RCOwoKQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdmFsZW5jaWFfZGlzdHJpY3Rfc2x1Z3MgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICBuYW1lIFZBUkNIQVIoMTIwKSBOT1QgTlVMTCBVTklRVUUsCiAgaWRlYWxpc3RhX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogIGZvdG9jYXNhX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogIHBpc29zX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogIGFjdGl2ZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICBzb3J0X29yZGVyIElOVCBERUZBVUxUIDk5OSwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCikgRU5HSU5FPUlubm9EQjsKCklOU0VSVCBJR05PUkUgSU5UTyB2YWxlbmNpYV9kaXN0cmljdF9zbHVncyAobmFtZSwgaWRlYWxpc3RhX3NsdWcsIGZvdG9jYXNhX3NsdWcsIHBpc29zX3NsdWcsIGFjdGl2ZSwgc29ydF9vcmRlcikgVkFMVUVTCiAgKCdDaXV0YXQgVmVsbGEnLCAnY2l1dGF0LXZlbGxhJywgJ2NpdXRhdC12ZWxsYScsICdjaXV0YXQtdmVsbGEtdmFsZW5jaWEtY2FwaXRhbCcsIDEsIDEwKSwKICAoJ0VpeGFtcGxlJywgJ2wtZWl4YW1wbGUnLCAnZWl4YW1wbGUnLCAnZWl4YW1wbGUtdmFsZW5jaWEtY2FwaXRhbCcsIDEsIDIwKSwKICAoJ0V4dHJhbXVycycsICdleHRyYW11cnMnLCAnZXh0cmFtdXJzJywgJ2V4dHJhbXVycy12YWxlbmNpYS1jYXBpdGFsJywgMSwgMzApLAogICgnQ2FtcGFuYXInLCAnY2FtcGFuYXInLCAnY2FtcGFuYXInLCAnY2FtcGFuYXItdmFsZW5jaWEtY2FwaXRhbCcsIDEsIDQwKSwKICAoJ1BhdHJhaXgnLCAncGF0cmFpeCcsICdwYXRyYWl4JywgJ3BhdHJhaXgtdmFsZW5jaWEtY2FwaXRhbCcsIDEsIDUwKSwKICAoJ1F1YXRyZSBDYXJyZXJlcycsICdxdWF0cmUtY2FycmVyZXMnLCAncXVhdHJlLWNhcnJlcmVzJywgJ3F1YXRyZS1jYXJyZXJlcy12YWxlbmNpYS1jYXBpdGFsJywgMSwgNjApLAogICgnUG9ibGF0cyBNYXJpdGltcycsICdwb2JsYXRzLW1hcml0aW1zJywgJ3BvYmxhdHMtbWFyaXRpbXMnLCAncG9ibGF0cy1tYXJpdGltcy12YWxlbmNpYS1jYXBpdGFsJywgMSwgNzApLAogICgnQ2FtaW5zIGFsIEdyYXUnLCAnY2FtaW5zLWFsLWdyYXUnLCAnY2FtaW5zLWFsLWdyYXUnLCAnY2FtaW5zLWFsLWdyYXUtdmFsZW5jaWEtY2FwaXRhbCcsIDEsIDgwKSwKICAoJ0JlbmljYWxhcCcsICdiZW5pY2FsYXAnLCAnYmVuaWNhbGFwJywgJ2JlbmljYWxhcC12YWxlbmNpYS1jYXBpdGFsJywgMSwgOTApLAogICgnUmFzY2FueWEnLCAncmFzY2FueWEnLCAncmFzY2FueWEnLCAncmFzY2FueWEtdmFsZW5jaWEtY2FwaXRhbCcsIDEsIDEwMCk7CmA7Cgphc3luYyBmdW5jdGlvbiBpbml0RGIoKSB7CiAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IG15c3FsLmNyZWF0ZUNvbm5lY3Rpb24oewogICAgaG9zdDogcHJvY2Vzcy5lbnYuREJfSE9TVCB8fCAibG9jYWxob3N0IiwKICAgIHBvcnQ6IE51bWJlcihwcm9jZXNzLmVudi5EQl9QT1JUKSB8fCAzMzA2LAogICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAicm9vdCIsCiAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuREJfUEFTU1dPUkQgfHwgIiIsCiAgICBtdWx0aXBsZVN0YXRlbWVudHM6IHRydWUsCiAgfSk7CgogIHRyeSB7CiAgICBjb25zdCBzdGF0ZW1lbnRzID0gU1FMLnNwbGl0KCI7IikuZmlsdGVyKChzKSA9PiBzLnRyaW0oKS5sZW5ndGggPiAwKTsKICAgIGZvciAoY29uc3QgcyBvZiBzdGF0ZW1lbnRzKSB7CiAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocyArICI7Iik7CiAgICB9CiAgICBjb25zb2xlLmxvZygiQmFzZSBkZSBkYXRvcyBpbmljaWFsaXphZGEgY29ycmVjdGFtZW50ZS4iKTsKICB9IGZpbmFsbHkgewogICAgYXdhaXQgY29ubmVjdGlvbi5lbmQoKTsKICB9Cn0KCmluaXREYigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwo=","afterExisted":true,"afterHash":"dae563fd014d85174c094d5518e486e6510950ca7276d5deaf703f56d09a5c88","afterContent":"aW1wb3J0ICJkb3RlbnYvY29uZmlnIjsKaW1wb3J0IG15c3FsIGZyb20gIm15c3FsMi9wcm9taXNlIjsKCmNvbnN0IFNRTCA9IGAKQ1JFQVRFIERBVEFCQVNFIElGIE5PVCBFWElTVFMgbGxpcmlhX3Byb3BlcnRpZXMgQ0hBUkFDVEVSIFNFVCB1dGY4bWI0IENPTExBVEUgdXRmOG1iNF91bmljb2RlX2NpOwpVU0UgbGxpcmlhX3Byb3BlcnRpZXM7CgpDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB1c2VycyAoCiAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogIHVzZXJuYW1lIFZBUkNIQVIoMTAwKSBOT1QgTlVMTCBVTklRVUUsCiAgcGFzc3dvcmQgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAogIGVtYWlsIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCikgRU5HSU5FPUlubm9EQjsKCkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHByb3BlcnRpZXMgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICB0aXRsZSBWQVJDSEFSKDUwMCkgTk9UIE5VTEwsCiAgcHJpY2UgREVDSU1BTCgxMiwyKSBOT1QgTlVMTCBERUZBVUxUIDAsCiAgbG9jYXRpb24gVkFSQ0hBUig1MDApIE5PVCBOVUxMLAogIG11bmljaXBhbGl0eSBWQVJDSEFSKDIwMCksCiAgcHJvcGVydHlfdHlwZSBWQVJDSEFSKDUwKSBERUZBVUxUICdjYXNhJywKICBvcGVyYXRpb25fdHlwZSBFTlVNKCdzYWxlJywncmVudCcpIE5PVCBOVUxMIERFRkFVTFQgJ3NhbGUnLAogIHJvb21zIFRJTllJTlQsCiAgYmF0aHJvb21zIFRJTllJTlQsCiAgc2l6ZV9tMiBERUNJTUFMKDgsMiksCiAgZGVzY3JpcHRpb24gVEVYVCwKICBpbWFnZV91cmwgVkFSQ0hBUigxMDAwKSwKICB1cmwgVkFSQ0hBUigxMDAwKSBOT1QgTlVMTCBVTklRVUUsCiAgc291cmNlIFZBUkNIQVIoMTAwKSBOT1QgTlVMTCwKICBsYXQgREVDSU1BTCgxMCw3KSwKICBsbmcgREVDSU1BTCgxMCw3KSwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogIHVwZGF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogIElOREVYIGlkeF9wcmljZSAocHJpY2UpLAogIElOREVYIGlkeF9tdW5pY2lwYWxpdHkgKG11bmljaXBhbGl0eSksCiAgSU5ERVggaWR4X3Byb3BlcnR5X3R5cGUgKHByb3BlcnR5X3R5cGUpLAogIElOREVYIGlkeF9vcGVyYXRpb25fdHlwZSAob3BlcmF0aW9uX3R5cGUpLAogIElOREVYIGlkeF9zb3VyY2UgKHNvdXJjZSksCiAgSU5ERVggaWR4X3VwZGF0ZWQgKHVwZGF0ZWRfYXQpCikgRU5HSU5FPUlubm9EQjsKCkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGZpbHRlcnMgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICBuYW1lIFZBUkNIQVIoMjAwKSwKICBtaW5fcHJpY2UgREVDSU1BTCgxMiwyKSwKICBtYXhfcHJpY2UgREVDSU1BTCgxMiwyKSwKICBwcm9wZXJ0eV90eXBlIFZBUkNIQVIoNTApLAogIG11bmljaXBhbGl0eSBWQVJDSEFSKDIwMCksCiAgbWluX3Jvb21zIFRJTllJTlQsCiAgbWluX3NpemVfbTIgREVDSU1BTCg4LDIpLAogIHBvcnRhbCBWQVJDSEFSKDEwMCksCiAgZW1haWxfYWxlcnRzIFRJTllJTlQoMSkgREVGQVVMVCAwLAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKKSBFTkdJTkU9SW5ub0RCOwoKQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgem9uZXMgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICBuYW1lIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCwKICBzbHVnIFZBUkNIQVIoMjAwKSBOT1QgTlVMTCBDT01NRU5UICdTbHVnIHBhcmEgVVJMcyBkZSBzY3JhcGVycyAocC5lajogbGxpcmlhKScsCiAgbGF0IERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgbG5nIERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgcmFkaXVzX2ttIERFQ0lNQUwoNSwyKSBERUZBVUxUIDEwLAogIGFjdGl2ZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICBwaXNvc19zbHVnIFZBUkNIQVIoMjAwKSBDT01NRU5UICdTbHVnIGVzcGVjw61maWNvIHBhcmEgcGlzb3MuY29tJywKICB0aGlua3NwYWluX3NsdWcgVkFSQ0hBUigyMDApIE5VTEwgQ09NTUVOVCAnU2x1ZyBlc3BlY8OtZmljbyBwYXJhIFRoaW5rU3BhaW4gKE5VTEwgPSBubyB0aWVuZSBww6FnaW5hKScsCiAgZ2xvYmFsaXphX3NsdWcgVkFSQ0hBUigyMDApIE5VTEwgQ09NTUVOVCAnU2x1ZyBlc3BlY8OtZmljbyBwYXJhIEdsb2JhbGl6YSAoTlVMTCA9IHNpbiBww6FnaW5hIGVuIEdsb2JhbGl6YSknLAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgVU5JUVVFIEtFWSB1cV96b25lc19zbHVnIChzbHVnKSwKICBJTkRFWCBpZHhfYWN0aXZlIChhY3RpdmUpCikgRU5HSU5FPUlubm9EQjsKCklOU0VSVCBJR05PUkUgSU5UTyB6b25lcyAobmFtZSwgc2x1ZywgbGF0LCBsbmcsIHJhZGl1c19rbSwgYWN0aXZlLCBwaXNvc19zbHVnLCB0aGlua3NwYWluX3NsdWcsIGdsb2JhbGl6YV9zbHVnKSBWQUxVRVMKICAoJ0xsw61yaWEnLCAgICAgICAgICAgICAgICdsbGlyaWEnLCAgICAgICAgICAgIDM5LjYyOTIsIC0wLjU5NzksIDEyLCAxLCAncGlzb3MtbGxpcmlhJywgICAgICAgICAgICAgICAgICAnbGxpcmlhJywgICAgICAgICAgICAgICdsbGlyaWEnKSwKICAoJ01hcmluZXMnLCAgICAgICAgICAgICAgJ21hcmluZXMnLCAgICAgICAgICAgMzkuNjczNiwgLTAuNTQ2OSwgIDgsIDEsICdwaXNvcy1tYXJpbmVzJywgICAgICAgICAgICAgICAgICdtYXJpbmVzJywgICAgICAgICAgICAgJ21hcmluZXMnKSwKICAoJ09sb2NhdScsICAgICAgICAgICAgICAgJ29sb2NhdScsICAgICAgICAgICAgMzkuNjk0OCwgLTAuNTIyNCwgIDgsIDEsICdwaXNvcy1vbG9jYXUnLCAgICAgICAgICAgICAgICAgICdvbG9jYXUnLCAgICAgICAgICAgICAgJ29sb2NhdScpLAogICgnTsOhcXVlcmEnLCAgICAgICAgICAgICAgJ25hcXVlcmEnLCAgICAgICAgICAgMzkuNjUwOSwgLTAuNDkxNywgIDgsIDEsICdwaXNvcy1uYXF1ZXJhJywgICAgICAgICAgICAgICAgICduYXF1ZXJhJywgICAgICAgICAgICAgJ25hcXVlcmEnKSwKICAoJ0LDqXRlcmEnLCAgICAgICAgICAgICAgICdiZXRlcmEnLCAgICAgICAgICAgIDM5LjU5NDUsIC0wLjQ2ODAsIDEwLCAxLCAncGlzb3MtYmV0ZXJhJywgICAgICAgICAgICAgICAgICAnYmV0ZXJhJywgICAgICAgICAgICAgICdiZXRlcmEnKSwKICAoJ1ZpbGxhbWFyY2hhbnRlJywgICAgICAgJ3ZpbGxhbWFyY2hhbnRlJywgICAgMzkuNTc2MywgLTAuNjI2MiwgIDgsIDEsICdwaXNvcy12aWxsYW1hcmNoYW50ZS12YWxlbmNpYScsICBOVUxMLCAgICAgICAgICAgICAgICAgICd2aWxhbWFyeGFudCcpLAogICgnQmVuYWd1YXNpbCcsICAgICAgICAgICAnYmVuYWd1YXNpbCcsICAgICAgICAzOS42MDMwLCAtMC41NzIwLCAgOCwgMSwgJ3Bpc29zLWJlbmFndWFzaWwnLCAgICAgICAgICAgICAgJ2JlbmFndWFzaWwnLCAgICAgICAgICAnYmVuYWd1YXNpbCcpLAogICgnTGEgUG9ibGEgZGUgVmFsbGJvbmEnLCAncG9ibGEtZGUtdmFsbGJvbmEnLCAzOS42MTI2LCAtMC41Mzk2LCAxMCwgMSwgJ3Bpc29zLXBvYmxhLWRlLXZhbGxib25hJywgICAgICAgJ2xhLXBvYmxhLWRlLXZhbGxib25hJywncG9ibGEtdmFsbGJvbmEnKSwKICAoJ0wnJ0VsaWFuYScsICAgICAgICAgICAgJ2VsaWFuYScsICAgICAgICAgICAgMzkuNTYyOSwgLTAuNDk3NSwgIDgsIDEsICdwaXNvcy1lbGlhbmEnLCAgICAgICAgICAgICAgICAgICdsLWVsaWFuYScsICAgICAgICAgICAgJ2wtZWxpYW5hJyksCiAgKCdSaWJhLXJvamEgZGVsIFTDunJpYScsICAncmliYS1yb2phJywgICAgICAgICAzOS41NDQ4LCAtMC41NTM2LCAxMCwgMSwgJ3Bpc29zLXJpYmEtcm9qYS1kZS10dXJpYScsICAgICAgJ3JpYmEtcm9qYS1kZS10dXJpYScsICAncmliYS1yb2phLXR1cmlhJyksCiAgKCdDaGVsdmEnLCAgICAgICAgICAgICAgICdjaGVsdmEnLCAgICAgICAgICAgIDM5Ljc1NTIsIC0xLjAwNTQsIDEwLCAxLCAncGlzb3MtY2hlbHZhJywgICAgICAgICAgICAgICAgICAnY2hlbHZhJywgICAgICAgICAgICAgICdjaGVsdmEnKSwKICAoJ0Nhc2lub3MnLCAgICAgICAgICAgICAgJ2Nhc2lub3MnLCAgICAgICAgICAgMzkuNzIwNywgLTAuNjc0OCwgIDgsIDEsICdwaXNvcy1jYXNpbm9zJywgICAgICAgICAgICAgICAgICdjYXNpbm9zJywgICAgICAgICAgICAgJ2Nhc2lub3MnKSwKICAoJ01vbmNvZmEnLCAgICAgICAgICAgICAgJ21vbmNvZmEnLCAgICAgICAgICAgMzkuODE4NCwgLTAuMTQ2OCwgIDgsIDEsICdwaXNvcy1tb25jb2ZhJywgICAgICAgICAgICAgICAgICdtb25jb2ZhJywgICAgICAgICAgICAgJ21vbmNvZmEnKSwKICAoJ0xhIFZhbGwgZCcnVWl4w7MnLCAgICAgJ2xhLXZhbGwtZHVpeG8nLCAgICAgMzkuODQ3NywgLTAuMjI1NSwgMTAsIDEsICdwaXNvcy1sYS12YWxsLWR1aXhvJywgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgTlVMTCksCiAgKCdWYWxlbmNpYScsICAgICAgICAgICAgICd2YWxlbmNpYScsICAgICAgICAgIDM5LjQ2OTksIC0wLjM3NjMsIDE1LCAxLCAncGlzb3MtdmFsZW5jaWEnLCAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICd2YWxlbmNpYScpOwoKQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcG9ydGFscyAoCiAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogIG5hbWUgVkFSQ0hBUigxMDApIE5PVCBOVUxMLAogIHNsdWcgVkFSQ0hBUigxMDApIE5PVCBOVUxMIFVOSVFVRSwKICBzY3JhcGVyX2NsYXNzIFZBUkNIQVIoMTAwKSBOT1QgTlVMTCBDT01NRU5UICdOb21icmUgZXhhY3RvIGRlIGxhIGNsYXNlIHNjcmFwZXIgZW4gVHlwZVNjcmlwdCcsCiAgYWN0aXZlIFRJTllJTlQoMSkgREVGQVVMVCAxLAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgSU5ERVggaWR4X2FjdGl2ZSAoYWN0aXZlKQopIEVOR0lORT1Jbm5vREI7CgpJTlNFUlQgSUdOT1JFIElOVE8gcG9ydGFscyAobmFtZSwgc2x1Zywgc2NyYXBlcl9jbGFzcywgYWN0aXZlKSBWQUxVRVMKICAoJ0ZvdG9jYXNhJywgICAgICAgICdmb3RvY2FzYScsICAgICAgICdGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyJywgIDEpLAogICgnSGFiaXRhY2xpYScsICAgICAgJ2hhYml0YWNsaWEnLCAgICAgJ0hhYml0YWNsaWFTY3JhcGVyJywgICAgICAgICAgMSksCiAgKCdQaXNvcy5jb20nLCAgICAgICAncGlzb3MtY29tJywgICAgICAnUGlzb3NTY3JhcGVyJywgICAgICAgICAgICAgICAxKSwKICAoJ1RoaW5rU3BhaW4nLCAgICAgICd0aGlua3NwYWluJywgICAgICdUaGlua1NwYWluU2NyYXBlcicsICAgICAgICAgIDEpLAogICgnR2xvYmFsaXphJywgICAgICAgJ2dsb2JhbGl6YScsICAgICAgJ0dsb2JhbGl6YVNjcmFwZXInLCAgICAgICAgICAgMSksCiAgKCdJZGVhbGlzdGEnLCAgICAgICAnaWRlYWxpc3RhJywgICAgICAnSWRlYWxpc3RhUGxheXdyaWdodFNjcmFwZXInLCAxKSwKICAoJ0t5ZXJvJywgICAgICAgICAgICdreWVybycsICAgICAgICAgICdLeWVyb1NjcmFwZXInLCAgICAgICAgICAgICAgIDApLAogICgnTWlsYW51bmNpb3MnLCAgICAgJ21pbGFudW5jaW9zJywgICAgJ01pbGFudW5jaW9zU2NyYXBlcicsICAgICAgICAgIDApLAogICgnWWFlbmNvbnRyZScsICAgICAgJ3lhZW5jb250cmUnLCAgICAgJ1lhZW5jb250cmVTY3JhcGVyJywgICAgICAgICAgMCksCiAgKCdDYXNhc2FwbycsICAgICAgICAnY2FzYXNhcG8nLCAgICAgICAnQ2FzYXNhcG9TY3JhcGVyJywgICAgICAgICAgICAwKSwKICAoJ1ZpYmJvJywgICAgICAgICAgICd2aWJibycsICAgICAgICAgICdWaWJib1NjcmFwZXInLCAgICAgICAgICAgICAgIDApLAogICgnTnVyb2EnLCAgICAgICAgICAgJ251cm9hJywgICAgICAgICAgJ051cm9hU2NyYXBlcicsICAgICAgICAgICAgICAgMCksCiAgKCdFbmdlbCAmIFbDtmxrZXJzJywgJ2VuZ2Vsdm9sa2VycycsICAgJ0VuZ2VsVm9sa2Vyc1NjcmFwZXInLCAgICAgICAgMCksCiAgKCdUZWNub2Nhc2EnLCAgICAgICAndGVjbm9jYXNhJywgICAgICAnVGVjbm9jYXNhU2NyYXBlcicsICAgICAgICAgICAwKSwKICAoJ0VSQSBTcGFpbicsICAgICAgICdlcmEtc3BhaW4nLCAgICAgICdFcmFTcGFpblNjcmFwZXInLCAgICAgICAgICAgIDApLAogICgnUkVNQVggRXNwYcOxYScsICAgICdyZW1heCcsICAgICAgICAgICdSZW1heFNjcmFwZXInLCAgICAgICAgICAgICAgIDApLAogICgnSW5tb2JpbGlhcmlhLmVzJywgJ2lubW9iaWxpYXJpYScsICAgJ0lubW9iaWxpYXJpYVNjcmFwZXInLCAgICAgICAgMCksCiAgKCdTcGFpbkhvdXNlcycsICAgICAnc3BhaW5ob3VzZXMnLCAgICAnU3BhaW5Ib3VzZXNTY3JhcGVyJywgICAgICAgICAwKSwKICAoJ0hvbHByb3AnLCAgICAgICAgICdob2xwcm9wJywgICAgICAgICdIb2xwcm9wU2NyYXBlcicsICAgICAgICAgICAgIDApLAogICgnVHJvdml0JywgICAgICAgICAgJ3Ryb3ZpdCcsICAgICAgICAgJ1Ryb3ZhdFNjcmFwZXInLCAgICAgICAgICAgICAgMCk7CgpDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBtdW5pY2lwYWxpdGllc19lcyAoCiAgaWQgSU5UIEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLAogIG5hbWUgVkFSQ0hBUigyMDApIE5PVCBOVUxMLAogIGFzY2lpX25hbWUgVkFSQ0hBUigyMDApLAogIHByb3ZpbmNlIFZBUkNIQVIoMjAwKSwKICBhdXRvbm9teSBWQVJDSEFSKDIwMCksCiAgbGF0IERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgbG5nIERFQ0lNQUwoMTAsNykgTk9UIE5VTEwsCiAgcG9wdWxhdGlvbiBJTlQgREVGQVVMVCAwLAogIHNvdXJjZSBWQVJDSEFSKDUwKSBERUZBVUxUICdnZW9uYW1lcycsCiAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICBVTklRVUUgS0VZIHVrX2FzY2lpX2F1dG9ub215IChhc2NpaV9uYW1lKDEwMCksIGF1dG9ub215KDEwMCkpLAogIElOREVYIGlkeF9uYW1lIChuYW1lKSwKICBJTkRFWCBpZHhfYXNjaWlfbmFtZSAoYXNjaWlfbmFtZSkKKSBFTkdJTkU9SW5ub0RCOwoKQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdmFsZW5jaWFfZGlzdHJpY3Rfc2x1Z3MgKAogIGlkIElOVCBBVVRPX0lOQ1JFTUVOVCBQUklNQVJZIEtFWSwKICBuYW1lIFZBUkNIQVIoMTIwKSBOT1QgTlVMTCBVTklRVUUsCiAgaWRlYWxpc3RhX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogIGZvdG9jYXNhX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogIHBpc29zX3NsdWcgVkFSQ0hBUigxNjApIE5PVCBOVUxMLAogIGFjdGl2ZSBUSU5ZSU5UKDEpIERFRkFVTFQgMSwKICBzb3J0X29yZGVyIElOVCBERUZBVUxUIDk5OSwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QCikgRU5HSU5FPUlubm9EQjsKCklOU0VSVCBJR05PUkUgSU5UTyB2YWxlbmNpYV9kaXN0cmljdF9zbHVncyAobmFtZSwgaWRlYWxpc3RhX3NsdWcsIGZvdG9jYXNhX3NsdWcsIHBpc29zX3NsdWcsIGFjdGl2ZSwgc29ydF9vcmRlcikgVkFMVUVTCiAgKCdDaXV0YXQgVmVsbGEnLCAnY2l1dGF0LXZlbGxhJywgJ2NpdXRhdC12ZWxsYScsICdwaXNvcy12YWxlbmNpYV9jYXBpdGFsX2NpdXRhdF92ZWxsYScsIDEsIDEwKSwKICAoJ0VpeGFtcGxlJywgJ2wtZWl4YW1wbGUnLCAnZWl4YW1wbGUnLCAncGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9laXhhbXBsZScsIDEsIDIwKSwKICAoJ0V4dHJhbXVycycsICdleHRyYW11cnMnLCAnZXh0cmFtdXJzJywgJ3Bpc29zLWV4dHJhbXVycycsIDEsIDMwKSwKICAoJ0NhbXBhbmFyJywgJ2NhbXBhbmFyJywgJ2NhbXBhbmFyJywgJ3Bpc29zLXZhbGVuY2lhX2NhcGl0YWxfY2FtcGFuYXInLCAxLCA0MCksCiAgKCdQYXRyYWl4JywgJ3BhdHJhaXgnLCAncGF0cmFpeCcsICdwaXNvcy1wYXRyYWl4JywgMSwgNTApLAogICgnUXVhdHJlIENhcnJlcmVzJywgJ3F1YXRyZS1jYXJyZXJlcycsICdxdWF0cmUtY2FycmVyZXMnLCAncGlzb3MtcXVhdHJlX2NhcnJlcmVzJywgMSwgNjApLAogICgnUG9ibGF0cyBNYXJpdGltcycsICdwb2JsYXRzLW1hcml0aW1zJywgJ3BvYmxhdHMtbWFyaXRpbXMnLCAncGlzb3MtcG9ibGF0c19tYXJpdGltcycsIDEsIDcwKSwKICAoJ0NhbWlucyBhbCBHcmF1JywgJ2NhbWlucy1hbC1ncmF1JywgJ2NhbWlucy1hbC1ncmF1JywgJ3Bpc29zLWNhbWluc19hbF9ncmF1JywgMSwgODApLAogICgnQmVuaWNhbGFwJywgJ2JlbmljYWxhcCcsICdiZW5pY2FsYXAnLCAncGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9iZW5pY2FsYXAnLCAxLCA5MCksCiAgKCdSYXNjYW55YScsICdyYXNjYW55YScsICdyYXNjYW55YScsICdwaXNvcy1yYXNjYW55YScsIDEsIDEwMCk7CmA7Cgphc3luYyBmdW5jdGlvbiBpbml0RGIoKSB7CiAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IG15c3FsLmNyZWF0ZUNvbm5lY3Rpb24oewogICAgaG9zdDogcHJvY2Vzcy5lbnYuREJfSE9TVCB8fCAibG9jYWxob3N0IiwKICAgIHBvcnQ6IE51bWJlcihwcm9jZXNzLmVudi5EQl9QT1JUKSB8fCAzMzA2LAogICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAicm9vdCIsCiAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuREJfUEFTU1dPUkQgfHwgIiIsCiAgICBtdWx0aXBsZVN0YXRlbWVudHM6IHRydWUsCiAgfSk7CgogIHRyeSB7CiAgICBjb25zdCBzdGF0ZW1lbnRzID0gU1FMLnNwbGl0KCI7IikuZmlsdGVyKChzKSA9PiBzLnRyaW0oKS5sZW5ndGggPiAwKTsKICAgIGZvciAoY29uc3QgcyBvZiBzdGF0ZW1lbnRzKSB7CiAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocyArICI7Iik7CiAgICB9CiAgICBjb25zb2xlLmxvZygiQmFzZSBkZSBkYXRvcyBpbmljaWFsaXphZGEgY29ycmVjdGFtZW50ZS4iKTsKICB9IGZpbmFsbHkgewogICAgYXdhaXQgY29ubmVjdGlvbi5lbmQoKTsKICB9Cn0KCmluaXREYigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwo=","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\config\\valenciaDistricts.ts","beforeExisted":true,"beforeHash":"247d7af7f5b1d6cbd49e8e722f1678c570b0db59f3d537d71e4b4bc5e005d589","beforeContent":"ZXhwb3J0IGludGVyZmFjZSBWYWxlbmNpYURpc3RyaWN0U2x1ZyB7DQogIG5hbWU6IHN0cmluZzsNCiAgaWRlYWxpc3RhOiBzdHJpbmc7DQogIGZvdG9jYXNhOiBzdHJpbmc7DQogIHBpc29zOiBzdHJpbmc7DQp9DQoNCmV4cG9ydCBjb25zdCBWQUxFTkNJQV9ESVNUUklDVFM6IFZhbGVuY2lhRGlzdHJpY3RTbHVnW10gPSBbDQogIHsgbmFtZTogIkNpdXRhdCBWZWxsYSIsIGlkZWFsaXN0YTogImNpdXRhdC12ZWxsYSIsIGZvdG9jYXNhOiAiY2l1dGF0LXZlbGxhIiwgcGlzb3M6ICJjaXV0YXQtdmVsbGEtdmFsZW5jaWEtY2FwaXRhbCIgfSwNCiAgeyBuYW1lOiAiRWl4YW1wbGUiLCBpZGVhbGlzdGE6ICJsLWVpeGFtcGxlIiwgZm90b2Nhc2E6ICJlaXhhbXBsZSIsIHBpc29zOiAiZWl4YW1wbGUtdmFsZW5jaWEtY2FwaXRhbCIgfSwNCiAgeyBuYW1lOiAiRXh0cmFtdXJzIiwgaWRlYWxpc3RhOiAiZXh0cmFtdXJzIiwgZm90b2Nhc2E6ICJleHRyYW11cnMiLCBwaXNvczogImV4dHJhbXVycy12YWxlbmNpYS1jYXBpdGFsIiB9LA0KICB7IG5hbWU6ICJDYW1wYW5hciIsIGlkZWFsaXN0YTogImNhbXBhbmFyIiwgZm90b2Nhc2E6ICJjYW1wYW5hciIsIHBpc29zOiAiY2FtcGFuYXItdmFsZW5jaWEtY2FwaXRhbCIgfSwNCiAgeyBuYW1lOiAiUGF0cmFpeCIsIGlkZWFsaXN0YTogInBhdHJhaXgiLCBmb3RvY2FzYTogInBhdHJhaXgiLCBwaXNvczogInBhdHJhaXgtdmFsZW5jaWEtY2FwaXRhbCIgfSwNCiAgeyBuYW1lOiAiUXVhdHJlIENhcnJlcmVzIiwgaWRlYWxpc3RhOiAicXVhdHJlLWNhcnJlcmVzIiwgZm90b2Nhc2E6ICJxdWF0cmUtY2FycmVyZXMiLCBwaXNvczogInF1YXRyZS1jYXJyZXJlcy12YWxlbmNpYS1jYXBpdGFsIiB9LA0KICB7IG5hbWU6ICJQb2JsYXRzIE1hcml0aW1zIiwgaWRlYWxpc3RhOiAicG9ibGF0cy1tYXJpdGltcyIsIGZvdG9jYXNhOiAicG9ibGF0cy1tYXJpdGltcyIsIHBpc29zOiAicG9ibGF0cy1tYXJpdGltcy12YWxlbmNpYS1jYXBpdGFsIiB9LA0KICB7IG5hbWU6ICJDYW1pbnMgYWwgR3JhdSIsIGlkZWFsaXN0YTogImNhbWlucy1hbC1ncmF1IiwgZm90b2Nhc2E6ICJjYW1pbnMtYWwtZ3JhdSIsIHBpc29zOiAiY2FtaW5zLWFsLWdyYXUtdmFsZW5jaWEtY2FwaXRhbCIgfSwNCiAgeyBuYW1lOiAiQmVuaWNhbGFwIiwgaWRlYWxpc3RhOiAiYmVuaWNhbGFwIiwgZm90b2Nhc2E6ICJiZW5pY2FsYXAiLCBwaXNvczogImJlbmljYWxhcC12YWxlbmNpYS1jYXBpdGFsIiB9LA0KICB7IG5hbWU6ICJSYXNjYW55YSIsIGlkZWFsaXN0YTogInJhc2NhbnlhIiwgZm90b2Nhc2E6ICJyYXNjYW55YSIsIHBpc29zOiAicmFzY2FueWEtdmFsZW5jaWEtY2FwaXRhbCIgfSwNCl07DQoNCg==","afterExisted":true,"afterHash":"8d1c2e5a20cf8b6a727e626c153c9cbd65a82d6b7b98b3e2da7e203b79362381","afterContent":"ZXhwb3J0IGludGVyZmFjZSBWYWxlbmNpYURpc3RyaWN0U2x1ZyB7DQogIG5hbWU6IHN0cmluZzsNCiAgaWRlYWxpc3RhOiBzdHJpbmc7DQogIGZvdG9jYXNhOiBzdHJpbmc7DQogIHBpc29zOiBzdHJpbmc7DQp9DQoNCmV4cG9ydCBjb25zdCBWQUxFTkNJQV9ESVNUUklDVFM6IFZhbGVuY2lhRGlzdHJpY3RTbHVnW10gPSBbCiAgeyBuYW1lOiAiQ2l1dGF0IFZlbGxhIiwgaWRlYWxpc3RhOiAiY2l1dGF0LXZlbGxhIiwgZm90b2Nhc2E6ICJjaXV0YXQtdmVsbGEiLCBwaXNvczogInBpc29zLXZhbGVuY2lhX2NhcGl0YWxfY2l1dGF0X3ZlbGxhIiB9LAogIHsgbmFtZTogIkVpeGFtcGxlIiwgaWRlYWxpc3RhOiAibC1laXhhbXBsZSIsIGZvdG9jYXNhOiAiZWl4YW1wbGUiLCBwaXNvczogInBpc29zLXZhbGVuY2lhX2NhcGl0YWxfZWl4YW1wbGUiIH0sCiAgeyBuYW1lOiAiRXh0cmFtdXJzIiwgaWRlYWxpc3RhOiAiZXh0cmFtdXJzIiwgZm90b2Nhc2E6ICJleHRyYW11cnMiLCBwaXNvczogInBpc29zLWV4dHJhbXVycyIgfSwKICB7IG5hbWU6ICJDYW1wYW5hciIsIGlkZWFsaXN0YTogImNhbXBhbmFyIiwgZm90b2Nhc2E6ICJjYW1wYW5hciIsIHBpc29zOiAicGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9jYW1wYW5hciIgfSwKICB7IG5hbWU6ICJQYXRyYWl4IiwgaWRlYWxpc3RhOiAicGF0cmFpeCIsIGZvdG9jYXNhOiAicGF0cmFpeCIsIHBpc29zOiAicGlzb3MtcGF0cmFpeCIgfSwKICB7IG5hbWU6ICJRdWF0cmUgQ2FycmVyZXMiLCBpZGVhbGlzdGE6ICJxdWF0cmUtY2FycmVyZXMiLCBmb3RvY2FzYTogInF1YXRyZS1jYXJyZXJlcyIsIHBpc29zOiAicGlzb3MtcXVhdHJlX2NhcnJlcmVzIiB9LAogIHsgbmFtZTogIlBvYmxhdHMgTWFyaXRpbXMiLCBpZGVhbGlzdGE6ICJwb2JsYXRzLW1hcml0aW1zIiwgZm90b2Nhc2E6ICJwb2JsYXRzLW1hcml0aW1zIiwgcGlzb3M6ICJwaXNvcy1wb2JsYXRzX21hcml0aW1zIiB9LAogIHsgbmFtZTogIkNhbWlucyBhbCBHcmF1IiwgaWRlYWxpc3RhOiAiY2FtaW5zLWFsLWdyYXUiLCBmb3RvY2FzYTogImNhbWlucy1hbC1ncmF1IiwgcGlzb3M6ICJwaXNvcy1jYW1pbnNfYWxfZ3JhdSIgfSwKICB7IG5hbWU6ICJCZW5pY2FsYXAiLCBpZGVhbGlzdGE6ICJiZW5pY2FsYXAiLCBmb3RvY2FzYTogImJlbmljYWxhcCIsIHBpc29zOiAicGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9iZW5pY2FsYXAiIH0sCiAgeyBuYW1lOiAiUmFzY2FueWEiLCBpZGVhbGlzdGE6ICJyYXNjYW55YSIsIGZvdG9jYXNhOiAicmFzY2FueWEiLCBwaXNvczogInBpc29zLXJhc2NhbnlhIiB9LApdOwoNCg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\controllers\\portalController.ts","beforeExisted":true,"beforeHash":"2d264e4fb72d2ee57ac645550ef9e746f3536e580298952edf45e0f0ecf24344","beforeContent":"aW1wb3J0IHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICJleHByZXNzIjsNCmltcG9ydCB7IFBvcnRhbE1vZGVsIH0gZnJvbSAiLi4vbW9kZWxzL3BvcnRhbE1vZGVsIjsNCmltcG9ydCBwb29sIGZyb20gIi4uL2NvbmZpZy9kYiI7DQppbXBvcnQgeyBSb3dEYXRhUGFja2V0IH0gZnJvbSAibXlzcWwyIjsNCg0KZXhwb3J0IGNvbnN0IHBvcnRhbENvbnRyb2xsZXIgPSB7DQogICAgYXN5bmMgZ2V0QWxsKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHBvcnRhbHMgPSBhd2FpdCBQb3J0YWxNb2RlbC5maW5kQWxsKCk7DQogICAgICAgICAgICByZXMuanNvbihwb3J0YWxzKTsNCiAgICAgICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAiRXJyb3IgYWwgb2J0ZW5lciBwb3J0YWxlcyIgfSk7DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgYXN5bmMgY3JlYXRlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzbHVnLCBzY3JhcGVyX2NsYXNzLCBhY3RpdmUgfSA9IHJlcS5ib2R5Ow0KICAgICAgICAgICAgaWYgKCFuYW1lIHx8ICFzY3JhcGVyX2NsYXNzKSB7DQogICAgICAgICAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogIm5hbWUgeSBzY3JhcGVyX2NsYXNzIHNvbiBvYmxpZ2F0b3Jpb3MiIH0pOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNvbnN0IGlkID0gYXdhaXQgUG9ydGFsTW9kZWwuY3JlYXRlKHsgbmFtZSwgc2x1Zzogc2x1ZyB8fCAiIiwgc2NyYXBlcl9jbGFzcywgYWN0aXZlOiBhY3RpdmUgPz8gMSB9KTsNCiAgICAgICAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgaWQgfSk7DQogICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogIkVycm9yIGFsIGNyZWFyIHBvcnRhbCIgfSk7DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgYXN5bmMgdG9nZ2xlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJzZUludChyZXEucGFyYW1zLmlkKTsNCiAgICAgICAgICAgIGF3YWl0IFBvcnRhbE1vZGVsLnRvZ2dsZUFjdGl2ZShpZCk7DQogICAgICAgICAgICBjb25zdCBwb3J0YWwgPSBhd2FpdCBQb3J0YWxNb2RlbC5maW5kQnlJZChpZCk7DQogICAgICAgICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGFjdGl2ZTogcG9ydGFsPy5hY3RpdmUgfSk7DQogICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogIkVycm9yIGFsIGNhbWJpYXIgZXN0YWRvIGRlbCBwb3J0YWwiIH0pOw0KICAgICAgICB9DQogICAgfSwNCg0KICAgIGFzeW5jIHJlbW92ZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyc2VJbnQocmVxLnBhcmFtcy5pZCk7DQogICAgICAgICAgICBjb25zdCBwb3J0YWwgPSBhd2FpdCBQb3J0YWxNb2RlbC5maW5kQnlJZChpZCk7DQogICAgICAgICAgICBpZiAoIXBvcnRhbCkgeyByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiAiUG9ydGFsIG5vIGVuY29udHJhZG8iIH0pOyByZXR1cm47IH0NCiAgICAgICAgICAgIGF3YWl0IFBvcnRhbE1vZGVsLmRlbGV0ZUJ5SWQoaWQpOw0KICAgICAgICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlIH0pOw0KICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICJFcnJvciBhbCBlbGltaW5hciBwb3J0YWwiIH0pOw0KICAgICAgICB9DQogICAgfSwNCg0KICAgIGFzeW5jIGhlYWx0aChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBjb25zdCBwb3J0YWxzID0gYXdhaXQgUG9ydGFsTW9kZWwuZmluZEFsbCgpOw0KICAgICAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSBbXTsNCiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwb3J0YWxzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgW3NhbGVSb3dzXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigNCiAgICAgICAgICAgICAgICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyB0b3RhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVU0oQ0FTRSBXSEVOIHVwZGF0ZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDI0IEhPVVIpIFRIRU4gMSBFTFNFIDAgRU5EKSBBUyBsYXN0MjRoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWCh1cGRhdGVkX2F0KSBBUyBsYXN0X3NlZW4NCiAgICAgICAgICAgICAgICAgICAgIEZST00gcHJvcGVydGllcw0KICAgICAgICAgICAgICAgICAgICAgV0hFUkUgZGVsZXRlZF9hdCBJUyBOVUxMIEFORCBzb3VyY2UgPSA/IEFORCBvcGVyYXRpb25fdHlwZSA9ICdzYWxlJ2AsDQogICAgICAgICAgICAgICAgICAgIFtwLm5hbWVdDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBjb25zdCBbcmVudFJvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KA0KICAgICAgICAgICAgICAgICAgICBgU0VMRUNUIENPVU5UKCopIEFTIHRvdGFsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVTShDQVNFIFdIRU4gdXBkYXRlZF9hdCA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgMjQgSE9VUikgVEhFTiAxIEVMU0UgMCBFTkQpIEFTIGxhc3QyNGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYKHVwZGF0ZWRfYXQpIEFTIGxhc3Rfc2Vlbg0KICAgICAgICAgICAgICAgICAgICAgRlJPTSBwcm9wZXJ0aWVzDQogICAgICAgICAgICAgICAgICAgICBXSEVSRSBkZWxldGVkX2F0IElTIE5VTEwgQU5EIHNvdXJjZSA9ID8gQU5EIG9wZXJhdGlvbl90eXBlID0gJ3JlbnQnYCwNCiAgICAgICAgICAgICAgICAgICAgW3AubmFtZV0NCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGNvbnN0IHNhbGUgPSBzYWxlUm93c1swXSB8fCB7IHRvdGFsOiAwLCBsYXN0MjRoOiAwLCBsYXN0X3NlZW46IG51bGwgfTsNCiAgICAgICAgICAgICAgICBjb25zdCByZW50ID0gcmVudFJvd3NbMF0gfHwgeyB0b3RhbDogMCwgbGFzdDI0aDogMCwgbGFzdF9zZWVuOiBudWxsIH07DQoNCiAgICAgICAgICAgICAgICBjb25zdCBkaWFnbm9zZSA9IChvcDogInNhbGUiIHwgInJlbnQiLCBzdGF0czogYW55KTogc3RyaW5nID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFwLmFjdGl2ZSkgcmV0dXJuICJQb3J0YWwgaW5hY3Rpdm8iOw0KICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKHN0YXRzLnRvdGFsKSA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09PSAicmVudCIgJiYgTnVtYmVyKHNhbGUudG90YWwpID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiU2luIGFscXVpbGVyZXM6IHJldmlzYXIgVVJML3NsdWdzIGRlIGFscXVpbGVyIG8gYmxvcXVlbyBhbnRpLWJvdCI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlNpbiBkYXRvcyBoaXN0w7NyaWNvcyI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihzdGF0cy5sYXN0MjRoKSA9PT0gMCkgcmV0dXJuICJTaW4gYWN0dWFsaXphY2lvbmVzIMO6bHRpbWFzIDI0aCAocmV2aXNhciBzY3JhcGVyL2Jsb3F1ZW8pIjsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJTYWx1ZCBPSyI7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7DQogICAgICAgICAgICAgICAgICAgIHBvcnRhbF9pZDogcC5pZCwNCiAgICAgICAgICAgICAgICAgICAgcG9ydGFsOiBwLm5hbWUsDQogICAgICAgICAgICAgICAgICAgIHNsdWc6IHAuc2x1ZywNCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBwLmFjdGl2ZSwNCiAgICAgICAgICAgICAgICAgICAgc2FsZTogew0KICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IE51bWJlcihzYWxlLnRvdGFsIHx8IDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDI0aDogTnVtYmVyKHNhbGUubGFzdDI0aCB8fCAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfc2Vlbjogc2FsZS5sYXN0X3NlZW4gfHwgbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdub3NpczogZGlhZ25vc2UoInNhbGUiLCBzYWxlKSwNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgcmVudDogew0KICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IE51bWJlcihyZW50LnRvdGFsIHx8IDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDI0aDogTnVtYmVyKHJlbnQubGFzdDI0aCB8fCAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfc2VlbjogcmVudC5sYXN0X3NlZW4gfHwgbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdub3NpczogZGlhZ25vc2UoInJlbnQiLCByZW50KSwNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgZGF0YSB9KTsNCiAgICAgICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogIkVycm9yIGFsIGNhbGN1bGFyIHNhbHVkIGRlIHNjcmFwZXJzIiB9KTsNCiAgICAgICAgfQ0KICAgIH0sDQp9Ow0K","afterExisted":true,"afterHash":"06d2ca36e0539539bac35a597076ff1f26543e807f4377b825d422957217a79a","afterContent":"aW1wb3J0IHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICJleHByZXNzIjsNCmltcG9ydCB7IFBvcnRhbE1vZGVsIH0gZnJvbSAiLi4vbW9kZWxzL3BvcnRhbE1vZGVsIjsNCmltcG9ydCBwb29sIGZyb20gIi4uL2NvbmZpZy9kYiI7CmltcG9ydCB7IFJvd0RhdGFQYWNrZXQgfSBmcm9tICJteXNxbDIiOwppbXBvcnQgeyBzdXBwb3J0c1NjcmFwZXJPcGVyYXRpb24gfSBmcm9tICIuLi9zY3JhcGVycy9jYXBhYmlsaXRpZXMiOwoNCmV4cG9ydCBjb25zdCBwb3J0YWxDb250cm9sbGVyID0gew0KICAgIGFzeW5jIGdldEFsbChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBjb25zdCBwb3J0YWxzID0gYXdhaXQgUG9ydGFsTW9kZWwuZmluZEFsbCgpOw0KICAgICAgICAgICAgcmVzLmpzb24ocG9ydGFscyk7DQogICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogIkVycm9yIGFsIG9idGVuZXIgcG9ydGFsZXMiIH0pOw0KICAgICAgICB9DQogICAgfSwNCg0KICAgIGFzeW5jIGNyZWF0ZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgc2x1Zywgc2NyYXBlcl9jbGFzcywgYWN0aXZlIH0gPSByZXEuYm9keTsNCiAgICAgICAgICAgIGlmICghbmFtZSB8fCAhc2NyYXBlcl9jbGFzcykgew0KICAgICAgICAgICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICJuYW1lIHkgc2NyYXBlcl9jbGFzcyBzb24gb2JsaWdhdG9yaW9zIiB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjb25zdCBpZCA9IGF3YWl0IFBvcnRhbE1vZGVsLmNyZWF0ZSh7IG5hbWUsIHNsdWc6IHNsdWcgfHwgIiIsIHNjcmFwZXJfY2xhc3MsIGFjdGl2ZTogYWN0aXZlID8/IDEgfSk7DQogICAgICAgICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGlkIH0pOw0KICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICJFcnJvciBhbCBjcmVhciBwb3J0YWwiIH0pOw0KICAgICAgICB9DQogICAgfSwNCg0KICAgIGFzeW5jIHRvZ2dsZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyc2VJbnQocmVxLnBhcmFtcy5pZCk7DQogICAgICAgICAgICBhd2FpdCBQb3J0YWxNb2RlbC50b2dnbGVBY3RpdmUoaWQpOw0KICAgICAgICAgICAgY29uc3QgcG9ydGFsID0gYXdhaXQgUG9ydGFsTW9kZWwuZmluZEJ5SWQoaWQpOw0KICAgICAgICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBhY3RpdmU6IHBvcnRhbD8uYWN0aXZlIH0pOw0KICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICJFcnJvciBhbCBjYW1iaWFyIGVzdGFkbyBkZWwgcG9ydGFsIiB9KTsNCiAgICAgICAgfQ0KICAgIH0sDQoNCiAgICBhc3luYyByZW1vdmUocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBjb25zdCBpZCA9IHBhcnNlSW50KHJlcS5wYXJhbXMuaWQpOw0KICAgICAgICAgICAgY29uc3QgcG9ydGFsID0gYXdhaXQgUG9ydGFsTW9kZWwuZmluZEJ5SWQoaWQpOw0KICAgICAgICAgICAgaWYgKCFwb3J0YWwpIHsgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogIlBvcnRhbCBubyBlbmNvbnRyYWRvIiB9KTsgcmV0dXJuOyB9DQogICAgICAgICAgICBhd2FpdCBQb3J0YWxNb2RlbC5kZWxldGVCeUlkKGlkKTsNCiAgICAgICAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSB9KTsNCiAgICAgICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAiRXJyb3IgYWwgZWxpbWluYXIgcG9ydGFsIiB9KTsNCiAgICAgICAgfQ0KICAgIH0sDQoNCiAgICBhc3luYyBoZWFsdGgoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29uc3QgcG9ydGFscyA9IGF3YWl0IFBvcnRhbE1vZGVsLmZpbmRBbGwoKTsNCiAgICAgICAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107DQogICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcG9ydGFscykgew0KICAgICAgICAgICAgICAgIGNvbnN0IFtzYWxlUm93c10gPSBhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oDQogICAgICAgICAgICAgICAgICAgIGBTRUxFQ1QgQ09VTlQoKikgQVMgdG90YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VNKENBU0UgV0hFTiB1cGRhdGVkX2F0ID49IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCAyNCBIT1VSKSBUSEVOIDEgRUxTRSAwIEVORCkgQVMgbGFzdDI0aCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVgodXBkYXRlZF9hdCkgQVMgbGFzdF9zZWVuDQogICAgICAgICAgICAgICAgICAgICBGUk9NIHByb3BlcnRpZXMNCiAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCBBTkQgc291cmNlID0gPyBBTkQgb3BlcmF0aW9uX3R5cGUgPSAnc2FsZSdgLA0KICAgICAgICAgICAgICAgICAgICBbcC5uYW1lXQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgY29uc3QgW3JlbnRSb3dzXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigNCiAgICAgICAgICAgICAgICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyB0b3RhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVU0oQ0FTRSBXSEVOIHVwZGF0ZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDI0IEhPVVIpIFRIRU4gMSBFTFNFIDAgRU5EKSBBUyBsYXN0MjRoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWCh1cGRhdGVkX2F0KSBBUyBsYXN0X3NlZW4NCiAgICAgICAgICAgICAgICAgICAgIEZST00gcHJvcGVydGllcw0KICAgICAgICAgICAgICAgICAgICAgV0hFUkUgZGVsZXRlZF9hdCBJUyBOVUxMIEFORCBzb3VyY2UgPSA/IEFORCBvcGVyYXRpb25fdHlwZSA9ICdyZW50J2AsDQogICAgICAgICAgICAgICAgICAgIFtwLm5hbWVdDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBjb25zdCBzYWxlID0gc2FsZVJvd3NbMF0gfHwgeyB0b3RhbDogMCwgbGFzdDI0aDogMCwgbGFzdF9zZWVuOiBudWxsIH07DQogICAgICAgICAgICAgICAgY29uc3QgcmVudCA9IHJlbnRSb3dzWzBdIHx8IHsgdG90YWw6IDAsIGxhc3QyNGg6IDAsIGxhc3Rfc2VlbjogbnVsbCB9Ow0KDQogICAgICAgICAgICAgICAgY29uc3QgZGlhZ25vc2UgPSAob3A6ICJzYWxlIiB8ICJyZW50Iiwgc3RhdHM6IGFueSk6IHN0cmluZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFwLmFjdGl2ZSkgcmV0dXJuICJQb3J0YWwgaW5hY3Rpdm8iOwogICAgICAgICAgICAgICAgICAgIGlmICghc3VwcG9ydHNTY3JhcGVyT3BlcmF0aW9uKHAuc2NyYXBlcl9jbGFzcywgb3ApKSByZXR1cm4gIk9wZXJhY2nDs24gbm8gc29wb3J0YWRhIjsKICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKHN0YXRzLnRvdGFsKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPT09ICJyZW50IiAmJiBOdW1iZXIoc2FsZS50b3RhbCkgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJTaW4gYWxxdWlsZXJlczogcmV2aXNhciBVUkwvc2x1Z3MgZGUgYWxxdWlsZXIgbyBibG9xdWVvIGFudGktYm90IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiU2luIGRhdG9zIGhpc3TDs3JpY29zIjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKHN0YXRzLmxhc3QyNGgpID09PSAwKSByZXR1cm4gIlNpbiBhY3R1YWxpemFjaW9uZXMgw7psdGltYXMgMjRoIChyZXZpc2FyIHNjcmFwZXIvYmxvcXVlbykiOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlNhbHVkIE9LIjsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgcG9ydGFsX2lkOiBwLmlkLA0KICAgICAgICAgICAgICAgICAgICBwb3J0YWw6IHAubmFtZSwNCiAgICAgICAgICAgICAgICAgICAgc2x1ZzogcC5zbHVnLA0KICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHAuYWN0aXZlLA0KICAgICAgICAgICAgICAgICAgICBzYWxlOiB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogTnVtYmVyKHNhbGUudG90YWwgfHwgMCksDQogICAgICAgICAgICAgICAgICAgICAgICBsYXN0MjRoOiBOdW1iZXIoc2FsZS5sYXN0MjRoIHx8IDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zZWVuOiBzYWxlLmxhc3Rfc2VlbiB8fCBudWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ25vc2lzOiBkaWFnbm9zZSgic2FsZSIsIHNhbGUpLA0KICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICByZW50OiB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogTnVtYmVyKHJlbnQudG90YWwgfHwgMCksDQogICAgICAgICAgICAgICAgICAgICAgICBsYXN0MjRoOiBOdW1iZXIocmVudC5sYXN0MjRoIHx8IDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zZWVuOiByZW50Lmxhc3Rfc2VlbiB8fCBudWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ25vc2lzOiBkaWFnbm9zZSgicmVudCIsIHJlbnQpLA0KICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBkYXRhIH0pOw0KICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAiRXJyb3IgYWwgY2FsY3VsYXIgc2FsdWQgZGUgc2NyYXBlcnMiIH0pOw0KICAgICAgICB9DQogICAgfSwNCn07DQo=","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\models\\propertyModel.ts","beforeExisted":true,"beforeHash":"e39ac99ac8e2d2d5bf94ad01c23be130d3d303cffac085e821a5a2bd6847f8e7","beforeContent":"aW1wb3J0IHBvb2wgZnJvbSAiLi4vY29uZmlnL2RiIjsKaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICIuLi90eXBlcy9wcm9wZXJ0eSI7CmltcG9ydCB7IFJvd0RhdGFQYWNrZXQsIFJlc3VsdFNldEhlYWRlciB9IGZyb20gIm15c3FsMiI7CgpleHBvcnQgY29uc3QgUHJvcGVydHlNb2RlbCA9IHsKICBhc3luYyBmaW5kQWxsKGZpbHRlcnM/OiBQYXJ0aWFsPFByb3BlcnR5Pik6IFByb21pc2U8UHJvcGVydHlbXT4gewogICAgbGV0IHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gcHJvcGVydGllcyBXSEVSRSBkZWxldGVkX2F0IElTIE5VTEwiOwogICAgY29uc3QgcGFyYW1zOiBhbnlbXSA9IFtdOwogICAgaWYgKGZpbHRlcnM/Lm11bmljaXBhbGl0eSkgewogICAgICBxdWVyeSArPSAiIEFORCBtdW5pY2lwYWxpdHkgTElLRSA/IjsKICAgICAgcGFyYW1zLnB1c2goYCUke2ZpbHRlcnMubXVuaWNpcGFsaXR5fSVgKTsKICAgIH0KICAgIGlmIChmaWx0ZXJzPy5wcm9wZXJ0eV90eXBlKSB7CiAgICAgIHF1ZXJ5ICs9ICIgQU5EIHByb3BlcnR5X3R5cGUgPSA/IjsKICAgICAgcGFyYW1zLnB1c2goZmlsdGVycy5wcm9wZXJ0eV90eXBlKTsKICAgIH0KICAgIGlmIChmaWx0ZXJzPy5vcGVyYXRpb25fdHlwZSkgewogICAgICBxdWVyeSArPSAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iOwogICAgICBwYXJhbXMucHVzaChmaWx0ZXJzLm9wZXJhdGlvbl90eXBlKTsKICAgIH0KICAgIHF1ZXJ5ICs9ICIgT1JERVIgQlkgdXBkYXRlZF9hdCBERVNDIjsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnkocXVlcnksIHBhcmFtcyk7CiAgICByZXR1cm4gcm93cyBhcyBQcm9wZXJ0eVtdOwogIH0sCgogIC8qKiBFc3RhZMOtc3RpY2FzIGdsb2JhbGVzIGRlbCBkYXNoYm9hcmQgKHNpbiBjYXJnYXIgdG9kYXMgbGFzIGZpbGFzKSAqLwogIGFzeW5jIGdldFN0YXRzKG9wZXJhdGlvblR5cGU/OiAic2FsZSIgfCAicmVudCIpOiBQcm9taXNlPHsgdG90YWw6IG51bWJlcjsgYXZnX3ByaWNlOiBudW1iZXI7IG1pbl9wcmljZTogbnVtYmVyOyBzb3VyY2VfY291bnQ6IG51bWJlciB9PiB7CiAgICBjb25zdCB3aGVyZU9wZXJhdGlvbiA9IG9wZXJhdGlvblR5cGUgPyAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iIDogIiI7CiAgICBjb25zdCBvcFBhcmFtcyA9IG9wZXJhdGlvblR5cGUgPyBbb3BlcmF0aW9uVHlwZV0gOiBbXTsKICAgIGNvbnN0IFtbc11dID0gKGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyB0b3RhbCwKICAgICAgICAgICAgICBDT0FMRVNDRShBVkcocHJpY2UpLDApIEFTIGF2Z19wcmljZSwKICAgICAgICAgICAgICBDT0FMRVNDRShNSU4ocHJpY2UpLDApIEFTIG1pbl9wcmljZSwKICAgICAgICAgICAgICBDT1VOVChESVNUSU5DVCBzb3VyY2UpIEFTIHNvdXJjZV9jb3VudAogICAgICAgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCR7d2hlcmVPcGVyYXRpb259YCwKICAgICAgb3BQYXJhbXMKICAgICkpIGFzIGFueTsKICAgIHJldHVybiB7CiAgICAgIHRvdGFsOiBOdW1iZXIocy50b3RhbCksCiAgICAgIGF2Z19wcmljZTogTnVtYmVyKHMuYXZnX3ByaWNlKSwKICAgICAgbWluX3ByaWNlOiBOdW1iZXIocy5taW5fcHJpY2UpLAogICAgICBzb3VyY2VfY291bnQ6IE51bWJlcihzLnNvdXJjZV9jb3VudCksCiAgICB9OwogIH0sCgogIC8qKiBAZGVwcmVjYXRlZCB1c2FyIGdldFN0YXRzKCkgKyBmaW5kUGFnaW5hdGVkRFQoKSBlbiBzdSBsdWdhciAqLwogIGFzeW5jIGZpbmRGb3JEYXNoYm9hcmQobGltaXQgPSA0MDApOiBQcm9taXNlPHsgcm93czogUHJvcGVydHlbXTsgdG90YWw6IG51bWJlcjsgYXZnX3ByaWNlOiBudW1iZXI7IG1pbl9wcmljZTogbnVtYmVyIH0+IHsKICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgUHJvcGVydHlNb2RlbC5nZXRTdGF0cygpOwogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICBgU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCBPUkRFUiBCWSBDT0FMRVNDRShzY29yZSwwKSBERVNDLCB1cGRhdGVkX2F0IERFU0MgTElNSVQgP2AsCiAgICAgIFtsaW1pdF0KICAgICk7CiAgICByZXR1cm4geyByb3dzOiByb3dzIGFzIFByb3BlcnR5W10sIHRvdGFsOiBzdGF0cy50b3RhbCwgYXZnX3ByaWNlOiBzdGF0cy5hdmdfcHJpY2UsIG1pbl9wcmljZTogc3RhdHMubWluX3ByaWNlIH07CiAgfSwKCiAgLyoqIENhcmdhIG3DrW5pbWEgcGFyYSBlbCBtYXBhOiBzw7NsbyBjb2x1bW5hcyBuZWNlc2FyaWFzIHBhcmEgbG9zIG1hcmtlcnMgKi8KICBhc3luYyBmaW5kRm9yTWFwKG9wZXJhdGlvblR5cGU/OiAic2FsZSIgfCAicmVudCIpOiBQcm9taXNlPFBpY2s8UHJvcGVydHksICJpZCIgfCAidGl0bGUiIHwgInByaWNlIiB8ICJsYXQiIHwgImxuZyIgfCAic291cmNlIiB8ICJtdW5pY2lwYWxpdHkiIHwgInByb3BlcnR5X3R5cGUiIHwgImltYWdlX3VybCIgfCAib3BlcmF0aW9uX3R5cGUiPltdPiB7CiAgICBjb25zdCB3aGVyZU9wZXJhdGlvbiA9IG9wZXJhdGlvblR5cGUgPyAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iIDogIiI7CiAgICBjb25zdCBvcFBhcmFtcyA9IG9wZXJhdGlvblR5cGUgPyBbb3BlcmF0aW9uVHlwZV0gOiBbXTsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBpZCwgdGl0bGUsIHByaWNlLCBsYXQsIGxuZywgc291cmNlLCBtdW5pY2lwYWxpdHksIHByb3BlcnR5X3R5cGUsIGltYWdlX3VybCwgb3BlcmF0aW9uX3R5cGUKICAgICAgIEZST00gcHJvcGVydGllcyBXSEVSRSBsYXQgSVMgTk9UIE5VTEwgQU5EIGxuZyBJUyBOT1QgTlVMTCBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMCiAgICAgICAke3doZXJlT3BlcmF0aW9ufQogICAgICAgT1JERVIgQlkgdXBkYXRlZF9hdCBERVNDIExJTUlUIDIwMDBgLAogICAgICBvcFBhcmFtcwogICAgKTsKICAgIHJldHVybiByb3dzIGFzIGFueTsKICB9LAoKICBhc3luYyBmaW5kQnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxQcm9wZXJ0eSB8IG51bGw+IHsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnkoIlNFTEVDVCAqIEZST00gcHJvcGVydGllcyBXSEVSRSBpZCA9ID8iLCBbaWRdKTsKICAgIGNvbnN0IGFyciA9IHJvd3MgYXMgUHJvcGVydHlbXTsKICAgIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IGFyclswXSA6IG51bGw7CiAgfSwKCiAgYXN5bmMgdXBzZXJ0KHByb3A6IFByb3BlcnR5ICYgeyBwcmljZV9wZXJfbTI/OiBudW1iZXIgfSk6IFByb21pc2U8bnVtYmVyPiB7CiAgICBjb25zdCBxID0gYElOU0VSVCBJTlRPIHByb3BlcnRpZXMKICAgICAgKHRpdGxlLCBwcmljZSwgbG9jYXRpb24sIG11bmljaXBhbGl0eSwgcHJvcGVydHlfdHlwZSwgb3BlcmF0aW9uX3R5cGUsIHJvb21zLCBiYXRocm9vbXMsIHNpemVfbTIsIGRlc2NyaXB0aW9uLCBpbWFnZV91cmwsIHVybCwgc291cmNlLCBsYXQsIGxuZywgcHJpY2VfcGVyX20yLCB1cGRhdGVkX2F0KQogICAgICBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sIE5PVygpKQogICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURQogICAgICAgIHRpdGxlPVZBTFVFUyh0aXRsZSksIHByaWNlPVZBTFVFUyhwcmljZSksIGxvY2F0aW9uPVZBTFVFUyhsb2NhdGlvbiksCiAgICAgICAgbXVuaWNpcGFsaXR5PVZBTFVFUyhtdW5pY2lwYWxpdHkpLCBwcm9wZXJ0eV90eXBlPVZBTFVFUyhwcm9wZXJ0eV90eXBlKSwgb3BlcmF0aW9uX3R5cGU9VkFMVUVTKG9wZXJhdGlvbl90eXBlKSwKICAgICAgICByb29tcz1WQUxVRVMocm9vbXMpLCBiYXRocm9vbXM9VkFMVUVTKGJhdGhyb29tcyksIHNpemVfbTI9VkFMVUVTKHNpemVfbTIpLAogICAgICAgIGRlc2NyaXB0aW9uPVZBTFVFUyhkZXNjcmlwdGlvbiksIGltYWdlX3VybD1WQUxVRVMoaW1hZ2VfdXJsKSwKICAgICAgICBzb3VyY2U9VkFMVUVTKHNvdXJjZSksIGxhdD1WQUxVRVMobGF0KSwgbG5nPVZBTFVFUyhsbmcpLAogICAgICAgIHByaWNlX3Blcl9tMj1WQUxVRVMocHJpY2VfcGVyX20yKSwgdXBkYXRlZF9hdD1OT1coKWA7CiAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHBvb2wucXVlcnk8UmVzdWx0U2V0SGVhZGVyPihxLCBbCiAgICAgIHByb3AudGl0bGUsIHByb3AucHJpY2UsIHByb3AubG9jYXRpb24sIHByb3AubXVuaWNpcGFsaXR5IHx8IG51bGwsCiAgICAgIHByb3AucHJvcGVydHlfdHlwZSwgcHJvcC5vcGVyYXRpb25fdHlwZSB8fCAic2FsZSIsIHByb3Aucm9vbXMgfHwgbnVsbCwgcHJvcC5iYXRocm9vbXMgfHwgbnVsbCwgcHJvcC5zaXplX20yIHx8IG51bGwsCiAgICAgIHByb3AuZGVzY3JpcHRpb24gfHwgbnVsbCwgcHJvcC5pbWFnZV91cmwgfHwgbnVsbCwgcHJvcC51cmwsIHByb3Auc291cmNlLAogICAgICBwcm9wLmxhdCB8fCBudWxsLCBwcm9wLmxuZyB8fCBudWxsLCBwcm9wLnByaWNlX3Blcl9tMiB8fCBudWxsLAogICAgXSk7CiAgICAvLyBPbiBpbnNlcnQ6IGluc2VydElkIGlzIG5ldyBpZDsgb24gdXBkYXRlOiBpbnNlcnRJZCBpcyAwLCBnZXQgYnkgVVJMCiAgICBpZiAocmVzdWx0Lmluc2VydElkID4gMCkgcmV0dXJuIHJlc3VsdC5pbnNlcnRJZDsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigiU0VMRUNUIGlkIEZST00gcHJvcGVydGllcyBXSEVSRSB1cmwgPSA/IiwgW3Byb3AudXJsXSk7CiAgICByZXR1cm4gcm93c1swXT8uaWQgfHwgMDsKICB9LAoKICAvKiogU29mdC1kZWxldGU6IG1hcmNhIGNvbW8gZWxpbWluYWRvIChxdWVkYSBlbiBhcmNoaXZvIDMwIGTDrWFzKSAqLwogIGFzeW5jIGRlbGV0ZUJ5SWQoaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gewogICAgYXdhaXQgcG9vbC5xdWVyeSgiVVBEQVRFIHByb3BlcnRpZXMgU0VUIGRlbGV0ZWRfYXQgPSBOT1coKSBXSEVSRSBpZCA9ID8gQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTCIsIFtpZF0pOwogIH0sCgogIC8qKiBSZXN0YXVyYSB1bmEgcHJvcGllZGFkIGVsaW1pbmFkYSBhbCBsaXN0YWRvIGFjdGl2byAqLwogIGFzeW5jIHJlc3RvcmVCeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHsKICAgIGF3YWl0IHBvb2wucXVlcnkoIlVQREFURSBwcm9wZXJ0aWVzIFNFVCBkZWxldGVkX2F0ID0gTlVMTCBXSEVSRSBpZCA9ID8iLCBbaWRdKTsKICB9LAoKICAvKiogRWxpbWluYWNpw7NuIHBlcm1hbmVudGUgZSBpcnJlY3VwZXJhYmxlICovCiAgYXN5bmMgaGFyZERlbGV0ZUJ5SWQoaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gewogICAgYXdhaXQgcG9vbC5xdWVyeSgiREVMRVRFIEZST00gcHJvcGVydGllcyBXSEVSRSBpZCA9ID8iLCBbaWRdKTsKICB9LAoKICAvKiogRGV2dWVsdmUgcHJvcGllZGFkZXMgZW4gZWwgYXJjaGl2byAoc29mdC1kZWxldGVkKSwgcGFnaW5hZGFzICovCiAgYXN5bmMgZmluZERlbGV0ZWQocGFnZSA9IDEsIHBlclBhZ2UgPSAxMDApOiBQcm9taXNlPHsgcm93czogUHJvcGVydHlbXTsgdG90YWw6IG51bWJlciB9PiB7CiAgICBjb25zdCBvZmZzZXQgPSAocGFnZSAtIDEpICogcGVyUGFnZTsKICAgIGNvbnN0IFtbeyB0b3RhbCB9XV0gPSAoYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICAiU0VMRUNUIENPVU5UKCopIEFTIHRvdGFsIEZST00gcHJvcGVydGllcyBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIgogICAgKSkgYXMgYW55OwogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICBgU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTk9UIE5VTEwKICAgICAgIE9SREVSIEJZIGRlbGV0ZWRfYXQgREVTQyBMSU1JVCA/IE9GRlNFVCA/YCwKICAgICAgW3BlclBhZ2UsIG9mZnNldF0KICAgICk7CiAgICByZXR1cm4geyByb3dzOiByb3dzIGFzIFByb3BlcnR5W10sIHRvdGFsOiBOdW1iZXIodG90YWwpIH07CiAgfSwKCiAgLyoqIFB1cmdhIHByb3BpZWRhZGVzIGVsaW1pbmFkYXMgaGFjZSBtw6FzIGRlIDMwIGTDrWFzICovCiAgYXN5bmMgcHVyZ2VPbGREZWxldGVkKCk6IFByb21pc2U8bnVtYmVyPiB7CiAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHBvb2wucXVlcnk8UmVzdWx0U2V0SGVhZGVyPigKICAgICAgIkRFTEVURSBGUk9NIHByb3BlcnRpZXMgV0hFUkUgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTCBBTkQgZGVsZXRlZF9hdCA8IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCAzMCBEQVkpIgogICAgKTsKICAgIHJldHVybiByZXN1bHQuYWZmZWN0ZWRSb3dzOwogIH0sCgogIC8qKgogICAqIEFyY2hpdmEgKHNvZnQtZGVsZXRlKSBwcm9waWVkYWRlcyBkZSB1biBwb3J0YWwgcXVlIE5PIGZ1ZXJvbiBkZXRlY3RhZGFzCiAgICogZW4gZWwgw7psdGltbyBzY3JhcGluZyAoc3UgYHVwZGF0ZWRfYXRgIGVzIGFudGVyaW9yIGFsIGluaWNpbyBkZWwgc2NyYXBlKS4KICAgKiBAcGFyYW0gc291cmNlICAgTm9tYnJlIGRlbCBwb3J0YWwsIHAuIGVqLiAiSWRlYWxpc3RhIgogICAqIEBwYXJhbSBvbGRlclRoYW4gRmVjaGEgZGUgaW5pY2lvIGRlbCBzY3JhcGluZyDigJQgdG9kbyBsbyBubyBhY3R1YWxpemFkbyBkZXNkZSBlbnRvbmNlcyBzZSBhcmNoaXZhCiAgICogQHJldHVybnMgTsO6bWVybyBkZSBwcm9waWVkYWRlcyBhcmNoaXZhZGFzCiAgICovCiAgYXN5bmMgYXJjaGl2ZVN0YWxlQnlTb3VyY2Uoc291cmNlOiBzdHJpbmcsIG9sZGVyVGhhbjogRGF0ZSk6IFByb21pc2U8bnVtYmVyPiB7CiAgICAvLyBFeGlnaW1vcyBxdWUgbGEgcHJvcGllZGFkIGxsZXZlIEFMIE1FTk9TIDIgZMOtYXMgc2luIGFwYXJlY2VyIGVuIG5pbmfDum4gY2ljbG8KICAgIC8vIGRlIHNjcmFwaW5nIGFudGVzIGRlIGFyY2hpdmFybGEuIEVzdG8gZXZpdGEgcXVlIHVuIGZhbGxvIHB1bnR1YWwgZGVsIHNjcmFwZXIKICAgIC8vICg0MDMsIGFudGktYm90LCByZWQpIGJvcnJlIHByb3BpZWRhZGVzIHF1ZSBzaWd1ZW4gcHVibGljYWRhcyBlbiBlbCBwb3J0YWwuCiAgICBjb25zdCBncmFjZVBlcmlvZE1zID0gMiAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDIgZMOtYXMgZW4gbXMKICAgIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKG9sZGVyVGhhbi5nZXRUaW1lKCkgLSBncmFjZVBlcmlvZE1zKTsKICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeTxSZXN1bHRTZXRIZWFkZXI+KAogICAgICBgVVBEQVRFIHByb3BlcnRpZXMgU0VUIGRlbGV0ZWRfYXQgPSBOT1coKQogICAgICAgV0hFUkUgc291cmNlID0gPyBBTkQgdXBkYXRlZF9hdCA8ID8gQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTGAsCiAgICAgIFtzb3VyY2UsIHRocmVzaG9sZF0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LmFmZmVjdGVkUm93czsKICB9LAoKICBhc3luYyBmaWx0ZXJBZHZhbmNlZChtaW5fcHJpY2U/OiBudW1iZXIsIG1heF9wcmljZT86IG51bWJlciwgcHJvcGVydHlfdHlwZT86IHN0cmluZywgbXVuaWNpcGFsaXR5Pzogc3RyaW5nLCBtaW5fcm9vbXM/OiBudW1iZXIsIG1pbl9zaXplX20yPzogbnVtYmVyLCBvcGVyYXRpb25fdHlwZT86ICJzYWxlIiB8ICJyZW50IiwgdmFsZW5jaWFfem9uZT86IHN0cmluZyk6IFByb21pc2U8UHJvcGVydHlbXT4gewogICAgbGV0IHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gcHJvcGVydGllcyBXSEVSRSBkZWxldGVkX2F0IElTIE5VTEwiOwogICAgY29uc3QgcGFyYW1zOiBhbnlbXSA9IFtdOwogICAgaWYgKG1pbl9wcmljZSAhPSBudWxsKSB7IHF1ZXJ5ICs9ICIgQU5EIHByaWNlID49ID8iOyBwYXJhbXMucHVzaChtaW5fcHJpY2UpOyB9CiAgICBpZiAobWF4X3ByaWNlICE9IG51bGwpIHsgcXVlcnkgKz0gIiBBTkQgcHJpY2UgPD0gPyI7IHBhcmFtcy5wdXNoKG1heF9wcmljZSk7IH0KICAgIGlmIChwcm9wZXJ0eV90eXBlKSB7IHF1ZXJ5ICs9ICIgQU5EIHByb3BlcnR5X3R5cGUgPSA/IjsgcGFyYW1zLnB1c2gocHJvcGVydHlfdHlwZSk7IH0KICAgIGlmIChtdW5pY2lwYWxpdHkpIHsgcXVlcnkgKz0gIiBBTkQgbXVuaWNpcGFsaXR5IExJS0UgPyI7IHBhcmFtcy5wdXNoKGAlJHttdW5pY2lwYWxpdHl9JWApOyB9CiAgICBpZiAob3BlcmF0aW9uX3R5cGUpIHsgcXVlcnkgKz0gIiBBTkQgb3BlcmF0aW9uX3R5cGUgPSA/IjsgcGFyYW1zLnB1c2gob3BlcmF0aW9uX3R5cGUpOyB9CiAgICBpZiAodmFsZW5jaWFfem9uZSkgewogICAgICBxdWVyeSArPSAiIEFORCBtdW5pY2lwYWxpdHkgTElLRSAnJVZhbGVuY2lhJScgQU5EIChsb2NhdGlvbiBMSUtFID8gT1IgdGl0bGUgTElLRSA/KSI7CiAgICAgIHBhcmFtcy5wdXNoKGAlJHt2YWxlbmNpYV96b25lfSVgLCBgJSR7dmFsZW5jaWFfem9uZX0lYCk7CiAgICB9CiAgICBpZiAobWluX3Jvb21zICE9IG51bGwpIHsgcXVlcnkgKz0gIiBBTkQgcm9vbXMgPj0gPyI7IHBhcmFtcy5wdXNoKG1pbl9yb29tcyk7IH0KICAgIGlmIChtaW5fc2l6ZV9tMiAhPSBudWxsKSB7IHF1ZXJ5ICs9ICIgQU5EIHNpemVfbTIgPj0gPyI7IHBhcmFtcy5wdXNoKG1pbl9zaXplX20yKTsgfQogICAgcXVlcnkgKz0gIiBPUkRFUiBCWSBwcmljZSBBU0MiOwogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeShxdWVyeSwgcGFyYW1zKTsKICAgIHJldHVybiByb3dzIGFzIFByb3BlcnR5W107CiAgfSwKCiAgYXN5bmMgdG9nZ2xlRmF2b3JpdGUoaWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4gewogICAgYXdhaXQgcG9vbC5xdWVyeSgKICAgICAgIlVQREFURSBwcm9wZXJ0aWVzIFNFVCBpc19mYXZvcml0ZSA9IElGKGlzX2Zhdm9yaXRlID0gMSwgMCwgMSkgV0hFUkUgaWQgPSA/IiwKICAgICAgW2lkXQogICAgKTsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgIlNFTEVDVCBpc19mYXZvcml0ZSBGUk9NIHByb3BlcnRpZXMgV0hFUkUgaWQgPSA/IiwKICAgICAgW2lkXQogICAgKTsKICAgIHJldHVybiBCb29sZWFuKHJvd3NbMF0/LmlzX2Zhdm9yaXRlKTsKICB9LAoKICBhc3luYyB1cGRhdGVOb3RlcyhpZDogbnVtYmVyLCBub3Rlczogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7CiAgICBhd2FpdCBwb29sLnF1ZXJ5KCJVUERBVEUgcHJvcGVydGllcyBTRVQgbm90ZXMgPSA/IFdIRVJFIGlkID0gPyIsIFtub3RlcyB8fCBudWxsLCBpZF0pOwogIH0sCgogIGFzeW5jIGZpbmRGYXZvcml0ZXMoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7CiAgICBjb25zdCBbcm93c10gPSBhd2FpdCBwb29sLnF1ZXJ5KAogICAgICAiU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGlzX2Zhdm9yaXRlID0gMSBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMIE9SREVSIEJZIHNjb3JlIERFU0MsIHVwZGF0ZWRfYXQgREVTQyIKICAgICk7CiAgICByZXR1cm4gcm93cyBhcyBQcm9wZXJ0eVtdOwogIH0sCgogIGFzeW5jIGZpbmRQYWdpbmF0ZWQoCiAgICBwYWdlOiBudW1iZXIsCiAgICBwZXJQYWdlOiBudW1iZXIsCiAgICBzZWFyY2g/OiBzdHJpbmcKICApOiBQcm9taXNlPHsgcm93czogUHJvcGVydHlbXTsgdG90YWw6IG51bWJlciB9PiB7CiAgICBjb25zdCBvZmZzZXQgPSAocGFnZSAtIDEpICogcGVyUGFnZTsKICAgIGxldCB3aGVyZSA9ICJXSEVSRSBkZWxldGVkX2F0IElTIE5VTEwiOwogICAgY29uc3QgcGFyYW1zOiBhbnlbXSA9IFtdOwogICAgaWYgKHNlYXJjaCkgewogICAgICB3aGVyZSArPSAiIEFORCAodGl0bGUgTElLRSA/IE9SIGxvY2F0aW9uIExJS0UgPyBPUiBtdW5pY2lwYWxpdHkgTElLRSA/KSI7CiAgICAgIHBhcmFtcy5wdXNoKGAlJHtzZWFyY2h9JWAsIGAlJHtzZWFyY2h9JWAsIGAlJHtzZWFyY2h9JWApOwogICAgfQogICAgY29uc3QgW1t7IHRvdGFsIH1dXSA9IChhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oCiAgICAgIGBTRUxFQ1QgQ09VTlQoKikgQVMgdG90YWwgRlJPTSBwcm9wZXJ0aWVzICR7d2hlcmV9YCwKICAgICAgcGFyYW1zCiAgICApKSBhcyBhbnk7CiAgICBjb25zdCBbcm93c10gPSBhd2FpdCBwb29sLnF1ZXJ5KAogICAgICBgU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzICR7d2hlcmV9IE9SREVSIEJZIHVwZGF0ZWRfYXQgREVTQyBMSU1JVCA/IE9GRlNFVCA/YCwKICAgICAgWy4uLnBhcmFtcywgcGVyUGFnZSwgb2Zmc2V0XQogICAgKTsKICAgIHJldHVybiB7IHJvd3M6IHJvd3MgYXMgUHJvcGVydHlbXSwgdG90YWw6IE51bWJlcih0b3RhbCkgfTsKICB9LAoKICAvKioKICAgKiBFbmRwb2ludCBwcmluY2lwYWwgcGFyYSBEYXRhVGFibGVzIHNlcnZlci1zaWRlLgogICAqIFNvcG9ydGEgYsO6c3F1ZWRhIGdsb2JhbCwgZmlsdHJvcyBwb3IgY29sdW1uYSwgb3JkZW5hY2nDs24geSBwYWdpbmFjacOzbi4KICAgKiBDdWFuZG8gZGVsZXRlZD10cnVlIGRldnVlbHZlIGVsIGFyY2hpdm8gZGUgZWxpbWluYWRvcy4KICAgKi8KICBhc3luYyBmaW5kUGFnaW5hdGVkRFQocGFyYW1zOiB7CiAgICBkcmF3OiBudW1iZXI7CiAgICBzdGFydDogbnVtYmVyOwogICAgbGVuZ3RoOiBudW1iZXI7CiAgICBzZWFyY2g/OiBzdHJpbmc7CiAgICBvcmRlckNvbD86IG51bWJlcjsKICAgIG9yZGVyRGlyPzogImFzYyIgfCAiZGVzYyI7CiAgICBtdW5pY2lwYWxpdHk/OiBzdHJpbmc7CiAgICBwcm9wZXJ0eV90eXBlPzogc3RyaW5nOwogICAgbWluX3ByaWNlPzogbnVtYmVyOwogICAgbWF4X3ByaWNlPzogbnVtYmVyOwogICAgbWluX3Jvb21zPzogbnVtYmVyOwogICAgc291cmNlPzogc3RyaW5nOwogICAgZGVsZXRlZD86IGJvb2xlYW47CiAgICBvcGVyYXRpb25fdHlwZT86ICJzYWxlIiB8ICJyZW50IjsKICAgIHZhbGVuY2lhX3pvbmU/OiBzdHJpbmc7CiAgfSk6IFByb21pc2U8eyBkcmF3OiBudW1iZXI7IHJlY29yZHNUb3RhbDogbnVtYmVyOyByZWNvcmRzRmlsdGVyZWQ6IG51bWJlcjsgZGF0YTogUHJvcGVydHlbXSB9PiB7CiAgICBjb25zdCB7CiAgICAgIGRyYXcsIHN0YXJ0LCBsZW5ndGgsIHNlYXJjaCwKICAgICAgb3JkZXJDb2wgPSAyLCBvcmRlckRpciA9ICJhc2MiLAogICAgICBtdW5pY2lwYWxpdHksIHByb3BlcnR5X3R5cGUsCiAgICAgIG1pbl9wcmljZSwgbWF4X3ByaWNlLCBtaW5fcm9vbXMsIHNvdXJjZSwgb3BlcmF0aW9uX3R5cGUsIHZhbGVuY2lhX3pvbmUsCiAgICAgIGRlbGV0ZWQgPSBmYWxzZSwKICAgIH0gPSBwYXJhbXM7CgogICAgLy8gQ29sdW1uYXMgb3JkZW5hYmxlcyAow61uZGljZSBEVCDihpIgY2FtcG8gREIpCiAgICBjb25zdCBzb3J0YWJsZUZpZWxkczogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHsKICAgICAgMTogInRpdGxlIiwgMjogInByaWNlIiwgMzogInByaWNlX3Blcl9tMiIsIDQ6ICJzY29yZSIsCiAgICAgIDU6ICJtdW5pY2lwYWxpdHkiLCA2OiAicHJvcGVydHlfdHlwZSIsIDc6ICJyb29tcyIsIDg6ICJzaXplX20yIiwgOTogInNvdXJjZSIsCiAgICB9OwogICAgY29uc3Qgb3JkZXJGaWVsZCA9IHNvcnRhYmxlRmllbGRzW29yZGVyQ29sXSA/PyAicHJpY2UiOwogICAgY29uc3Qgc2FmZURpciA9IG9yZGVyRGlyID09PSAiZGVzYyIgPyAiREVTQyIgOiAiQVNDIjsKCiAgICAvLyBCYXNlIFdIRVJFCiAgICBjb25zdCBkZWxldGVkQ29uZGl0aW9uID0gZGVsZXRlZCA/ICJkZWxldGVkX2F0IElTIE5PVCBOVUxMIiA6ICJkZWxldGVkX2F0IElTIE5VTEwiOwogICAgbGV0IHdoZXJlID0gYFdIRVJFICR7ZGVsZXRlZENvbmRpdGlvbn1gOwogICAgY29uc3QgcXVlcnlQYXJhbXM6IGFueVtdID0gW107CgogICAgLy8gRmlsdHJvcyBwZXJzb25hbGl6YWRvcwogICAgaWYgKG11bmljaXBhbGl0eSkgeyB3aGVyZSArPSAiIEFORCBtdW5pY2lwYWxpdHkgTElLRSA/IjsgcXVlcnlQYXJhbXMucHVzaChgJSR7bXVuaWNpcGFsaXR5fSVgKTsgfQogICAgaWYgKHByb3BlcnR5X3R5cGUpIHsgd2hlcmUgKz0gIiBBTkQgcHJvcGVydHlfdHlwZSA9ID8iOyBxdWVyeVBhcmFtcy5wdXNoKHByb3BlcnR5X3R5cGUpOyB9CiAgICBpZiAobWluX3ByaWNlICE9IG51bGwgJiYgbWluX3ByaWNlID4gMCkgeyB3aGVyZSArPSAiIEFORCBwcmljZSA+PSA/IjsgcXVlcnlQYXJhbXMucHVzaChtaW5fcHJpY2UpOyB9CiAgICBpZiAobWF4X3ByaWNlICE9IG51bGwgJiYgbWF4X3ByaWNlID4gMCkgeyB3aGVyZSArPSAiIEFORCBwcmljZSA8PSA/IjsgcXVlcnlQYXJhbXMucHVzaChtYXhfcHJpY2UpOyB9CiAgICBpZiAobWluX3Jvb21zICE9IG51bGwgJiYgbWluX3Jvb21zID4gMCkgeyB3aGVyZSArPSAiIEFORCByb29tcyA+PSA/IjsgcXVlcnlQYXJhbXMucHVzaChtaW5fcm9vbXMpOyB9CiAgICBpZiAoc291cmNlKSB7IHdoZXJlICs9ICIgQU5EIHNvdXJjZSBMSUtFID8iOyBxdWVyeVBhcmFtcy5wdXNoKGAlJHtzb3VyY2V9JWApOyB9CiAgICBpZiAob3BlcmF0aW9uX3R5cGUpIHsgd2hlcmUgKz0gIiBBTkQgb3BlcmF0aW9uX3R5cGUgPSA/IjsgcXVlcnlQYXJhbXMucHVzaChvcGVyYXRpb25fdHlwZSk7IH0KICAgIGlmICh2YWxlbmNpYV96b25lKSB7CiAgICAgIHdoZXJlICs9ICIgQU5EIG11bmljaXBhbGl0eSBMSUtFICclVmFsZW5jaWElJyBBTkQgKGxvY2F0aW9uIExJS0UgPyBPUiB0aXRsZSBMSUtFID8pIjsKICAgICAgcXVlcnlQYXJhbXMucHVzaChgJSR7dmFsZW5jaWFfem9uZX0lYCwgYCUke3ZhbGVuY2lhX3pvbmV9JWApOwogICAgfQoKICAgIC8vIFRvdGFsIHNpbiBmaWx0cm8gZGUgYsO6c3F1ZWRhIChwYXJhIHJlY29yZHNUb3RhbCkKICAgIGNvbnN0IFtbeyByZWNvcmRzVG90YWwgfV1dID0gKGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyByZWNvcmRzVG90YWwgRlJPTSBwcm9wZXJ0aWVzICR7d2hlcmV9YCwgcXVlcnlQYXJhbXMKICAgICkpIGFzIGFueTsKCiAgICAvLyBCw7pzcXVlZGEgZ2xvYmFsCiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBbLi4ucXVlcnlQYXJhbXNdOwogICAgaWYgKHNlYXJjaCkgewogICAgICB3aGVyZSArPSAiIEFORCAodGl0bGUgTElLRSA/IE9SIGxvY2F0aW9uIExJS0UgPyBPUiBtdW5pY2lwYWxpdHkgTElLRSA/IE9SIHNvdXJjZSBMSUtFID8pIjsKICAgICAgY29uc3QgcyA9IGAlJHtzZWFyY2h9JWA7CiAgICAgIHNlYXJjaFBhcmFtcy5wdXNoKHMsIHMsIHMsIHMpOwogICAgfQoKICAgIC8vIFRvdGFsIGNvbiBmaWx0cm8gZGUgYsO6c3F1ZWRhIChwYXJhIHJlY29yZHNGaWx0ZXJlZCkKICAgIGNvbnN0IFtbeyByZWNvcmRzRmlsdGVyZWQgfV1dID0gKGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyByZWNvcmRzRmlsdGVyZWQgRlJPTSBwcm9wZXJ0aWVzICR7d2hlcmV9YCwgc2VhcmNoUGFyYW1zCiAgICApKSBhcyBhbnk7CgogICAgLy8gRGF0b3MgZGUgbGEgcMOhZ2luYQogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICBgU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzICR7d2hlcmV9IE9SREVSIEJZICR7b3JkZXJGaWVsZH0gJHtzYWZlRGlyfSBMSU1JVCA/IE9GRlNFVCA/YCwKICAgICAgWy4uLnNlYXJjaFBhcmFtcywgbGVuZ3RoLCBzdGFydF0KICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgZHJhdywKICAgICAgcmVjb3Jkc1RvdGFsOiBOdW1iZXIocmVjb3Jkc1RvdGFsKSwKICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBOdW1iZXIocmVjb3Jkc0ZpbHRlcmVkKSwKICAgICAgZGF0YTogcm93cyBhcyBQcm9wZXJ0eVtdLAogICAgfTsKICB9LAp9Owo=","afterExisted":true,"afterHash":"27cd395535c8904166f3ede535ef1acdef5b490afe9e9ebbc81b4c52af570bb8","afterContent":"aW1wb3J0IHBvb2wgZnJvbSAiLi4vY29uZmlnL2RiIjsKaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICIuLi90eXBlcy9wcm9wZXJ0eSI7CmltcG9ydCB7IFJvd0RhdGFQYWNrZXQsIFJlc3VsdFNldEhlYWRlciB9IGZyb20gIm15c3FsMiI7CgpleHBvcnQgY29uc3QgUHJvcGVydHlNb2RlbCA9IHsKICBhc3luYyBmaW5kQWxsKGZpbHRlcnM/OiBQYXJ0aWFsPFByb3BlcnR5Pik6IFByb21pc2U8UHJvcGVydHlbXT4gewogICAgbGV0IHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gcHJvcGVydGllcyBXSEVSRSBkZWxldGVkX2F0IElTIE5VTEwiOwogICAgY29uc3QgcGFyYW1zOiBhbnlbXSA9IFtdOwogICAgaWYgKGZpbHRlcnM/Lm11bmljaXBhbGl0eSkgewogICAgICBxdWVyeSArPSAiIEFORCBtdW5pY2lwYWxpdHkgTElLRSA/IjsKICAgICAgcGFyYW1zLnB1c2goYCUke2ZpbHRlcnMubXVuaWNpcGFsaXR5fSVgKTsKICAgIH0KICAgIGlmIChmaWx0ZXJzPy5wcm9wZXJ0eV90eXBlKSB7CiAgICAgIHF1ZXJ5ICs9ICIgQU5EIHByb3BlcnR5X3R5cGUgPSA/IjsKICAgICAgcGFyYW1zLnB1c2goZmlsdGVycy5wcm9wZXJ0eV90eXBlKTsKICAgIH0KICAgIGlmIChmaWx0ZXJzPy5vcGVyYXRpb25fdHlwZSkgewogICAgICBxdWVyeSArPSAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iOwogICAgICBwYXJhbXMucHVzaChmaWx0ZXJzLm9wZXJhdGlvbl90eXBlKTsKICAgIH0KICAgIHF1ZXJ5ICs9ICIgT1JERVIgQlkgdXBkYXRlZF9hdCBERVNDIjsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnkocXVlcnksIHBhcmFtcyk7CiAgICByZXR1cm4gcm93cyBhcyBQcm9wZXJ0eVtdOwogIH0sCgogIC8qKiBFc3RhZMOtc3RpY2FzIGdsb2JhbGVzIGRlbCBkYXNoYm9hcmQgKHNpbiBjYXJnYXIgdG9kYXMgbGFzIGZpbGFzKSAqLwogIGFzeW5jIGdldFN0YXRzKG9wZXJhdGlvblR5cGU/OiAic2FsZSIgfCAicmVudCIpOiBQcm9taXNlPHsgdG90YWw6IG51bWJlcjsgYXZnX3ByaWNlOiBudW1iZXI7IG1pbl9wcmljZTogbnVtYmVyOyBzb3VyY2VfY291bnQ6IG51bWJlciB9PiB7CiAgICBjb25zdCB3aGVyZU9wZXJhdGlvbiA9IG9wZXJhdGlvblR5cGUgPyAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iIDogIiI7CiAgICBjb25zdCBvcFBhcmFtcyA9IG9wZXJhdGlvblR5cGUgPyBbb3BlcmF0aW9uVHlwZV0gOiBbXTsKICAgIGNvbnN0IFtbc11dID0gKGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyB0b3RhbCwKICAgICAgICAgICAgICBDT0FMRVNDRShBVkcocHJpY2UpLDApIEFTIGF2Z19wcmljZSwKICAgICAgICAgICAgICBDT0FMRVNDRShNSU4ocHJpY2UpLDApIEFTIG1pbl9wcmljZSwKICAgICAgICAgICAgICBDT1VOVChESVNUSU5DVCBzb3VyY2UpIEFTIHNvdXJjZV9jb3VudAogICAgICAgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCR7d2hlcmVPcGVyYXRpb259YCwKICAgICAgb3BQYXJhbXMKICAgICkpIGFzIGFueTsKICAgIHJldHVybiB7CiAgICAgIHRvdGFsOiBOdW1iZXIocy50b3RhbCksCiAgICAgIGF2Z19wcmljZTogTnVtYmVyKHMuYXZnX3ByaWNlKSwKICAgICAgbWluX3ByaWNlOiBOdW1iZXIocy5taW5fcHJpY2UpLAogICAgICBzb3VyY2VfY291bnQ6IE51bWJlcihzLnNvdXJjZV9jb3VudCksCiAgICB9OwogIH0sCgogIC8qKiBAZGVwcmVjYXRlZCB1c2FyIGdldFN0YXRzKCkgKyBmaW5kUGFnaW5hdGVkRFQoKSBlbiBzdSBsdWdhciAqLwogIGFzeW5jIGZpbmRGb3JEYXNoYm9hcmQobGltaXQgPSA0MDApOiBQcm9taXNlPHsgcm93czogUHJvcGVydHlbXTsgdG90YWw6IG51bWJlcjsgYXZnX3ByaWNlOiBudW1iZXI7IG1pbl9wcmljZTogbnVtYmVyIH0+IHsKICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgUHJvcGVydHlNb2RlbC5nZXRTdGF0cygpOwogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICBgU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCBPUkRFUiBCWSBDT0FMRVNDRShzY29yZSwwKSBERVNDLCB1cGRhdGVkX2F0IERFU0MgTElNSVQgP2AsCiAgICAgIFtsaW1pdF0KICAgICk7CiAgICByZXR1cm4geyByb3dzOiByb3dzIGFzIFByb3BlcnR5W10sIHRvdGFsOiBzdGF0cy50b3RhbCwgYXZnX3ByaWNlOiBzdGF0cy5hdmdfcHJpY2UsIG1pbl9wcmljZTogc3RhdHMubWluX3ByaWNlIH07CiAgfSwKCiAgLyoqIENhcmdhIG3DrW5pbWEgcGFyYSBlbCBtYXBhOiBzw7NsbyBjb2x1bW5hcyBuZWNlc2FyaWFzIHBhcmEgbG9zIG1hcmtlcnMgKi8KICBhc3luYyBmaW5kRm9yTWFwKG9wZXJhdGlvblR5cGU/OiAic2FsZSIgfCAicmVudCIpOiBQcm9taXNlPFBpY2s8UHJvcGVydHksICJpZCIgfCAidGl0bGUiIHwgInByaWNlIiB8ICJsYXQiIHwgImxuZyIgfCAic291cmNlIiB8ICJtdW5pY2lwYWxpdHkiIHwgInByb3BlcnR5X3R5cGUiIHwgImltYWdlX3VybCIgfCAib3BlcmF0aW9uX3R5cGUiPltdPiB7CiAgICBjb25zdCB3aGVyZU9wZXJhdGlvbiA9IG9wZXJhdGlvblR5cGUgPyAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iIDogIiI7CiAgICBjb25zdCBvcFBhcmFtcyA9IG9wZXJhdGlvblR5cGUgPyBbb3BlcmF0aW9uVHlwZV0gOiBbXTsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBpZCwgdGl0bGUsIHByaWNlLCBsYXQsIGxuZywgc291cmNlLCBtdW5pY2lwYWxpdHksIHByb3BlcnR5X3R5cGUsIGltYWdlX3VybCwgb3BlcmF0aW9uX3R5cGUKICAgICAgIEZST00gcHJvcGVydGllcyBXSEVSRSBsYXQgSVMgTk9UIE5VTEwgQU5EIGxuZyBJUyBOT1QgTlVMTCBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMCiAgICAgICAke3doZXJlT3BlcmF0aW9ufQogICAgICAgT1JERVIgQlkgdXBkYXRlZF9hdCBERVNDIExJTUlUIDIwMDBgLAogICAgICBvcFBhcmFtcwogICAgKTsKICAgIHJldHVybiByb3dzIGFzIGFueTsKICB9LAoKICBhc3luYyBmaW5kQnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxQcm9wZXJ0eSB8IG51bGw+IHsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnkoIlNFTEVDVCAqIEZST00gcHJvcGVydGllcyBXSEVSRSBpZCA9ID8iLCBbaWRdKTsKICAgIGNvbnN0IGFyciA9IHJvd3MgYXMgUHJvcGVydHlbXTsKICAgIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IGFyclswXSA6IG51bGw7CiAgfSwKCiAgYXN5bmMgdXBzZXJ0KHByb3A6IFByb3BlcnR5ICYgeyBwcmljZV9wZXJfbTI/OiBudW1iZXIgfSk6IFByb21pc2U8bnVtYmVyPiB7CiAgICBjb25zdCBxID0gYElOU0VSVCBJTlRPIHByb3BlcnRpZXMKICAgICAgKHRpdGxlLCBwcmljZSwgbG9jYXRpb24sIG11bmljaXBhbGl0eSwgcHJvcGVydHlfdHlwZSwgb3BlcmF0aW9uX3R5cGUsIHJvb21zLCBiYXRocm9vbXMsIHNpemVfbTIsIGRlc2NyaXB0aW9uLCBpbWFnZV91cmwsIHVybCwgc291cmNlLCBsYXQsIGxuZywgcHJpY2VfcGVyX20yLCB1cGRhdGVkX2F0KQogICAgICBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sIE5PVygpKQogICAgICBPTiBEVVBMSUNBVEUgS0VZIFVQREFURQogICAgICAgIHRpdGxlPVZBTFVFUyh0aXRsZSksIHByaWNlPVZBTFVFUyhwcmljZSksIGxvY2F0aW9uPVZBTFVFUyhsb2NhdGlvbiksCiAgICAgICAgbXVuaWNpcGFsaXR5PVZBTFVFUyhtdW5pY2lwYWxpdHkpLCBwcm9wZXJ0eV90eXBlPVZBTFVFUyhwcm9wZXJ0eV90eXBlKSwgb3BlcmF0aW9uX3R5cGU9VkFMVUVTKG9wZXJhdGlvbl90eXBlKSwKICAgICAgICByb29tcz1WQUxVRVMocm9vbXMpLCBiYXRocm9vbXM9VkFMVUVTKGJhdGhyb29tcyksIHNpemVfbTI9VkFMVUVTKHNpemVfbTIpLAogICAgICAgIGRlc2NyaXB0aW9uPVZBTFVFUyhkZXNjcmlwdGlvbiksIGltYWdlX3VybD1WQUxVRVMoaW1hZ2VfdXJsKSwKICAgICAgICBzb3VyY2U9VkFMVUVTKHNvdXJjZSksIGxhdD1WQUxVRVMobGF0KSwgbG5nPVZBTFVFUyhsbmcpLAogICAgICAgIHByaWNlX3Blcl9tMj1WQUxVRVMocHJpY2VfcGVyX20yKSwgZGVsZXRlZF9hdD1OVUxMLCB1cGRhdGVkX2F0PU5PVygpYDsKICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeTxSZXN1bHRTZXRIZWFkZXI+KHEsIFsKICAgICAgcHJvcC50aXRsZSwgcHJvcC5wcmljZSwgcHJvcC5sb2NhdGlvbiwgcHJvcC5tdW5pY2lwYWxpdHkgfHwgbnVsbCwKICAgICAgcHJvcC5wcm9wZXJ0eV90eXBlLCBwcm9wLm9wZXJhdGlvbl90eXBlIHx8ICJzYWxlIiwgcHJvcC5yb29tcyB8fCBudWxsLCBwcm9wLmJhdGhyb29tcyB8fCBudWxsLCBwcm9wLnNpemVfbTIgfHwgbnVsbCwKICAgICAgcHJvcC5kZXNjcmlwdGlvbiB8fCBudWxsLCBwcm9wLmltYWdlX3VybCB8fCBudWxsLCBwcm9wLnVybCwgcHJvcC5zb3VyY2UsCiAgICAgIHByb3AubGF0IHx8IG51bGwsIHByb3AubG5nIHx8IG51bGwsIHByb3AucHJpY2VfcGVyX20yIHx8IG51bGwsCiAgICBdKTsKICAgIC8vIE9uIGluc2VydDogaW5zZXJ0SWQgaXMgbmV3IGlkOyBvbiB1cGRhdGU6IGluc2VydElkIGlzIDAsIGdldCBieSBVUkwKICAgIGlmIChyZXN1bHQuaW5zZXJ0SWQgPiAwKSByZXR1cm4gcmVzdWx0Lmluc2VydElkOwogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KCJTRUxFQ1QgaWQgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIHVybCA9ID8iLCBbcHJvcC51cmxdKTsKICAgIHJldHVybiByb3dzWzBdPy5pZCB8fCAwOwogIH0sCgogIC8qKiBTb2Z0LWRlbGV0ZTogbWFyY2EgY29tbyBlbGltaW5hZG8gKHF1ZWRhIGVuIGFyY2hpdm8gMzAgZMOtYXMpICovCiAgYXN5bmMgZGVsZXRlQnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7CiAgICBhd2FpdCBwb29sLnF1ZXJ5KCJVUERBVEUgcHJvcGVydGllcyBTRVQgZGVsZXRlZF9hdCA9IE5PVygpIFdIRVJFIGlkID0gPyBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMIiwgW2lkXSk7CiAgfSwKCiAgLyoqIFJlc3RhdXJhIHVuYSBwcm9waWVkYWQgZWxpbWluYWRhIGFsIGxpc3RhZG8gYWN0aXZvICovCiAgYXN5bmMgcmVzdG9yZUJ5SWQoaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gewogICAgYXdhaXQgcG9vbC5xdWVyeSgiVVBEQVRFIHByb3BlcnRpZXMgU0VUIGRlbGV0ZWRfYXQgPSBOVUxMIFdIRVJFIGlkID0gPyIsIFtpZF0pOwogIH0sCgogIC8qKiBFbGltaW5hY2nDs24gcGVybWFuZW50ZSBlIGlycmVjdXBlcmFibGUgKi8KICBhc3luYyBoYXJkRGVsZXRlQnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7CiAgICBhd2FpdCBwb29sLnF1ZXJ5KCJERUxFVEUgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGlkID0gPyIsIFtpZF0pOwogIH0sCgogIC8qKiBEZXZ1ZWx2ZSBwcm9waWVkYWRlcyBlbiBlbCBhcmNoaXZvIChzb2Z0LWRlbGV0ZWQpLCBwYWdpbmFkYXMgKi8KICBhc3luYyBmaW5kRGVsZXRlZChwYWdlID0gMSwgcGVyUGFnZSA9IDEwMCk6IFByb21pc2U8eyByb3dzOiBQcm9wZXJ0eVtdOyB0b3RhbDogbnVtYmVyIH0+IHsKICAgIGNvbnN0IG9mZnNldCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgY29uc3QgW1t7IHRvdGFsIH1dXSA9IChhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oCiAgICAgICJTRUxFQ1QgQ09VTlQoKikgQVMgdG90YWwgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTk9UIE5VTEwiCiAgICApKSBhcyBhbnk7CiAgICBjb25zdCBbcm93c10gPSBhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oCiAgICAgIGBTRUxFQ1QgKiBGUk9NIHByb3BlcnRpZXMgV0hFUkUgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTAogICAgICAgT1JERVIgQlkgZGVsZXRlZF9hdCBERVNDIExJTUlUID8gT0ZGU0VUID9gLAogICAgICBbcGVyUGFnZSwgb2Zmc2V0XQogICAgKTsKICAgIHJldHVybiB7IHJvd3M6IHJvd3MgYXMgUHJvcGVydHlbXSwgdG90YWw6IE51bWJlcih0b3RhbCkgfTsKICB9LAoKICAvKiogUHVyZ2EgcHJvcGllZGFkZXMgZWxpbWluYWRhcyBoYWNlIG3DoXMgZGUgMzAgZMOtYXMgKi8KICBhc3luYyBwdXJnZU9sZERlbGV0ZWQoKTogUHJvbWlzZTxudW1iZXI+IHsKICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeTxSZXN1bHRTZXRIZWFkZXI+KAogICAgICAiREVMRVRFIEZST00gcHJvcGVydGllcyBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBkZWxldGVkX2F0IDwgREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDMwIERBWSkiCiAgICApOwogICAgcmV0dXJuIHJlc3VsdC5hZmZlY3RlZFJvd3M7CiAgfSwKCiAgLyoqCiAgICogQXJjaGl2YSAoc29mdC1kZWxldGUpIHByb3BpZWRhZGVzIGRlIHVuIHBvcnRhbCB5IG9wZXJhY2nDs24gcXVlIE5PIGZ1ZXJvbgogICAqIGRldGVjdGFkYXMgZW4gZWwgw7psdGltbyBzY3JhcGluZyAoc3UgYHVwZGF0ZWRfYXRgIGVzIGFudGVyaW9yIGFsIGluaWNpbykuCiAgICogQHBhcmFtIHNvdXJjZSAgIE5vbWJyZSBkZWwgcG9ydGFsLCBwLiBlai4gIklkZWFsaXN0YSIKICAgKiBAcGFyYW0gb3BlcmF0aW9uVHlwZSBPcGVyYWNpw7NuIGRlbCBjaWNsbzsgdmVudGEgbnVuY2EgZGViZSBhcmNoaXZhciBhbHF1aWxlcgogICAqIEBwYXJhbSBvbGRlclRoYW4gRmVjaGEgZGUgaW5pY2lvIGRlbCBzY3JhcGluZyDigJQgdG9kbyBsbyBubyBhY3R1YWxpemFkbyBkZXNkZSBlbnRvbmNlcyBzZSBhcmNoaXZhCiAgICogQHJldHVybnMgTsO6bWVybyBkZSBwcm9waWVkYWRlcyBhcmNoaXZhZGFzCiAgICovCiAgYXN5bmMgYXJjaGl2ZVN0YWxlQnlTb3VyY2UoCiAgICBzb3VyY2U6IHN0cmluZywKICAgIG9wZXJhdGlvblR5cGU6ICJzYWxlIiB8ICJyZW50IiwKICAgIG9sZGVyVGhhbjogRGF0ZQogICk6IFByb21pc2U8bnVtYmVyPiB7CiAgICAvLyBFeGlnaW1vcyBxdWUgbGEgcHJvcGllZGFkIGxsZXZlIEFMIE1FTk9TIDIgZMOtYXMgc2luIGFwYXJlY2VyIGVuIG5pbmfDum4gY2ljbG8KICAgIC8vIGRlIHNjcmFwaW5nIGFudGVzIGRlIGFyY2hpdmFybGEuIEVzdG8gZXZpdGEgcXVlIHVuIGZhbGxvIHB1bnR1YWwgZGVsIHNjcmFwZXIKICAgIC8vICg0MDMsIGFudGktYm90LCByZWQpIGJvcnJlIHByb3BpZWRhZGVzIHF1ZSBzaWd1ZW4gcHVibGljYWRhcyBlbiBlbCBwb3J0YWwuCiAgICBjb25zdCBncmFjZVBlcmlvZE1zID0gMiAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDIgZMOtYXMgZW4gbXMKICAgIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKG9sZGVyVGhhbi5nZXRUaW1lKCkgLSBncmFjZVBlcmlvZE1zKTsKICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeTxSZXN1bHRTZXRIZWFkZXI+KAogICAgICBgVVBEQVRFIHByb3BlcnRpZXMgU0VUIGRlbGV0ZWRfYXQgPSBOT1coKQogICAgICAgV0hFUkUgc291cmNlID0gPyBBTkQgb3BlcmF0aW9uX3R5cGUgPSA/CiAgICAgICAgIEFORCB1cGRhdGVkX2F0IDwgPyBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMYCwKICAgICAgW3NvdXJjZSwgb3BlcmF0aW9uVHlwZSwgdGhyZXNob2xkXQogICAgKTsKICAgIHJldHVybiByZXN1bHQuYWZmZWN0ZWRSb3dzOwogIH0sCgogIGFzeW5jIGZpbHRlckFkdmFuY2VkKG1pbl9wcmljZT86IG51bWJlciwgbWF4X3ByaWNlPzogbnVtYmVyLCBwcm9wZXJ0eV90eXBlPzogc3RyaW5nLCBtdW5pY2lwYWxpdHk/OiBzdHJpbmcsIG1pbl9yb29tcz86IG51bWJlciwgbWluX3NpemVfbTI/OiBudW1iZXIsIG9wZXJhdGlvbl90eXBlPzogInNhbGUiIHwgInJlbnQiLCB2YWxlbmNpYV96b25lPzogc3RyaW5nKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7CiAgICBsZXQgcXVlcnkgPSAiU0VMRUNUICogRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCI7CiAgICBjb25zdCBwYXJhbXM6IGFueVtdID0gW107CiAgICBpZiAobWluX3ByaWNlICE9IG51bGwpIHsgcXVlcnkgKz0gIiBBTkQgcHJpY2UgPj0gPyI7IHBhcmFtcy5wdXNoKG1pbl9wcmljZSk7IH0KICAgIGlmIChtYXhfcHJpY2UgIT0gbnVsbCkgeyBxdWVyeSArPSAiIEFORCBwcmljZSA8PSA/IjsgcGFyYW1zLnB1c2gobWF4X3ByaWNlKTsgfQogICAgaWYgKHByb3BlcnR5X3R5cGUpIHsgcXVlcnkgKz0gIiBBTkQgcHJvcGVydHlfdHlwZSA9ID8iOyBwYXJhbXMucHVzaChwcm9wZXJ0eV90eXBlKTsgfQogICAgaWYgKG11bmljaXBhbGl0eSkgeyBxdWVyeSArPSAiIEFORCBtdW5pY2lwYWxpdHkgTElLRSA/IjsgcGFyYW1zLnB1c2goYCUke211bmljaXBhbGl0eX0lYCk7IH0KICAgIGlmIChvcGVyYXRpb25fdHlwZSkgeyBxdWVyeSArPSAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iOyBwYXJhbXMucHVzaChvcGVyYXRpb25fdHlwZSk7IH0KICAgIGlmICh2YWxlbmNpYV96b25lKSB7CiAgICAgIHF1ZXJ5ICs9ICIgQU5EIG11bmljaXBhbGl0eSBMSUtFICclVmFsZW5jaWElJyBBTkQgKGxvY2F0aW9uIExJS0UgPyBPUiB0aXRsZSBMSUtFID8pIjsKICAgICAgcGFyYW1zLnB1c2goYCUke3ZhbGVuY2lhX3pvbmV9JWAsIGAlJHt2YWxlbmNpYV96b25lfSVgKTsKICAgIH0KICAgIGlmIChtaW5fcm9vbXMgIT0gbnVsbCkgeyBxdWVyeSArPSAiIEFORCByb29tcyA+PSA/IjsgcGFyYW1zLnB1c2gobWluX3Jvb21zKTsgfQogICAgaWYgKG1pbl9zaXplX20yICE9IG51bGwpIHsgcXVlcnkgKz0gIiBBTkQgc2l6ZV9tMiA+PSA/IjsgcGFyYW1zLnB1c2gobWluX3NpemVfbTIpOyB9CiAgICBxdWVyeSArPSAiIE9SREVSIEJZIHByaWNlIEFTQyI7CiAgICBjb25zdCBbcm93c10gPSBhd2FpdCBwb29sLnF1ZXJ5KHF1ZXJ5LCBwYXJhbXMpOwogICAgcmV0dXJuIHJvd3MgYXMgUHJvcGVydHlbXTsKICB9LAoKICBhc3luYyB0b2dnbGVGYXZvcml0ZShpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7CiAgICBhd2FpdCBwb29sLnF1ZXJ5KAogICAgICAiVVBEQVRFIHByb3BlcnRpZXMgU0VUIGlzX2Zhdm9yaXRlID0gSUYoaXNfZmF2b3JpdGUgPSAxLCAwLCAxKSBXSEVSRSBpZCA9ID8iLAogICAgICBbaWRdCiAgICApOwogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICAiU0VMRUNUIGlzX2Zhdm9yaXRlIEZST00gcHJvcGVydGllcyBXSEVSRSBpZCA9ID8iLAogICAgICBbaWRdCiAgICApOwogICAgcmV0dXJuIEJvb2xlYW4ocm93c1swXT8uaXNfZmF2b3JpdGUpOwogIH0sCgogIGFzeW5jIHVwZGF0ZU5vdGVzKGlkOiBudW1iZXIsIG5vdGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsKICAgIGF3YWl0IHBvb2wucXVlcnkoIlVQREFURSBwcm9wZXJ0aWVzIFNFVCBub3RlcyA9ID8gV0hFUkUgaWQgPSA/IiwgW25vdGVzIHx8IG51bGwsIGlkXSk7CiAgfSwKCiAgYXN5bmMgZmluZEZhdm9yaXRlcygpOiBQcm9taXNlPFByb3BlcnR5W10+IHsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnkoCiAgICAgICJTRUxFQ1QgKiBGUk9NIHByb3BlcnRpZXMgV0hFUkUgaXNfZmF2b3JpdGUgPSAxIEFORCBkZWxldGVkX2F0IElTIE5VTEwgT1JERVIgQlkgc2NvcmUgREVTQywgdXBkYXRlZF9hdCBERVNDIgogICAgKTsKICAgIHJldHVybiByb3dzIGFzIFByb3BlcnR5W107CiAgfSwKCiAgYXN5bmMgZmluZFBhZ2luYXRlZCgKICAgIHBhZ2U6IG51bWJlciwKICAgIHBlclBhZ2U6IG51bWJlciwKICAgIHNlYXJjaD86IHN0cmluZwogICk6IFByb21pc2U8eyByb3dzOiBQcm9wZXJ0eVtdOyB0b3RhbDogbnVtYmVyIH0+IHsKICAgIGNvbnN0IG9mZnNldCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgbGV0IHdoZXJlID0gIldIRVJFIGRlbGV0ZWRfYXQgSVMgTlVMTCI7CiAgICBjb25zdCBwYXJhbXM6IGFueVtdID0gW107CiAgICBpZiAoc2VhcmNoKSB7CiAgICAgIHdoZXJlICs9ICIgQU5EICh0aXRsZSBMSUtFID8gT1IgbG9jYXRpb24gTElLRSA/IE9SIG11bmljaXBhbGl0eSBMSUtFID8pIjsKICAgICAgcGFyYW1zLnB1c2goYCUke3NlYXJjaH0lYCwgYCUke3NlYXJjaH0lYCwgYCUke3NlYXJjaH0lYCk7CiAgICB9CiAgICBjb25zdCBbW3sgdG90YWwgfV1dID0gKGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPigKICAgICAgYFNFTEVDVCBDT1VOVCgqKSBBUyB0b3RhbCBGUk9NIHByb3BlcnRpZXMgJHt3aGVyZX1gLAogICAgICBwYXJhbXMKICAgICkpIGFzIGFueTsKICAgIGNvbnN0IFtyb3dzXSA9IGF3YWl0IHBvb2wucXVlcnkoCiAgICAgIGBTRUxFQ1QgKiBGUk9NIHByb3BlcnRpZXMgJHt3aGVyZX0gT1JERVIgQlkgdXBkYXRlZF9hdCBERVNDIExJTUlUID8gT0ZGU0VUID9gLAogICAgICBbLi4ucGFyYW1zLCBwZXJQYWdlLCBvZmZzZXRdCiAgICApOwogICAgcmV0dXJuIHsgcm93czogcm93cyBhcyBQcm9wZXJ0eVtdLCB0b3RhbDogTnVtYmVyKHRvdGFsKSB9OwogIH0sCgogIC8qKgogICAqIEVuZHBvaW50IHByaW5jaXBhbCBwYXJhIERhdGFUYWJsZXMgc2VydmVyLXNpZGUuCiAgICogU29wb3J0YSBiw7pzcXVlZGEgZ2xvYmFsLCBmaWx0cm9zIHBvciBjb2x1bW5hLCBvcmRlbmFjacOzbiB5IHBhZ2luYWNpw7NuLgogICAqIEN1YW5kbyBkZWxldGVkPXRydWUgZGV2dWVsdmUgZWwgYXJjaGl2byBkZSBlbGltaW5hZG9zLgogICAqLwogIGFzeW5jIGZpbmRQYWdpbmF0ZWREVChwYXJhbXM6IHsKICAgIGRyYXc6IG51bWJlcjsKICAgIHN0YXJ0OiBudW1iZXI7CiAgICBsZW5ndGg6IG51bWJlcjsKICAgIHNlYXJjaD86IHN0cmluZzsKICAgIG9yZGVyQ29sPzogbnVtYmVyOwogICAgb3JkZXJEaXI/OiAiYXNjIiB8ICJkZXNjIjsKICAgIG11bmljaXBhbGl0eT86IHN0cmluZzsKICAgIHByb3BlcnR5X3R5cGU/OiBzdHJpbmc7CiAgICBtaW5fcHJpY2U/OiBudW1iZXI7CiAgICBtYXhfcHJpY2U/OiBudW1iZXI7CiAgICBtaW5fcm9vbXM/OiBudW1iZXI7CiAgICBzb3VyY2U/OiBzdHJpbmc7CiAgICBkZWxldGVkPzogYm9vbGVhbjsKICAgIG9wZXJhdGlvbl90eXBlPzogInNhbGUiIHwgInJlbnQiOwogICAgdmFsZW5jaWFfem9uZT86IHN0cmluZzsKICB9KTogUHJvbWlzZTx7IGRyYXc6IG51bWJlcjsgcmVjb3Jkc1RvdGFsOiBudW1iZXI7IHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyOyBkYXRhOiBQcm9wZXJ0eVtdIH0+IHsKICAgIGNvbnN0IHsKICAgICAgZHJhdywgc3RhcnQsIGxlbmd0aCwgc2VhcmNoLAogICAgICBvcmRlckNvbCA9IDIsIG9yZGVyRGlyID0gImFzYyIsCiAgICAgIG11bmljaXBhbGl0eSwgcHJvcGVydHlfdHlwZSwKICAgICAgbWluX3ByaWNlLCBtYXhfcHJpY2UsIG1pbl9yb29tcywgc291cmNlLCBvcGVyYXRpb25fdHlwZSwgdmFsZW5jaWFfem9uZSwKICAgICAgZGVsZXRlZCA9IGZhbHNlLAogICAgfSA9IHBhcmFtczsKCiAgICAvLyBDb2x1bW5hcyBvcmRlbmFibGVzICjDrW5kaWNlIERUIOKGkiBjYW1wbyBEQikKICAgIGNvbnN0IHNvcnRhYmxlRmllbGRzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0gewogICAgICAxOiAidGl0bGUiLCAyOiAicHJpY2UiLCAzOiAicHJpY2VfcGVyX20yIiwgNDogInNjb3JlIiwKICAgICAgNTogIm11bmljaXBhbGl0eSIsIDY6ICJwcm9wZXJ0eV90eXBlIiwgNzogInJvb21zIiwgODogInNpemVfbTIiLCA5OiAic291cmNlIiwKICAgIH07CiAgICBjb25zdCBvcmRlckZpZWxkID0gc29ydGFibGVGaWVsZHNbb3JkZXJDb2xdID8/ICJwcmljZSI7CiAgICBjb25zdCBzYWZlRGlyID0gb3JkZXJEaXIgPT09ICJkZXNjIiA/ICJERVNDIiA6ICJBU0MiOwoKICAgIC8vIEJhc2UgV0hFUkUKICAgIGNvbnN0IGRlbGV0ZWRDb25kaXRpb24gPSBkZWxldGVkID8gImRlbGV0ZWRfYXQgSVMgTk9UIE5VTEwiIDogImRlbGV0ZWRfYXQgSVMgTlVMTCI7CiAgICBsZXQgd2hlcmUgPSBgV0hFUkUgJHtkZWxldGVkQ29uZGl0aW9ufWA7CiAgICBjb25zdCBxdWVyeVBhcmFtczogYW55W10gPSBbXTsKCiAgICAvLyBGaWx0cm9zIHBlcnNvbmFsaXphZG9zCiAgICBpZiAobXVuaWNpcGFsaXR5KSB7IHdoZXJlICs9ICIgQU5EIG11bmljaXBhbGl0eSBMSUtFID8iOyBxdWVyeVBhcmFtcy5wdXNoKGAlJHttdW5pY2lwYWxpdHl9JWApOyB9CiAgICBpZiAocHJvcGVydHlfdHlwZSkgeyB3aGVyZSArPSAiIEFORCBwcm9wZXJ0eV90eXBlID0gPyI7IHF1ZXJ5UGFyYW1zLnB1c2gocHJvcGVydHlfdHlwZSk7IH0KICAgIGlmIChtaW5fcHJpY2UgIT0gbnVsbCAmJiBtaW5fcHJpY2UgPiAwKSB7IHdoZXJlICs9ICIgQU5EIHByaWNlID49ID8iOyBxdWVyeVBhcmFtcy5wdXNoKG1pbl9wcmljZSk7IH0KICAgIGlmIChtYXhfcHJpY2UgIT0gbnVsbCAmJiBtYXhfcHJpY2UgPiAwKSB7IHdoZXJlICs9ICIgQU5EIHByaWNlIDw9ID8iOyBxdWVyeVBhcmFtcy5wdXNoKG1heF9wcmljZSk7IH0KICAgIGlmIChtaW5fcm9vbXMgIT0gbnVsbCAmJiBtaW5fcm9vbXMgPiAwKSB7IHdoZXJlICs9ICIgQU5EIHJvb21zID49ID8iOyBxdWVyeVBhcmFtcy5wdXNoKG1pbl9yb29tcyk7IH0KICAgIGlmIChzb3VyY2UpIHsgd2hlcmUgKz0gIiBBTkQgc291cmNlIExJS0UgPyI7IHF1ZXJ5UGFyYW1zLnB1c2goYCUke3NvdXJjZX0lYCk7IH0KICAgIGlmIChvcGVyYXRpb25fdHlwZSkgeyB3aGVyZSArPSAiIEFORCBvcGVyYXRpb25fdHlwZSA9ID8iOyBxdWVyeVBhcmFtcy5wdXNoKG9wZXJhdGlvbl90eXBlKTsgfQogICAgaWYgKHZhbGVuY2lhX3pvbmUpIHsKICAgICAgd2hlcmUgKz0gIiBBTkQgbXVuaWNpcGFsaXR5IExJS0UgJyVWYWxlbmNpYSUnIEFORCAobG9jYXRpb24gTElLRSA/IE9SIHRpdGxlIExJS0UgPykiOwogICAgICBxdWVyeVBhcmFtcy5wdXNoKGAlJHt2YWxlbmNpYV96b25lfSVgLCBgJSR7dmFsZW5jaWFfem9uZX0lYCk7CiAgICB9CgogICAgLy8gVG90YWwgc2luIGZpbHRybyBkZSBiw7pzcXVlZGEgKHBhcmEgcmVjb3Jkc1RvdGFsKQogICAgY29uc3QgW1t7IHJlY29yZHNUb3RhbCB9XV0gPSAoYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICBgU0VMRUNUIENPVU5UKCopIEFTIHJlY29yZHNUb3RhbCBGUk9NIHByb3BlcnRpZXMgJHt3aGVyZX1gLCBxdWVyeVBhcmFtcwogICAgKSkgYXMgYW55OwoKICAgIC8vIELDunNxdWVkYSBnbG9iYWwKICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IFsuLi5xdWVyeVBhcmFtc107CiAgICBpZiAoc2VhcmNoKSB7CiAgICAgIHdoZXJlICs9ICIgQU5EICh0aXRsZSBMSUtFID8gT1IgbG9jYXRpb24gTElLRSA/IE9SIG11bmljaXBhbGl0eSBMSUtFID8gT1Igc291cmNlIExJS0UgPykiOwogICAgICBjb25zdCBzID0gYCUke3NlYXJjaH0lYDsKICAgICAgc2VhcmNoUGFyYW1zLnB1c2gocywgcywgcywgcyk7CiAgICB9CgogICAgLy8gVG90YWwgY29uIGZpbHRybyBkZSBiw7pzcXVlZGEgKHBhcmEgcmVjb3Jkc0ZpbHRlcmVkKQogICAgY29uc3QgW1t7IHJlY29yZHNGaWx0ZXJlZCB9XV0gPSAoYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KAogICAgICBgU0VMRUNUIENPVU5UKCopIEFTIHJlY29yZHNGaWx0ZXJlZCBGUk9NIHByb3BlcnRpZXMgJHt3aGVyZX1gLCBzZWFyY2hQYXJhbXMKICAgICkpIGFzIGFueTsKCiAgICAvLyBEYXRvcyBkZSBsYSBww6FnaW5hCiAgICBjb25zdCBbcm93c10gPSBhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oCiAgICAgIGBTRUxFQ1QgKiBGUk9NIHByb3BlcnRpZXMgJHt3aGVyZX0gT1JERVIgQlkgJHtvcmRlckZpZWxkfSAke3NhZmVEaXJ9IExJTUlUID8gT0ZGU0VUID9gLAogICAgICBbLi4uc2VhcmNoUGFyYW1zLCBsZW5ndGgsIHN0YXJ0XQogICAgKTsKCiAgICByZXR1cm4gewogICAgICBkcmF3LAogICAgICByZWNvcmRzVG90YWw6IE51bWJlcihyZWNvcmRzVG90YWwpLAogICAgICByZWNvcmRzRmlsdGVyZWQ6IE51bWJlcihyZWNvcmRzRmlsdGVyZWQpLAogICAgICBkYXRhOiByb3dzIGFzIFByb3BlcnR5W10sCiAgICB9OwogIH0sCn07Cg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\fotocasaPlaywrightScraper.ts","beforeExisted":true,"beforeHash":"ac29489c4c7d525eead84c5f0424222c9cc448cecd7c94262eabfa9024eb2627","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IGNocm9taXVtIH0gZnJvbSAicGxheXdyaWdodCI7DQppbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gIi4uL3R5cGVzL3Byb3BlcnR5IjsNCmltcG9ydCB7IFpvbmUgfSBmcm9tICIuLi9tb2RlbHMvem9uZU1vZGVsIjsNCmltcG9ydCB7IFBsYXl3cmlnaHRCYXNlU2NyYXBlciB9IGZyb20gIi4vcGxheXdyaWdodEJhc2VTY3JhcGVyIjsNCmltcG9ydCB7IFZBTEVOQ0lBX0RJU1RSSUNUUyB9IGZyb20gIi4uL2NvbmZpZy92YWxlbmNpYURpc3RyaWN0cyI7DQppbXBvcnQgeyBWYWxlbmNpYURpc3RyaWN0TW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvdmFsZW5jaWFEaXN0cmljdE1vZGVsIjsNCg0KLyoqDQogKiBTY3JhcGVyIHBhcmEgRm90b2Nhc2EgKFBsYXl3cmlnaHQgY29uIGVzcGVyYSBpbnRlbGlnZW50ZSkuDQogKg0KICogRm90b2Nhc2EgZXMgdW4gU1BBIFJlYWN0OiBlbCBTU1Igc29sbyByZW5kZXJpemEgMSB0YXJqZXRhLCBlbCByZXN0byBzZSBoaWRyYXRhDQogKiB2w61hIEFQSSBpbnRlcm5hIGN1YW5kbyBlbCBicm93c2VyIGVqZWN1dGEgSlMuIFVzYW1vcyBQbGF5d3JpZ2h0IGNvbiB3YWl0Rm9yRnVuY3Rpb24NCiAqIHF1ZSBlc3BlcmEgaGFzdGEgcXVlIGFsIG1lbm9zIDUgYXJ0w61jdWxvcyB0ZW5nYW4gbGlua3MgcmVhbGVzIChubyBlc3F1ZWxldG9zKS4NCiAqDQogKiBVUkwgdmVudGE6IC9lcy9jb21wcmFyL3ZpdmllbmRhcy97c2x1Z30vdG9kYXMtbGFzLXpvbmFzL2wNCiAqIFVSTCBhbHF1aWxlcjogL2VzL2FscXVpbGVyL3ZpdmllbmRhcy97c2x1Z30vdG9kYXMtbGFzLXpvbmFzL2wNCiAqIFBhZ2luYWNpw7NuOiBhcHBlbmQgL3B7bn0gYWwgZmluYWwNCiAqLw0KZXhwb3J0IGNsYXNzIEZvdG9jYXNhUGxheXdyaWdodFNjcmFwZXIgZXh0ZW5kcyBQbGF5d3JpZ2h0QmFzZVNjcmFwZXIgew0KICAgIHByaXZhdGUgYXN5bmMgZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKTogUHJvbWlzZTxBcnJheTx7IHNsdWc6IHN0cmluZzsgem9uZUxhYmVsOiBzdHJpbmcgfT4+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBWYWxlbmNpYURpc3RyaWN0TW9kZWwuZmluZEFjdGl2ZSgpOw0KICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJvd3MNCiAgICAgICAgICAgICAgICAuZmlsdGVyKHIgPT4gISFyLmZvdG9jYXNhX3NsdWcpDQogICAgICAgICAgICAgICAgLm1hcChyID0+ICh7IHNsdWc6IHIuZm90b2Nhc2Ffc2x1Zywgem9uZUxhYmVsOiBgJHtyLm5hbWV9LCBWYWxlbmNpYWAgfSkpOw0KICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgcmV0dXJuIGRhdGE7DQogICAgICAgIH0gY2F0Y2ggeyAvKiBmYWxsYmFjayAqLyB9DQogICAgICAgIHJldHVybiBWQUxFTkNJQV9ESVNUUklDVFMubWFwKGQgPT4gKHsgc2x1ZzogZC5mb3RvY2FzYSwgem9uZUxhYmVsOiBgJHtkLm5hbWV9LCBWYWxlbmNpYWAgfSkpOw0KICAgIH0NCg0KICAgIGNvbnN0cnVjdG9yKCkgew0KICAgICAgICBzdXBlcigiaHR0cHM6Ly93d3cuZm90b2Nhc2EuZXMiLCAiRm90b2Nhc2EiKTsNCiAgICAgICAgdGhpcy5wYWdlVGltZW91dE1zID0gNjAwMDA7DQogICAgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3QgdGFyZ2V0czogQXJyYXk8eyBzbHVnOiBzdHJpbmc7IHpvbmVMYWJlbD86IHN0cmluZyB9PiA9IFtdOw0KICAgICAgICBpZiAoem9uZXMubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgZm9yIChjb25zdCB6IG9mIHpvbmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKHouc2x1ZyA9PT0gInZhbGVuY2lhIikgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0cmljdHMgPSBhd2FpdCB0aGlzLmdldFZhbGVuY2lhRGlzdHJpY3RUYXJnZXRzKCk7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCguLi5kaXN0cmljdHMpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCh7IHNsdWc6IHouc2x1Zywgem9uZUxhYmVsOiB6Lm5hbWUgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHsgc2x1ZzogImxsaXJpYSIsIHpvbmVMYWJlbDogIkxsw61yaWEiIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU2x1ZyBtYXBwaW5nOiB6b25hIERCIOKGkiBzbHVnIEZvdG9jYXNhIChub21icmVzIHZhbGVuY2lhbm9zIG8gYWJyZXZpYWRvcykNCiAgICAgICAgY29uc3QgZm90b2Nhc2FTbHVnTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gew0KICAgICAgICAgICAgImVsaWFuYSI6ICJsLWVsaWFuYSIsDQogICAgICAgICAgICAicmliYS1yb2phIjogInJpYmEtcm9qYS1kZS10dXJpYSIsDQogICAgICAgICAgICAicG9ibGEtZGUtdmFsbGJvbmEiOiAibGEtcG9ibGEtZGUtdmFsbGJvbmEiLA0KICAgICAgICAgICAgInZpbGxhbWFyY2hhbnRlIjogInZpbGFtYXJ4YW50IiwNCiAgICAgICAgfTsNCg0KICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW107DQogICAgICAgIGNvbnN0IHNlZW5VcmxzID0gbmV3IFNldDxzdHJpbmc+KCk7DQoNCiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRhcmdldHMpIHsNCiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0LnNsdWc7DQogICAgICAgICAgICBjb25zdCBmb3RvY2FzYVNsdWcgPSBmb3RvY2FzYVNsdWdNYXBbc2x1Z10gPz8gc2x1ZzsNCiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvblBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiYWxxdWlsZXIiIDogImNvbXByYXIiOw0KICAgICAgICAgICAgY29uc3QgYmFzZVBhZ2VVcmwgPSBgJHt0aGlzLmJhc2VVcmx9L2VzLyR7b3BlcmF0aW9uUGF0aH0vdml2aWVuZGFzLyR7Zm90b2Nhc2FTbHVnfS90b2Rhcy1sYXMtem9uYXMvbGA7DQoNCiAgICAgICAgICAgIC8vIFBhZ2luYWNpw7NuOiBoYXN0YSAxMCBww6FnaW5hcyBwb3Igem9uYQ0KICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gMTA7IHBhZ2UrKykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VVcmwgPSBwYWdlID09PSAxID8gYmFzZVBhZ2VVcmwgOiBgJHtiYXNlUGFnZVVybH0vcCR7cGFnZX1gOw0KICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmZldGNoRm90b2Nhc2FQYWdlKHBhZ2VVcmwpOw0KICAgICAgICAgICAgICAgIGlmICghaHRtbCkgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBwYWdlUHJvcHMgPSB0aGlzLnBhcnNlSHRtbChodG1sLCBzbHVnLCB6b25lcywgc2VlblVybHMsIHQuem9uZUxhYmVsKTsNCiAgICAgICAgICAgICAgICBpZiAocGFnZVByb3BzLmxlbmd0aCA9PT0gMCkgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goLi4ucGFnZVByb3BzKTsNCg0KICAgICAgICAgICAgICAgIC8vIFNpIGhheSBtZW5vcyBkZSAyMCByZXN1bHRhZG9zLCBlcyBsYSDDumx0aW1hIHDDoWdpbmENCiAgICAgICAgICAgICAgICBpZiAocGFnZVByb3BzLmxlbmd0aCA8IDIwKSBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzdWx0cyhwcm9wZXJ0aWVzKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDYXJnYSBsYSBww6FnaW5hIGNvbiBQbGF5d3JpZ2h0IHkgZXNwZXJhIGEgcXVlIGVsIFNQQSBSZWFjdCBoYXlhIGhpZHJhdGFkbw0KICAgICAqIHN1ZmljaWVudGVzIGFydMOtY3Vsb3MgKD49IDUgY29uIGxpbmtzIHJlYWxlcywgbm8gZXNxdWVsZXRvcykuDQogICAgICovDQogICAgcHJpdmF0ZSBhc3luYyBmZXRjaEZvdG9jYXNhUGFnZSh1cmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7DQogICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBjaHJvbWl1bS5sYXVuY2goew0KICAgICAgICAgICAgaGVhZGxlc3M6IHRydWUsDQogICAgICAgICAgICBhcmdzOiBbDQogICAgICAgICAgICAgICAgIi0tZGlzYWJsZS1ibGluay1mZWF0dXJlcz1BdXRvbWF0aW9uQ29udHJvbGxlZCIsDQogICAgICAgICAgICAgICAgIi0tbm8tc2FuZGJveCIsDQogICAgICAgICAgICAgICAgIi0tZGlzYWJsZS1zZXR1aWQtc2FuZGJveCIsDQogICAgICAgICAgICBdLA0KICAgICAgICB9KTsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCBicm93c2VyLm5ld0NvbnRleHQoew0KICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7IHdpZHRoOiAxMjgwLCBoZWlnaHQ6IDgwMCB9LA0KICAgICAgICAgICAgICAgIGxvY2FsZTogImVzLUVTIiwNCiAgICAgICAgICAgICAgICB0aW1lem9uZUlkOiAiRXVyb3BlL01hZHJpZCIsDQogICAgICAgICAgICAgICAgdXNlckFnZW50OiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMC4wLjAuMCBTYWZhcmkvNTM3LjM2IiwNCiAgICAgICAgICAgICAgICBqYXZhU2NyaXB0RW5hYmxlZDogdHJ1ZSwNCiAgICAgICAgICAgICAgICBpZ25vcmVIVFRQU0Vycm9yczogdHJ1ZSwNCiAgICAgICAgICAgICAgICBleHRyYUhUVFBIZWFkZXJzOiB7DQogICAgICAgICAgICAgICAgICAgICJBY2NlcHQtTGFuZ3VhZ2UiOiAiZXMtRVMsZXM7cT0wLjkiLA0KICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCwqLyo7cT0wLjgiLA0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgYXdhaXQgY29udGV4dC5hZGRJbml0U2NyaXB0KCgpID0+IHsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmF2aWdhdG9yLCAid2ViZHJpdmVyIiwgeyBnZXQ6ICgpID0+IHVuZGVmaW5lZCB9KTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmF2aWdhdG9yLCAibGFuZ3VhZ2VzIiwgeyBnZXQ6ICgpID0+IFsiZXMtRVMiLCAiZXMiXSB9KTsNCiAgICAgICAgICAgICAgICAod2luZG93IGFzIGFueSkuY2hyb21lID0geyBydW50aW1lOiB7fSB9Ow0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBjb250ZXh0Lm5ld1BhZ2UoKTsNCg0KICAgICAgICAgICAgLy8gbmV0d29ya2lkbGUgZXNwZXJhIGEgcXVlIGxhIFNQQSBjb21wbGV0ZSB0b2RhcyBzdXMgcGV0aWNpb25lcw0KICAgICAgICAgICAgYXdhaXQgcGFnZS5nb3RvKHVybCwgeyB3YWl0VW50aWw6ICJuZXR3b3JraWRsZSIsIHRpbWVvdXQ6IHRoaXMucGFnZVRpbWVvdXRNcyB9KTsNCg0KICAgICAgICAgICAgLy8gRGlzbWlzcyBjb29raWUgYmFubmVyIHNpIGFwYXJlY2UNCiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzbWlzc0Nvb2tpZUJhbm5lcihwYWdlKTsNCg0KICAgICAgICAgICAgLy8gU2Nyb2xsIHBhcmEgYWN0aXZhciBsYXp5IGxvYWRpbmcgZGUgRm90b2Nhc2ENCiAgICAgICAgICAgIGF3YWl0IHBhZ2UuZXZhbHVhdGUoKCkgPT4gd2luZG93LnNjcm9sbEJ5KDAsIDYwMCkpOw0KICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDIwMDApKTsNCiAgICAgICAgICAgIGF3YWl0IHBhZ2UuZXZhbHVhdGUoKCkgPT4gd2luZG93LnNjcm9sbEJ5KDAsIDEyMDApKTsNCiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxNTAwKSk7DQoNCiAgICAgICAgICAgIC8vIENvbnRhciBhcnTDrWN1bG9zIHJlYWxlcyBwYXJhIGRpYWduw7NzdGljbw0KICAgICAgICAgICAgY29uc3QgYXJ0aWNsZUNvdW50ID0gYXdhaXQgcGFnZS5ldmFsdWF0ZSgNCiAgICAgICAgICAgICAgICAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhcnRpY2xlIGgzIGFbaHJlZl0nKS5sZW5ndGgNCiAgICAgICAgICAgICkuY2F0Y2goKCkgPT4gMCk7DQogICAgICAgICAgICBjb25zb2xlLmxvZyhgWyR7dGhpcy5zb3VyY2VOYW1lfV0gJHt1cmx9IOKGkiAke2FydGljbGVDb3VudH0gYXJ0w61jdWxvcyBjb24gbGluayByZWFsYCk7DQoNCiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCBwYWdlLmNvbnRlbnQoKTsNCiAgICAgICAgICAgIHJldHVybiBodG1sOw0KICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7DQogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbJHt0aGlzLnNvdXJjZU5hbWV9XSBFcnJvciBQbGF5d3JpZ2h0IGVuICR7dXJsfTogJHtlcnJvci5tZXNzYWdlfWApOw0KICAgICAgICAgICAgcmV0dXJuICIiOw0KICAgICAgICB9IGZpbmFsbHkgew0KICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBwYXJzZUh0bWwoDQogICAgICAgIGh0bWw6IHN0cmluZywNCiAgICAgICAgc2x1Zzogc3RyaW5nLA0KICAgICAgICB6b25lczogWm9uZVtdLA0KICAgICAgICBzZWVuVXJsczogU2V0PHN0cmluZz4sDQogICAgICAgIHpvbmVMYWJlbD86IHN0cmluZw0KICAgICk6IFByb3BlcnR5W10gew0KICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpOw0KICAgICAgICBjb25zdCByZXN1bHRzOiBQcm9wZXJ0eVtdID0gW107DQoNCiAgICAgICAgJCgnYXJ0aWNsZScpLmVhY2goKF9pLCBlbCkgPT4gew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAvLyBTb2xvIHRhcmpldGFzIGNvbiBsaW5rIHJlYWwgKG5vIGVzcXVlbGV0b3MpDQogICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9DQogICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoImgzIGFbaHJlZio9Jy9lcy9jb21wcmFyLyddLCBoMyBhW2hyZWYqPScvZXMvYWxxdWlsZXIvJ10iKS5maXJzdCgpLmF0dHIoImhyZWYiKSB8fA0KICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJhW2hyZWYqPScvZXMvY29tcHJhci8nXSwgYVtocmVmKj0nL2VzL2FscXVpbGVyLyddIikuZmlyc3QoKS5hdHRyKCJocmVmIikgfHwgIiI7DQogICAgICAgICAgICAgICAgaWYgKCFocmVmKSByZXR1cm47DQogICAgICAgICAgICAgICAgY29uc3QgYWJzVXJsID0gaHJlZi5zdGFydHNXaXRoKCJodHRwIikgPyBocmVmIDogYCR7dGhpcy5iYXNlVXJsfSR7aHJlZn1gOw0KICAgICAgICAgICAgICAgIGlmIChzZWVuVXJscy5oYXMoYWJzVXJsKSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgIHNlZW5VcmxzLmFkZChhYnNVcmwpOw0KDQogICAgICAgICAgICAgICAgLy8gVMOtdHVsbw0KICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5zYW5pdGl6ZVRleHQoDQogICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoImgzIikudGV4dCgpIHx8ICJQcm9waWVkYWQgZW4gTGxpcmlhIg0KICAgICAgICAgICAgICAgICk7DQoNCiAgICAgICAgICAgICAgICAvLyBQcmVjaW86IGJ1c2NhciBzcGFuL2RpdiBjb24gcGF0csOzbiAiMjQwLjAwMCDigqwiDQogICAgICAgICAgICAgICAgbGV0IHByaWNlUmF3ID0gIiI7DQogICAgICAgICAgICAgICAgJChlbCkuZmluZCgic3BhbiwgZGl2IikuZWFjaCgoX2osIGUpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9ICQoZSkudGV4dCgpLnRyaW0oKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmljZVJhdyAmJiAvXlxkW1xkLixcc10q4oKsLy50ZXN0KHQpKSBwcmljZVJhdyA9IHQ7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnBhcnNlUHJpY2UocHJpY2VSYXcpOw0KICAgICAgICAgICAgICAgIGlmIChwcmljZSA8PSAwKSByZXR1cm47DQoNCiAgICAgICAgICAgICAgICAvLyBMb2NhbGl6YWNpw7NuOiB1c2FyIGVsIG5vbWJyZSBkZSBsYSB6b25hIGRpcmVjdGFtZW50ZSBwYXJhIGV2aXRhciBjYXB0dXJhcg0KICAgICAgICAgICAgICAgIC8vIHRleHRvIGV4dHJhIGRlbCBhbHQgZGUgaW1hZ2VuIChwLmVqLiAiQ2FzYSBlbiB2ZW50YSBlbiBCZW5hZ3Vhc2lsIGNvbiBBaXJlIGFjb25kaWNpb25hZG8iKQ0KICAgICAgICAgICAgICAgIGNvbnN0IHpvbmVPYmogPSB6b25lcy5maW5kKHogPT4gei5zbHVnID09PSBzbHVnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHpvbmVPYmogPyB6b25lT2JqLm5hbWUgOiB0aGlzLnNhbml0aXplVGV4dChzbHVnKTsNCg0KICAgICAgICAgICAgICAgIC8vIEhhYml0YWNpb25lcyB5IHN1cGVyZmljaWUNCiAgICAgICAgICAgICAgICBsZXQgcm9vbXMgPSAwLCBzaXplX20yID0gMDsNCiAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJsaSIpLmVhY2goKF9qLCBsaSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0eHQgPSAkKGxpKS50ZXh0KCk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJtID0gdHh0Lm1hdGNoKC8oXGQrKVxzKmhhYnM/L2kpOw0KICAgICAgICAgICAgICAgICAgICBpZiAocm0pIHJvb21zID0gcGFyc2VJbnQocm1bMV0pOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzbSA9IHR4dC5tYXRjaCgvKFxkKylccyptwrIvaSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzbSkgc2l6ZV9tMiA9IHBhcnNlSW50KHNtWzFdKTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIC8vIEltYWdlbg0KICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlX3VybCA9DQogICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoInBpY3R1cmUgaW1nIikuZmlyc3QoKS5hdHRyKCJzcmMiKSB8fA0KICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJpbWciKS5maXJzdCgpLmF0dHIoInNyYyIpIHx8ICIiOw0KDQogICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUsIHByaWNlLCBsb2NhdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgbXVuaWNpcGFsaXR5OiB6b25lTGFiZWwgJiYgem9uZUxhYmVsLmluY2x1ZGVzKCJWYWxlbmNpYSIpID8gIlZhbGVuY2lhIiA6IHRoaXMuZGV0ZWN0TXVuaWNpcGFsaXR5KGxvY2F0aW9uICsgIiAiICsgc2x1Zywgem9uZXMpLA0KICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV90eXBlOiB0aGlzLm5vcm1hbGl6ZVR5cGUodGl0bGUpLA0KICAgICAgICAgICAgICAgICAgICByb29tcywgc2l6ZV9tMiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiBhYnNVcmwsDQogICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLA0KICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fdHlwZTogdGhpcy5fb3BlcmF0aW9uVHlwZSwNCiAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfQ0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gcmVzdWx0czsNCiAgICB9DQp9DQo=","afterExisted":true,"afterHash":"aeb965775ad33b7b0a2e813e207265dff62406d903ce8393b96bf8b60aee4a75","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IGNocm9taXVtIH0gZnJvbSAicGxheXdyaWdodCI7DQppbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gIi4uL3R5cGVzL3Byb3BlcnR5IjsNCmltcG9ydCB7IFpvbmUgfSBmcm9tICIuLi9tb2RlbHMvem9uZU1vZGVsIjsNCmltcG9ydCB7IFBsYXl3cmlnaHRCYXNlU2NyYXBlciB9IGZyb20gIi4vcGxheXdyaWdodEJhc2VTY3JhcGVyIjsNCmltcG9ydCB7IFZBTEVOQ0lBX0RJU1RSSUNUUyB9IGZyb20gIi4uL2NvbmZpZy92YWxlbmNpYURpc3RyaWN0cyI7DQppbXBvcnQgeyBWYWxlbmNpYURpc3RyaWN0TW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvdmFsZW5jaWFEaXN0cmljdE1vZGVsIjsNCg0KLyoqDQogKiBTY3JhcGVyIHBhcmEgRm90b2Nhc2EgKFBsYXl3cmlnaHQgY29uIGVzcGVyYSBpbnRlbGlnZW50ZSkuDQogKg0KICogRm90b2Nhc2EgZXMgdW4gU1BBIFJlYWN0OiBlbCBTU1Igc29sbyByZW5kZXJpemEgMSB0YXJqZXRhLCBlbCByZXN0byBzZSBoaWRyYXRhDQogKiB2w61hIEFQSSBpbnRlcm5hIGN1YW5kbyBlbCBicm93c2VyIGVqZWN1dGEgSlMuIFVzYW1vcyBQbGF5d3JpZ2h0IGNvbiB3YWl0Rm9yRnVuY3Rpb24NCiAqIHF1ZSBlc3BlcmEgaGFzdGEgcXVlIGFsIG1lbm9zIDUgYXJ0w61jdWxvcyB0ZW5nYW4gbGlua3MgcmVhbGVzIChubyBlc3F1ZWxldG9zKS4NCiAqDQogKiBVUkwgdmVudGE6IC9lcy9jb21wcmFyL3ZpdmllbmRhcy97c2x1Z30vdG9kYXMtbGFzLXpvbmFzL2wNCiAqIFVSTCBhbHF1aWxlcjogL2VzL2FscXVpbGVyL3ZpdmllbmRhcy97c2x1Z30vdG9kYXMtbGFzLXpvbmFzL2wNCiAqIFBhZ2luYWNpw7NuOiBhcHBlbmQgL3B7bn0gYWwgZmluYWwNCiAqLw0KZXhwb3J0IGNsYXNzIEZvdG9jYXNhUGxheXdyaWdodFNjcmFwZXIgZXh0ZW5kcyBQbGF5d3JpZ2h0QmFzZVNjcmFwZXIgew0KICAgIHByaXZhdGUgYXN5bmMgZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKTogUHJvbWlzZTxBcnJheTx7IHNsdWc6IHN0cmluZzsgem9uZUxhYmVsOiBzdHJpbmcgfT4+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBWYWxlbmNpYURpc3RyaWN0TW9kZWwuZmluZEFsbCgpOwogICAgICAgICAgICBpZiAocm93cy5sZW5ndGggPiAwKSByZXR1cm4gcm93cwogICAgICAgICAgICAgICAgLmZpbHRlcihyID0+IHIuYWN0aXZlICE9PSAwICYmICEhci5mb3RvY2FzYV9zbHVnKQogICAgICAgICAgICAgICAgLm1hcChyID0+ICh7IHNsdWc6IHIuZm90b2Nhc2Ffc2x1Zywgem9uZUxhYmVsOiBgJHtyLm5hbWV9LCBWYWxlbmNpYWAgfSkpOwogICAgICAgIH0gY2F0Y2ggeyAvKiBmYWxsYmFjayAqLyB9DQogICAgICAgIHJldHVybiBWQUxFTkNJQV9ESVNUUklDVFMubWFwKGQgPT4gKHsgc2x1ZzogZC5mb3RvY2FzYSwgem9uZUxhYmVsOiBgJHtkLm5hbWV9LCBWYWxlbmNpYWAgfSkpOw0KICAgIH0NCg0KICAgIGNvbnN0cnVjdG9yKCkgew0KICAgICAgICBzdXBlcigiaHR0cHM6Ly93d3cuZm90b2Nhc2EuZXMiLCAiRm90b2Nhc2EiKTsNCiAgICAgICAgdGhpcy5wYWdlVGltZW91dE1zID0gNjAwMDA7DQogICAgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3QgdGFyZ2V0czogQXJyYXk8eyBzbHVnOiBzdHJpbmc7IHpvbmVMYWJlbD86IHN0cmluZzsgaXNWYWxlbmNpYURpc3RyaWN0PzogYm9vbGVhbiB9PiA9IFtdOwogICAgICAgIGlmICh6b25lcy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBmb3IgKGNvbnN0IHogb2Ygem9uZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoei5zbHVnID09PSAidmFsZW5jaWEiKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RyaWN0cyA9IGF3YWl0IHRoaXMuZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKTsNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKC4uLmRpc3RyaWN0cy5tYXAoZCA9PiAoeyAuLi5kLCBpc1ZhbGVuY2lhRGlzdHJpY3Q6IHRydWUgfSkpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCh7IHNsdWc6IHouc2x1Zywgem9uZUxhYmVsOiB6Lm5hbWUgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHsgc2x1ZzogImxsaXJpYSIsIHpvbmVMYWJlbDogIkxsw61yaWEiIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU2x1ZyBtYXBwaW5nOiB6b25hIERCIOKGkiBzbHVnIEZvdG9jYXNhIChub21icmVzIHZhbGVuY2lhbm9zIG8gYWJyZXZpYWRvcykNCiAgICAgICAgY29uc3QgZm90b2Nhc2FTbHVnTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gew0KICAgICAgICAgICAgImVsaWFuYSI6ICJsLWVsaWFuYSIsDQogICAgICAgICAgICAicmliYS1yb2phIjogInJpYmEtcm9qYS1kZS10dXJpYSIsDQogICAgICAgICAgICAicG9ibGEtZGUtdmFsbGJvbmEiOiAibGEtcG9ibGEtZGUtdmFsbGJvbmEiLA0KICAgICAgICAgICAgInZpbGxhbWFyY2hhbnRlIjogInZpbGFtYXJ4YW50IiwNCiAgICAgICAgfTsNCg0KICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW107DQogICAgICAgIGNvbnN0IHNlZW5VcmxzID0gbmV3IFNldDxzdHJpbmc+KCk7DQoNCiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRhcmdldHMpIHsNCiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0LnNsdWc7DQogICAgICAgICAgICBjb25zdCBmb3RvY2FzYVNsdWcgPSBmb3RvY2FzYVNsdWdNYXBbc2x1Z10gPz8gc2x1ZzsNCiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvblBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiYWxxdWlsZXIiIDogImNvbXByYXIiOw0KICAgICAgICAgICAgY29uc3QgbG9jYXRpb25QYXRoID0gdC5pc1ZhbGVuY2lhRGlzdHJpY3QKICAgICAgICAgICAgICAgID8gYHZhbGVuY2lhLWNhcGl0YWwvJHtmb3RvY2FzYVNsdWd9YAogICAgICAgICAgICAgICAgOiBgJHtmb3RvY2FzYVNsdWd9L3RvZGFzLWxhcy16b25hc2A7CiAgICAgICAgICAgIGNvbnN0IGJhc2VQYWdlVXJsID0gYCR7dGhpcy5iYXNlVXJsfS9lcy8ke29wZXJhdGlvblBhdGh9L3ZpdmllbmRhcy8ke2xvY2F0aW9uUGF0aH0vbGA7Cg0KICAgICAgICAgICAgLy8gUGFnaW5hY2nDs246IGhhc3RhIDEwIHDDoWdpbmFzIHBvciB6b25hDQogICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSAxMDsgcGFnZSsrKSB7DQogICAgICAgICAgICAgICAgY29uc3QgcGFnZVVybCA9IHBhZ2UgPT09IDEgPyBiYXNlUGFnZVVybCA6IGAke2Jhc2VQYWdlVXJsfS9wJHtwYWdlfWA7DQogICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3RvY2FzYVBhZ2UocGFnZVVybCk7DQogICAgICAgICAgICAgICAgaWYgKCFodG1sKSBicmVhazsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VQcm9wcyA9IHRoaXMucGFyc2VIdG1sKGh0bWwsIHNsdWcsIHpvbmVzLCBzZWVuVXJscywgdC56b25lTGFiZWwpOw0KICAgICAgICAgICAgICAgIGlmIChwYWdlUHJvcHMubGVuZ3RoID09PSAwKSBicmVhazsNCg0KICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCguLi5wYWdlUHJvcHMpOw0KDQogICAgICAgICAgICAgICAgLy8gU2kgaGF5IG1lbm9zIGRlIDIwIHJlc3VsdGFkb3MsIGVzIGxhIMO6bHRpbWEgcMOhZ2luYQ0KICAgICAgICAgICAgICAgIGlmIChwYWdlUHJvcHMubGVuZ3RoIDwgMjApIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHRzKHByb3BlcnRpZXMpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENhcmdhIGxhIHDDoWdpbmEgY29uIFBsYXl3cmlnaHQgeSBlc3BlcmEgYSBxdWUgZWwgU1BBIFJlYWN0IGhheWEgaGlkcmF0YWRvDQogICAgICogc3VmaWNpZW50ZXMgYXJ0w61jdWxvcyAoPj0gNSBjb24gbGlua3MgcmVhbGVzLCBubyBlc3F1ZWxldG9zKS4NCiAgICAgKi8NCiAgICBwcml2YXRlIGFzeW5jIGZldGNoRm90b2Nhc2FQYWdlKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHsNCiAgICAgICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IGNocm9taXVtLmxhdW5jaCh7DQogICAgICAgICAgICBoZWFkbGVzczogdHJ1ZSwNCiAgICAgICAgICAgIGFyZ3M6IFsNCiAgICAgICAgICAgICAgICAiLS1kaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkIiwNCiAgICAgICAgICAgICAgICAiLS1uby1zYW5kYm94IiwNCiAgICAgICAgICAgICAgICAiLS1kaXNhYmxlLXNldHVpZC1zYW5kYm94IiwNCiAgICAgICAgICAgIF0sDQogICAgICAgIH0pOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IGJyb3dzZXIubmV3Q29udGV4dCh7DQogICAgICAgICAgICAgICAgdmlld3BvcnQ6IHsgd2lkdGg6IDEyODAsIGhlaWdodDogODAwIH0sDQogICAgICAgICAgICAgICAgbG9jYWxlOiAiZXMtRVMiLA0KICAgICAgICAgICAgICAgIHRpbWV6b25lSWQ6ICJFdXJvcGUvTWFkcmlkIiwNCiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTIwLjAuMC4wIFNhZmFyaS81MzcuMzYiLA0KICAgICAgICAgICAgICAgIGphdmFTY3JpcHRFbmFibGVkOiB0cnVlLA0KICAgICAgICAgICAgICAgIGlnbm9yZUhUVFBTRXJyb3JzOiB0cnVlLA0KICAgICAgICAgICAgICAgIGV4dHJhSFRUUEhlYWRlcnM6IHsNCiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJlcy1FUyxlcztxPTAuOSIsDQogICAgICAgICAgICAgICAgICAgICJBY2NlcHQiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLCovKjtxPTAuOCIsDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBhd2FpdCBjb250ZXh0LmFkZEluaXRTY3JpcHQoKCkgPT4gew0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICJ3ZWJkcml2ZXIiLCB7IGdldDogKCkgPT4gdW5kZWZpbmVkIH0pOw0KICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICJsYW5ndWFnZXMiLCB7IGdldDogKCkgPT4gWyJlcy1FUyIsICJlcyJdIH0pOw0KICAgICAgICAgICAgICAgICh3aW5kb3cgYXMgYW55KS5jaHJvbWUgPSB7IHJ1bnRpbWU6IHt9IH07DQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGNvbnRleHQubmV3UGFnZSgpOw0KDQogICAgICAgICAgICAvLyBuZXR3b3JraWRsZSBlc3BlcmEgYSBxdWUgbGEgU1BBIGNvbXBsZXRlIHRvZGFzIHN1cyBwZXRpY2lvbmVzDQogICAgICAgICAgICBhd2FpdCBwYWdlLmdvdG8odXJsLCB7IHdhaXRVbnRpbDogIm5ldHdvcmtpZGxlIiwgdGltZW91dDogdGhpcy5wYWdlVGltZW91dE1zIH0pOw0KDQogICAgICAgICAgICAvLyBEaXNtaXNzIGNvb2tpZSBiYW5uZXIgc2kgYXBhcmVjZQ0KICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNtaXNzQ29va2llQmFubmVyKHBhZ2UpOw0KDQogICAgICAgICAgICAvLyBTY3JvbGwgcGFyYSBhY3RpdmFyIGxhenkgbG9hZGluZyBkZSBGb3RvY2FzYQ0KICAgICAgICAgICAgYXdhaXQgcGFnZS5ldmFsdWF0ZSgoKSA9PiB3aW5kb3cuc2Nyb2xsQnkoMCwgNjAwKSk7DQogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMjAwMCkpOw0KICAgICAgICAgICAgYXdhaXQgcGFnZS5ldmFsdWF0ZSgoKSA9PiB3aW5kb3cuc2Nyb2xsQnkoMCwgMTIwMCkpOw0KICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDE1MDApKTsNCg0KICAgICAgICAgICAgLy8gQ29udGFyIGFydMOtY3Vsb3MgcmVhbGVzIHBhcmEgZGlhZ27Ds3N0aWNvDQogICAgICAgICAgICBjb25zdCBhcnRpY2xlQ291bnQgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKA0KICAgICAgICAgICAgICAgICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FydGljbGUgaDMgYVtocmVmXScpLmxlbmd0aA0KICAgICAgICAgICAgKS5jYXRjaCgoKSA9PiAwKTsNCiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbJHt0aGlzLnNvdXJjZU5hbWV9XSAke3VybH0g4oaSICR7YXJ0aWNsZUNvdW50fSBhcnTDrWN1bG9zIGNvbiBsaW5rIHJlYWxgKTsNCg0KICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHBhZ2UuY29udGVudCgpOw0KICAgICAgICAgICAgcmV0dXJuIGh0bWw7DQogICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske3RoaXMuc291cmNlTmFtZX1dIEVycm9yIFBsYXl3cmlnaHQgZW4gJHt1cmx9OiAke2Vycm9yLm1lc3NhZ2V9YCk7DQogICAgICAgICAgICByZXR1cm4gIiI7DQogICAgICAgIH0gZmluYWxseSB7DQogICAgICAgICAgICBhd2FpdCBicm93c2VyLmNsb3NlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwcml2YXRlIHBhcnNlSHRtbCgNCiAgICAgICAgaHRtbDogc3RyaW5nLA0KICAgICAgICBzbHVnOiBzdHJpbmcsDQogICAgICAgIHpvbmVzOiBab25lW10sDQogICAgICAgIHNlZW5VcmxzOiBTZXQ8c3RyaW5nPiwNCiAgICAgICAgem9uZUxhYmVsPzogc3RyaW5nDQogICAgKTogUHJvcGVydHlbXSB7DQogICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7DQogICAgICAgIGNvbnN0IHJlc3VsdHM6IFByb3BlcnR5W10gPSBbXTsNCg0KICAgICAgICAkKCdhcnRpY2xlJykuZWFjaCgoX2ksIGVsKSA9PiB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIC8vIFNvbG8gdGFyamV0YXMgY29uIGxpbmsgcmVhbCAobm8gZXNxdWVsZXRvcykNCiAgICAgICAgICAgICAgICBjb25zdCBocmVmID0NCiAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgiaDMgYVtocmVmKj0nL2VzL2NvbXByYXIvJ10sIGgzIGFbaHJlZio9Jy9lcy9hbHF1aWxlci8nXSIpLmZpcnN0KCkuYXR0cigiaHJlZiIpIHx8DQogICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoImFbaHJlZio9Jy9lcy9jb21wcmFyLyddLCBhW2hyZWYqPScvZXMvYWxxdWlsZXIvJ10iKS5maXJzdCgpLmF0dHIoImhyZWYiKSB8fCAiIjsNCiAgICAgICAgICAgICAgICBpZiAoIWhyZWYpIHJldHVybjsNCiAgICAgICAgICAgICAgICBjb25zdCBhYnNVcmwgPSBocmVmLnN0YXJ0c1dpdGgoImh0dHAiKSA/IGhyZWYgOiBgJHt0aGlzLmJhc2VVcmx9JHtocmVmfWA7DQogICAgICAgICAgICAgICAgaWYgKHNlZW5VcmxzLmhhcyhhYnNVcmwpKSByZXR1cm47DQogICAgICAgICAgICAgICAgc2VlblVybHMuYWRkKGFic1VybCk7DQoNCiAgICAgICAgICAgICAgICAvLyBUw610dWxvDQogICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnNhbml0aXplVGV4dCgNCiAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgiaDMiKS50ZXh0KCkgfHwgIlByb3BpZWRhZCBlbiBMbGlyaWEiDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgIC8vIFByZWNpbzogYnVzY2FyIHNwYW4vZGl2IGNvbiBwYXRyw7NuICIyNDAuMDAwIOKCrCINCiAgICAgICAgICAgICAgICBsZXQgcHJpY2VSYXcgPSAiIjsNCiAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJzcGFuLCBkaXYiKS5lYWNoKChfaiwgZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gJChlKS50ZXh0KCkudHJpbSgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXByaWNlUmF3ICYmIC9eXGRbXGQuLFxzXSrigqwvLnRlc3QodCkpIHByaWNlUmF3ID0gdDsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBjb25zdCBwcmljZSA9IHRoaXMucGFyc2VQcmljZShwcmljZVJhdyk7DQogICAgICAgICAgICAgICAgaWYgKHByaWNlIDw9IDApIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIC8vIExvY2FsaXphY2nDs246IHVzYXIgZWwgbm9tYnJlIGRlIGxhIHpvbmEgZGlyZWN0YW1lbnRlIHBhcmEgZXZpdGFyIGNhcHR1cmFyDQogICAgICAgICAgICAgICAgLy8gdGV4dG8gZXh0cmEgZGVsIGFsdCBkZSBpbWFnZW4gKHAuZWouICJDYXNhIGVuIHZlbnRhIGVuIEJlbmFndWFzaWwgY29uIEFpcmUgYWNvbmRpY2lvbmFkbyIpDQogICAgICAgICAgICAgICAgY29uc3Qgem9uZU9iaiA9IHpvbmVzLmZpbmQoeiA9PiB6LnNsdWcgPT09IHNsdWcpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gem9uZU9iaj8ubmFtZSB8fCB6b25lTGFiZWwgfHwgdGhpcy5zYW5pdGl6ZVRleHQoc2x1Zyk7Cg0KICAgICAgICAgICAgICAgIC8vIEhhYml0YWNpb25lcyB5IHN1cGVyZmljaWUNCiAgICAgICAgICAgICAgICBsZXQgcm9vbXMgPSAwLCBzaXplX20yID0gMDsNCiAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJsaSIpLmVhY2goKF9qLCBsaSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0eHQgPSAkKGxpKS50ZXh0KCk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJtID0gdHh0Lm1hdGNoKC8oXGQrKVxzKmhhYnM/L2kpOw0KICAgICAgICAgICAgICAgICAgICBpZiAocm0pIHJvb21zID0gcGFyc2VJbnQocm1bMV0pOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzbSA9IHR4dC5tYXRjaCgvKFxkKylccyptwrIvaSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzbSkgc2l6ZV9tMiA9IHBhcnNlSW50KHNtWzFdKTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIC8vIEltYWdlbg0KICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlX3VybCA9DQogICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoInBpY3R1cmUgaW1nIikuZmlyc3QoKS5hdHRyKCJzcmMiKSB8fA0KICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJpbWciKS5maXJzdCgpLmF0dHIoInNyYyIpIHx8ICIiOw0KDQogICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUsIHByaWNlLCBsb2NhdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgbXVuaWNpcGFsaXR5OiB6b25lTGFiZWwgJiYgem9uZUxhYmVsLmluY2x1ZGVzKCJWYWxlbmNpYSIpID8gIlZhbGVuY2lhIiA6IHRoaXMuZGV0ZWN0TXVuaWNpcGFsaXR5KGxvY2F0aW9uICsgIiAiICsgc2x1Zywgem9uZXMpLA0KICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV90eXBlOiB0aGlzLm5vcm1hbGl6ZVR5cGUodGl0bGUpLA0KICAgICAgICAgICAgICAgICAgICByb29tcywgc2l6ZV9tMiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiBhYnNVcmwsDQogICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLA0KICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fdHlwZTogdGhpcy5fb3BlcmF0aW9uVHlwZSwNCiAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfQ0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gcmVzdWx0czsNCiAgICB9DQp9DQo=","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\globalizaScraper.ts","beforeExisted":true,"beforeHash":"413adc4ed70b0bce35f45dd83380c1a7b85c22186377ef592d7e66fa9922f23b","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCg0KLyoqDQogKiBTY3JhcGVyIHBhcmEgR2xvYmFsaXphIChwb3J0YWwgaW5tb2JpbGlhcmlvIGNvbiBmdWVydGUgcHJlc2VuY2lhIGVuIENvbXVuaWRhZCBWYWxlbmNpYW5hKQ0KICogVVJMOiBodHRwczovL3d3dy5nbG9iYWxpemEuY29tL3ZlbnRhL3ZpdmllbmRhcy97c2x1Z30NCiAqIFBhZ2luYWNpw7NuOiA/cGFnaW5hQW51bmNpb3M9Mg0KICovDQpleHBvcnQgY2xhc3MgR2xvYmFsaXphU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyIHsNCiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQUdFUyA9IDQ7DQogICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCJodHRwczovL3d3dy5nbG9iYWxpemEuY29tIiwgIkdsb2JhbGl6YSIpOyB9DQoNCiAgICBhc3luYyBzY3JhcGUoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7DQogICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVab25lcygpOw0KICAgICAgICBjb25zdCBvcGVyYXRpb25QYXRoID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gImFscXVpbGVyIiA6ICJ2ZW50YSI7DQogICAgICAgIGNvbnN0IHRhcmdldHMgPSB6b25lcy5sZW5ndGggPiAwDQogICAgICAgICAgICA/IHpvbmVzDQogICAgICAgICAgICAgICAgLmZpbHRlcih6ID0+ICh6IGFzIGFueSkuZ2xvYmFsaXphX3NsdWcgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICAubWFwKHogPT4gKHsgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wZXJhdGlvblBhdGh9L3ZpdmllbmRhcy8keyh6IGFzIGFueSkuZ2xvYmFsaXphX3NsdWd9YCwgem9uZTogeiB9KSkNCiAgICAgICAgICAgIDogW3sgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wZXJhdGlvblBhdGh9L3ZpdmllbmRhcy9sbGlyaWFgLCB6b25lOiB7IG5hbWU6ICJMbMOtcmlhIiwgc2x1ZzogImxsaXJpYSIgfSBhcyBhbnkgfV07DQoNCiAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOw0KDQogICAgICAgIGZvciAoY29uc3QgeyBiYXNlVXJsLCB6b25lIH0gb2YgdGFyZ2V0cykgew0KICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdGhpcy5NQVhfUEFHRVM7IHBhZ2UrKykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHBhZ2UgPT09IDEgPyBiYXNlVXJsIDogYCR7YmFzZVVybH0/cGFnaW5hQW51bmNpb3M9JHtwYWdlfWA7DQogICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZmV0Y2hIdG1sKHVybCk7DQogICAgICAgICAgICAgICAgaWYgKCFodG1sIHx8IGh0bWwubGVuZ3RoIDwgMzAwMCkgYnJlYWs7DQogICAgICAgICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTsNCg0KICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IDA7DQogICAgICAgICAgICAgICAgJCgiaDIgYVtocmVmKj0nL2lubXVlYmxlLyddLCBoMiBhW2hyZWYqPScvZ2xvYmFsaXphLmNvbS9pbm11ZWJsZS8nXSIpLmVhY2goKF9pLCBlbCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gJChlbCkuYXR0cigiaHJlZiIpIHx8ICIiOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwyID0gaHJlZi5zdGFydHNXaXRoKCJodHRwIikgPyBocmVmIDogYCR7dGhpcy5iYXNlVXJsfSR7aHJlZn1gOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXVybDIgfHwgIXVybDIuaW5jbHVkZXMoIi9pbm11ZWJsZS8iKSB8fCBzZWVuVXJscy5oYXModXJsMikpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuc2FuaXRpemVUZXh0KCQoZWwpLnRleHQoKSk7DQogICAgICAgICAgICAgICAgICAgIGlmICghdGl0bGUgfHwgdGl0bGUubGVuZ3RoIDwgMykgcmV0dXJuOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmQgPSAkKGVsKS5jbG9zZXN0KCJhcnRpY2xlLCBsaSwgLnNyLWl0ZW0sIC5wcm9wZXJ0eS1pdGVtLCAubGlzdGluZy1pdGVtLCBbY2xhc3MqPSdpbm11ZWJsZSddIik7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd0Jsb2NrID0gY2FyZC5sZW5ndGggPyBjYXJkLnRleHQoKSA6ICQoZWwpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLnRleHQoKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2VNYXRjaCA9IHJhd0Jsb2NrLm1hdGNoKC8oW1xkXXsyLDN9Wy4sXHNdW1xkXXszfSg/OlsuLFxzXVtcZF17M30pPylccyrigqwvKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSBwcmljZU1hdGNoID8gdGhpcy5wYXJzZVByaWNlKHByaWNlTWF0Y2hbMF0pIDogMDsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VfdXJsID0gY2FyZC5maW5kKCJpbWciKS5hdHRyKCJzcmMiKSB8fCBjYXJkLmZpbmQoImltZyIpLmF0dHIoImRhdGEtc3JjIikgfHwgIiI7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHByaWNlID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZW50YXIgZGV0ZWN0YXIgZWwgbXVuaWNpcGlvIHJlYWwgZGVzZGUgZWwgdMOtdHVsby4NCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIGEgem9uZS5uYW1lIGN1YW5kbyBlbCB0w610dWxvIG5vIG1lbmNpb25hIGNpdWRhZDoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzw60gbnVuY2Egc2UgZGVzY2FydGEgdW4gYW51bmNpbyBhY3Rpdm8gcG9yIGZhbHRhIGRlIGNvaW5jaWRlbmNpYS4NCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGVjdGVkTXVuaSA9IHRoaXMuZGV0ZWN0TXVuaWNpcGFsaXR5KHRpdGxlLCB6b25lcywgem9uZS5uYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5VcmxzLmFkZCh1cmwyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kKys7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBwcmljZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZGV0ZWN0ZWRNdW5pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bmljaXBhbGl0eTogZGV0ZWN0ZWRNdW5pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X3R5cGU6IHRoaXMubm9ybWFsaXplVHlwZSh0aXRsZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uX3R5cGU6IHRoaXMuX29wZXJhdGlvblR5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwyLCBzb3VyY2U6IHRoaXMuc291cmNlTmFtZSwgaW1hZ2VfdXJsLA0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGlmIChmb3VuZCA8IDIpIGJyZWFrOyAvLyBTaW4gbcOhcyByZXN1bHRhZG9zIGVuIGVzdGEgcMOhZ2luYQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzdWx0cyhwcm9wZXJ0aWVzKTsNCiAgICB9DQp9DQoNCg==","afterExisted":true,"afterHash":"17014fe5f7f1a2e5a1adce9867dd3429eca470697a0a500dc99fb36d9c7fbe4b","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCg0KLyoqDQogKiBTY3JhcGVyIHBhcmEgR2xvYmFsaXphIChwb3J0YWwgaW5tb2JpbGlhcmlvIGNvbiBmdWVydGUgcHJlc2VuY2lhIGVuIENvbXVuaWRhZCBWYWxlbmNpYW5hKQ0KICogVVJMOiBodHRwczovL3d3dy5nbG9iYWxpemEuY29tL3ZlbnRhL3ZpdmllbmRhcy97c2x1Z30NCiAqIFBhZ2luYWNpw7NuOiA/cGFnaW5hQW51bmNpb3M9Mg0KICovDQpleHBvcnQgY2xhc3MgR2xvYmFsaXphU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyIHsNCiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQUdFUyA9IDQ7DQogICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCJodHRwczovL3d3dy5nbG9iYWxpemEuY29tIiwgIkdsb2JhbGl6YSIpOyB9DQoNCiAgICBhc3luYyBzY3JhcGUoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7DQogICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVab25lcygpOw0KICAgICAgICBjb25zdCBvcGVyYXRpb25QYXRoID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gImFscXVpbGVyIiA6ICJ2ZW50YSI7DQogICAgICAgIGNvbnN0IHRhcmdldHMgPSB6b25lcy5sZW5ndGggPiAwDQogICAgICAgICAgICA/IHpvbmVzDQogICAgICAgICAgICAgICAgLmZpbHRlcih6ID0+ICh6IGFzIGFueSkuZ2xvYmFsaXphX3NsdWcgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICAubWFwKHogPT4gKHsgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wZXJhdGlvblBhdGh9L3ZpdmllbmRhcy8keyh6IGFzIGFueSkuZ2xvYmFsaXphX3NsdWd9YCwgem9uZTogeiB9KSkNCiAgICAgICAgICAgIDogW3sgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wZXJhdGlvblBhdGh9L3ZpdmllbmRhcy9sbGlyaWFgLCB6b25lOiB7IG5hbWU6ICJMbMOtcmlhIiwgc2x1ZzogImxsaXJpYSIgfSBhcyBhbnkgfV07DQoNCiAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOw0KDQogICAgICAgIGZvciAoY29uc3QgeyBiYXNlVXJsLCB6b25lIH0gb2YgdGFyZ2V0cykgew0KICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdGhpcy5NQVhfUEFHRVM7IHBhZ2UrKykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHBhZ2UgPT09IDEgPyBiYXNlVXJsIDogYCR7YmFzZVVybH0/cGFnaW5hQW51bmNpb3M9JHtwYWdlfWA7DQogICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZmV0Y2hIdG1sKHVybCk7DQogICAgICAgICAgICAgICAgaWYgKCFodG1sIHx8IGh0bWwubGVuZ3RoIDwgMzAwMCkgYnJlYWs7DQogICAgICAgICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTsNCg0KICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IDA7DQogICAgICAgICAgICAgICAgJCgiaDIgYVtocmVmKj0nL2lubXVlYmxlLyddLCBoMiBhW2hyZWYqPScvZ2xvYmFsaXphLmNvbS9pbm11ZWJsZS8nXSIpLmVhY2goKF9pLCBlbCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gJChlbCkuYXR0cigiaHJlZiIpIHx8ICIiOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwyID0gaHJlZi5zdGFydHNXaXRoKCJodHRwIikgPyBocmVmIDogYCR7dGhpcy5iYXNlVXJsfSR7aHJlZn1gOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXVybDIgfHwgIXVybDIuaW5jbHVkZXMoIi9pbm11ZWJsZS8iKSB8fCBzZWVuVXJscy5oYXModXJsMikpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuc2FuaXRpemVUZXh0KCQoZWwpLnRleHQoKSk7DQogICAgICAgICAgICAgICAgICAgIGlmICghdGl0bGUgfHwgdGl0bGUubGVuZ3RoIDwgMykgcmV0dXJuOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmQgPSAkKGVsKS5jbG9zZXN0KCJhcnRpY2xlLCBsaSwgLnNyLWl0ZW0sIC5wcm9wZXJ0eS1pdGVtLCAubGlzdGluZy1pdGVtLCBbY2xhc3MqPSdpbm11ZWJsZSddIik7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd0Jsb2NrID0gY2FyZC5sZW5ndGggPyBjYXJkLnRleHQoKSA6ICQoZWwpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLnRleHQoKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gVmVudGEgc3VlbGUgdXNhciAiMTUwLjAwMCDigqwiLCBwZXJvIGFscXVpbGVyIHVzYSB0YW1iacOpbgogICAgICAgICAgICAgICAgICAgIC8vICI5ODAg4oKsIiBvICIxLjIwMCDigqwiLiBMYSByZWdleCBhbnRlcmlvciBleGlnw61hIDItMwogICAgICAgICAgICAgICAgICAgIC8vIGTDrWdpdG9zIGFudGVzIGRlbCBzZXBhcmFkb3IgeSBkZXNjYXJ0YWJhIHRvZG9zIGVzb3MgY2Fzb3MuCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2VNYXRjaCA9IHJhd0Jsb2NrLm1hdGNoKAogICAgICAgICAgICAgICAgICAgICAgICAvKD86XGR7MSwzfSg/OlsuLFxzXVxkezN9KSt8XGR7Miw4fSkoPzosXGR7Mn0pP1xzKuKCrC91CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZSA9IHByaWNlTWF0Y2ggPyB0aGlzLnBhcnNlUHJpY2UocHJpY2VNYXRjaFswXSkgOiAwOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZV91cmwgPSBjYXJkLmZpbmQoImltZyIpLmF0dHIoInNyYyIpIHx8IGNhcmQuZmluZCgiaW1nIikuYXR0cigiZGF0YS1zcmMiKSB8fCAiIjsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAocHJpY2UgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlbnRhciBkZXRlY3RhciBlbCBtdW5pY2lwaW8gcmVhbCBkZXNkZSBlbCB0w610dWxvLg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgYSB6b25lLm5hbWUgY3VhbmRvIGVsIHTDrXR1bG8gbm8gbWVuY2lvbmEgY2l1ZGFkOg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXPDrSBudW5jYSBzZSBkZXNjYXJ0YSB1biBhbnVuY2lvIGFjdGl2byBwb3IgZmFsdGEgZGUgY29pbmNpZGVuY2lhLg0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWRNdW5pID0gdGhpcy5kZXRlY3RNdW5pY2lwYWxpdHkodGl0bGUsIHpvbmVzLCB6b25lLm5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2VlblVybHMuYWRkKHVybDIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsIHByaWNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBkZXRlY3RlZE11bmksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVuaWNpcGFsaXR5OiBkZXRlY3RlZE11bmksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKHRpdGxlKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fdHlwZTogdGhpcy5fb3BlcmF0aW9uVHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybDIsIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLCBpbWFnZV91cmwsDQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgaWYgKGZvdW5kIDwgMikgYnJlYWs7IC8vIFNpbiBtw6FzIHJlc3VsdGFkb3MgZW4gZXN0YSBww6FnaW5hDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHRzKHByb3BlcnRpZXMpOw0KICAgIH0NCn0NCg0K","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\idealistaPlaywrightScraper.ts","beforeExisted":true,"beforeHash":"26cc94eef28090d6f3b693533d290a36c9256f741fc9ef282af69daae1b49119","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IGNocm9taXVtLCBCcm93c2VyQ29udGV4dCwgQnJvd3NlciB9IGZyb20gInBsYXl3cmlnaHQiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgVkFMRU5DSUFfRElTVFJJQ1RTIH0gZnJvbSAiLi4vY29uZmlnL3ZhbGVuY2lhRGlzdHJpY3RzIjsNCmltcG9ydCB7IFZhbGVuY2lhRGlzdHJpY3RNb2RlbCB9IGZyb20gIi4uL21vZGVscy92YWxlbmNpYURpc3RyaWN0TW9kZWwiOw0KDQovLyBTY3JpcHQgZGUgc3RlYWx0aCBwYXJhIGV2YWRpciBkZXRlY2Npw7NuIGRlIGJvdCAoY29tcGF0aWJsZSBjb24gSWRlYWxpc3RhL0RhdGFEb21lKQ0KY29uc3QgU1RFQUxUSF9JTklUX1NDUklQVCA9IGANCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICd3ZWJkcml2ZXInLCB7IGdldDogKCkgPT4gdW5kZWZpbmVkIH0pOw0Kd2luZG93LmNocm9tZSA9IHsNCiAgICBhcHA6IHsgaXNJbnN0YWxsZWQ6IGZhbHNlIH0sDQogICAgY3NpOiBmdW5jdGlvbigpIHt9LA0KICAgIGxvYWRUaW1lczogZnVuY3Rpb24oKSB7IHJldHVybiB7fTsgfSwNCiAgICBydW50aW1lOiB7fQ0KfTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICdsYW5ndWFnZXMnLCB7IGdldDogKCkgPT4gWydlcy1FUycsICdlcycsICdlbi1VUycsICdlbiddIH0pOw0KT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvciwgJ2hhcmR3YXJlQ29uY3VycmVuY3knLCB7IGdldDogKCkgPT4gOCB9KTsNCmlmICh0eXBlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0ICE9PSAndW5kZWZpbmVkJykgew0KICAgIGNvbnN0IGdldFBhcmFtZXRlciA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyOw0KICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24ocCkgew0KICAgICAgICBpZiAocCA9PT0gMzc0NDUpIHJldHVybiAnSW50ZWwgSW5jLic7DQogICAgICAgIGlmIChwID09PSAzNzQ0NikgcmV0dXJuICdJbnRlbChSKSBVSEQgR3JhcGhpY3MgNjIwJzsNCiAgICAgICAgcmV0dXJuIGdldFBhcmFtZXRlci5jYWxsKHRoaXMsIHApOw0KICAgIH07DQp9DQppZiAobmF2aWdhdG9yLnBlcm1pc3Npb25zICYmIG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSkgew0KICAgIGNvbnN0IG9yaWdRdWVyeSA9IG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeS5iaW5kKG5hdmlnYXRvci5wZXJtaXNzaW9ucyk7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvci5wZXJtaXNzaW9ucywgJ3F1ZXJ5Jywgew0KICAgICAgICB2YWx1ZTogKHApID0+IHAubmFtZSA9PT0gJ25vdGlmaWNhdGlvbnMnDQogICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZSh7IHN0YXRlOiBOb3RpZmljYXRpb24ucGVybWlzc2lvbiB9KQ0KICAgICAgICAgICAgOiBvcmlnUXVlcnkocCkNCiAgICB9KTsNCn0NCmA7DQoNCi8qKiBHZW5lcmEgZWwgdmFsb3IgZGVsIGNvb2tpZSBkaWRvbWlfdG9rZW4gY29uIGxhIGZlY2hhIGFjdHVhbCAqLw0KZnVuY3Rpb24gbWFrZURpZG9taVRva2VuKCk6IHN0cmluZyB7DQogICAgY29uc3Qgbm93SXNvID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGR7M31aJC8sICIuMDAwWiIpOw0KICAgIGNvbnN0IHBheWxvYWQgPSB7DQogICAgICAgIHVzZXJJZDogIjZmZWM1M2RkLWExOTctNmIyYi1iNDdiLWM4Mzk1ZDc5OTkyNyIsDQogICAgICAgIGNyZWF0ZWQ6IG5vd0lzbywNCiAgICAgICAgdXBkYXRlZDogbm93SXNvLA0KICAgICAgICB2ZXJzaW9uOiAyLA0KICAgICAgICB2ZW5kb3JzOiB7IGVuYWJsZWQ6IFtdIGFzIHN0cmluZ1tdIH0sDQogICAgICAgIHB1cnBvc2VzOiB7IGVuYWJsZWQ6IFtdIGFzIHN0cmluZ1tdIH0sDQogICAgfTsNCiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpLnRvU3RyaW5nKCJiYXNlNjQiKTsNCn0NCg0KZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gew0KICAgIHJldHVybiBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTsNCn0NCg0KLy8gU2x1Z3MgZXNwZWNpYWxlczogem9uYS5zbHVnIOKGkiBzbHVnIGRlIElkZWFsaXN0YSAoc2luIHN1ZmlqbyBkZSBwcm92aW5jaWEpDQpjb25zdCBpZGVhbGlzdGFTbHVnTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gew0KICAgICJlbGlhbmEiOiAibC1lbGlhbmEiLA0KICAgICJyaWJhLXJvamEiOiAicmliYS1yb2phLWRlLXR1cmlhIiwNCiAgICAicG9ibGEtZGUtdmFsbGJvbmEiOiAibGEtcG9ibGEtZGUtdmFsbGJvbmEiLA0KICAgICJ2aWxsYW1hcmNoYW50ZSI6ICJ2aWxhbWFyeGFudCIsDQp9Ow0KDQovLyBTdWZpam8gZGUgcHJvdmluY2lhIHBvciB6b25hIChwb3IgZGVmZWN0bzogIi12YWxlbmNpYSIpDQpjb25zdCBpZGVhbGlzdGFQcm92aW5jZVN1ZmZpeDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsNCiAgICAibW9uY29mYSI6ICItY2FzdGVsbG9uIiwNCn07DQoNCi8vIFpvbmFzIHF1ZSBzZSBvbWl0ZW4gZW4gSWRlYWxpc3RhIChkZW1hc2lhZG8gZ2Vuw6lyaWNhcyBvIHNpbiBww6FnaW5hIHByb3BpYSkNCmNvbnN0IGlkZWFsaXN0YVNraXAgPSBuZXcgU2V0PHN0cmluZz4oWyJ2YWxlbmNpYSJdKTsNCg0KZXhwb3J0IGNsYXNzIElkZWFsaXN0YVBsYXl3cmlnaHRTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXIgew0KICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVRpbWVvdXRNcyA9IDQ1MDAwOw0KICAgIHByaXZhdGUgYXN5bmMgZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKTogUHJvbWlzZTxBcnJheTx7IHNsdWc6IHN0cmluZzsgem9uZUxhYmVsOiBzdHJpbmcgfT4+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBWYWxlbmNpYURpc3RyaWN0TW9kZWwuZmluZEFjdGl2ZSgpOw0KICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJvd3MNCiAgICAgICAgICAgICAgICAuZmlsdGVyKHIgPT4gISFyLmlkZWFsaXN0YV9zbHVnKQ0KICAgICAgICAgICAgICAgIC5tYXAociA9PiAoeyBzbHVnOiByLmlkZWFsaXN0YV9zbHVnLCB6b25lTGFiZWw6IGAke3IubmFtZX0sIFZhbGVuY2lhYCB9KSk7DQogICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSByZXR1cm4gZGF0YTsNCiAgICAgICAgfSBjYXRjaCB7IC8qIGZhbGxiYWNrIHRvIHN0YXRpYyAqLyB9DQogICAgICAgIHJldHVybiBWQUxFTkNJQV9ESVNUUklDVFMubWFwKGQgPT4gKHsgc2x1ZzogZC5pZGVhbGlzdGEsIHpvbmVMYWJlbDogYCR7ZC5uYW1lfSwgVmFsZW5jaWFgIH0pKTsNCiAgICB9DQoNCiAgICBjb25zdHJ1Y3RvcigpIHsNCiAgICAgICAgc3VwZXIoImh0dHBzOi8vd3d3LmlkZWFsaXN0YS5jb20iLCAiSWRlYWxpc3RhIik7DQogICAgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3QgdGFyZ2V0czogQXJyYXk8eyBzbHVnOiBzdHJpbmc7IHpvbmVMYWJlbD86IHN0cmluZyB9PiA9IFtdOw0KICAgICAgICBpZiAoem9uZXMubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgZm9yIChjb25zdCB6IG9mIHpvbmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKHouc2x1ZyA9PT0gInZhbGVuY2lhIikgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0cmljdHMgPSBhd2FpdCB0aGlzLmdldFZhbGVuY2lhRGlzdHJpY3RUYXJnZXRzKCk7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCguLi5kaXN0cmljdHMpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCh7IHNsdWc6IHouc2x1Zywgem9uZUxhYmVsOiB6Lm5hbWUgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHsgc2x1ZzogImxsaXJpYSIsIHpvbmVMYWJlbDogIkxsw61yaWEiIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOw0KDQogICAgICAgIGxldCBicm93c2VyOiBCcm93c2VyIHwgbnVsbCA9IG51bGw7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBicm93c2VyID0gYXdhaXQgY2hyb21pdW0ubGF1bmNoKHsNCiAgICAgICAgICAgICAgICBoZWFkbGVzczogdHJ1ZSwNCiAgICAgICAgICAgICAgICBhcmdzOiBbDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtYmxpbmstZmVhdHVyZXM9QXV0b21hdGlvbkNvbnRyb2xsZWQiLA0KICAgICAgICAgICAgICAgICAgICAiLS1uby1zYW5kYm94IiwNCiAgICAgICAgICAgICAgICAgICAgIi0tZGlzYWJsZS1zZXR1aWQtc2FuZGJveCIsDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtZGV2LXNobS11c2FnZSIsDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtZ3B1IiwNCiAgICAgICAgICAgICAgICAgICAgIi0tbGFuZz1lcy1FUyIsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGFyZ2V0cykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0LnNsdWc7DQogICAgICAgICAgICAgICAgaWYgKGlkZWFsaXN0YVNraXAuaGFzKHNsdWcpKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbSWRlYWxpc3RhXSBPbWl0aWVuZG8gJHtzbHVnfSAoem9uYSBtdXkgYW1wbGlhLCBzaW4gcMOhZ2luYSBlc3BlY8OtZmljYSlgKTsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnN0IGlkZWFsaXN0YVNsdWcgPSBpZGVhbGlzdGFTbHVnTWFwW3NsdWddID8/IHNsdWc7DQogICAgICAgICAgICAgICAgY29uc3QgcHJvdmluY2UgPSBpZGVhbGlzdGFQcm92aW5jZVN1ZmZpeFtzbHVnXSA/PyAiLXZhbGVuY2lhIjsNCiAgICAgICAgICAgICAgICBjb25zdCBvcFBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiYWxxdWlsZXItdml2aWVuZGFzIiA6ICJ2ZW50YS12aXZpZW5kYXMiOw0KICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0vJHtvcFBhdGh9LyR7aWRlYWxpc3RhU2x1Z30ke3Byb3ZpbmNlfS9gOw0KDQogICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBhd2FpdCB0aGlzLnNjcmFwZVpvbmUoYnJvd3NlciwgdXJsLCB6b25lcywgc2VlblVybHMsIHQuem9uZUxhYmVsKTsNCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goLi4ucHJvcHMpOw0KDQogICAgICAgICAgICAgICAgLy8gUGF1c2EgYWxlYXRvcmlhIGVudHJlIHpvbmFzIHBhcmEgZXZpdGFyIGRldGVjY2nDs24NCiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcCgyMDAwICsgTWF0aC5yYW5kb20oKSAqIDIwMDApOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkgew0KICAgICAgICAgICAgY29uc29sZS5lcnJvcihgW0lkZWFsaXN0YV0gRXJyb3IgZ2VuZXJhbDogJHtlcnIubWVzc2FnZX1gKTsNCiAgICAgICAgfSBmaW5hbGx5IHsNCiAgICAgICAgICAgIGlmIChicm93c2VyKSBhd2FpdCBicm93c2VyLmNsb3NlKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlc3VsdHMocHJvcGVydGllcyk7DQogICAgfQ0KDQogICAgLyoqIENhcmdhIHVuYSBVUkwgZGUgSWRlYWxpc3RhIHVzYW5kbyB1biBCcm93c2VyQ29udGV4dCBudWV2byB5IGRldnVlbHZlIGVsIEhUTUwgKi8NCiAgICBwcml2YXRlIGFzeW5jIGxvYWRQYWdlKGJyb3dzZXI6IEJyb3dzZXIsIHVybDogc3RyaW5nLCBpc0ZpcnN0UGFnZTogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7DQogICAgICAgIGxldCBjb250ZXh0OiBCcm93c2VyQ29udGV4dCB8IG51bGwgPSBudWxsOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29udGV4dCA9IGF3YWl0IGJyb3dzZXIubmV3Q29udGV4dCh7DQogICAgICAgICAgICAgICAgdmlld3BvcnQ6IHsgd2lkdGg6IDEzNjYsIGhlaWdodDogNzY4IH0sDQogICAgICAgICAgICAgICAgbG9jYWxlOiAiZXMtRVMiLA0KICAgICAgICAgICAgICAgIHRpbWV6b25lSWQ6ICJFdXJvcGUvTWFkcmlkIiwNCiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTMxLjAuMC4wIFNhZmFyaS81MzcuMzYiLA0KICAgICAgICAgICAgICAgIGV4dHJhSFRUUEhlYWRlcnM6IHsNCiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJlcy1FUyxlcztxPTAuOSxlbi1VUztxPTAuOCxlbjtxPTAuNyIsDQogICAgICAgICAgICAgICAgICAgICJBY2NlcHQiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLCovKjtxPTAuOCIsDQogICAgICAgICAgICAgICAgICAgICJSZWZlcmVyIjogImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vIiwNCiAgICAgICAgICAgICAgICAgICAgIlNlYy1GZXRjaC1EZXN0IjogImRvY3VtZW50IiwNCiAgICAgICAgICAgICAgICAgICAgIlNlYy1GZXRjaC1Nb2RlIjogIm5hdmlnYXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIlNlYy1GZXRjaC1TaXRlIjogImNyb3NzLXNpdGUiLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUNILVVBIjogJyJDaHJvbWl1bSI7dj0iMTMxIiwgIkdvb2dsZSBDaHJvbWUiO3Y9IjEzMSIsICJOb3RfQSBCcmFuZCI7dj0iMjQiJywNCiAgICAgICAgICAgICAgICAgICAgIlNlYy1DSC1VQS1Nb2JpbGUiOiAiPzAiLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUNILVVBLVBsYXRmb3JtIjogJyJXaW5kb3dzIicsDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBhd2FpdCBjb250ZXh0LmFkZEluaXRTY3JpcHQoU1RFQUxUSF9JTklUX1NDUklQVCk7DQoNCiAgICAgICAgICAgIC8vIFByZS1zZXRlYXIgY29va2llcyBEaWRvbWkNCiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuYWRkQ29va2llcyhbDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBuYW1lOiAiZGlkb21pX3Rva2VuIiwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1ha2VEaWRvbWlUb2tlbigpLA0KICAgICAgICAgICAgICAgICAgICBkb21haW46ICIuaWRlYWxpc3RhLmNvbSIsIHBhdGg6ICIvIiwgc2FtZVNpdGU6ICJOb25lIiBhcyBjb25zdCwgc2VjdXJlOiB0cnVlLA0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBuYW1lOiAiZXVjb25zZW50LXYyIiwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICJDUHdKZGtBUHdKZGtBRXNBQkJFU0NnQUFBQUFBQUFBQUFBQUFBQUFBQUEuWUFBQUFBQUFBQUFBIiwNCiAgICAgICAgICAgICAgICAgICAgZG9tYWluOiAiLmlkZWFsaXN0YS5jb20iLCBwYXRoOiAiLyIsIHNhbWVTaXRlOiAiTm9uZSIgYXMgY29uc3QsIHNlY3VyZTogdHJ1ZSwNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBjb250ZXh0Lm5ld1BhZ2UoKTsNCiAgICAgICAgICAgIGF3YWl0IHBhZ2UuZ290byh1cmwsIHsgd2FpdFVudGlsOiAiZG9tY29udGVudGxvYWRlZCIsIHRpbWVvdXQ6IHRoaXMucGFnZVRpbWVvdXRNcyB9KTsNCiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDgwMCk7DQoNCiAgICAgICAgICAgIC8vIERldGVjdGFyIGJsb3F1ZW8gcG9yIERhdGFEb21lIG8gYW50aWJvdA0KICAgICAgICAgICAgY29uc3QgY3VycmVudFVybCA9IHBhZ2UudXJsKCk7DQogICAgICAgICAgICBjb25zdCBwYWdlVGl0bGUgPSBhd2FpdCBwYWdlLnRpdGxlKCkuY2F0Y2goKCkgPT4gIiIpOw0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgIGN1cnJlbnRVcmwuaW5jbHVkZXMoIi9hbnRpYm90LyIpIHx8DQogICAgICAgICAgICAgICAgY3VycmVudFVybC5pbmNsdWRlcygiZGF0YWRvbWUiKSB8fA0KICAgICAgICAgICAgICAgIGN1cnJlbnRVcmwuaW5jbHVkZXMoImNhcHRjaGEiKSB8fA0KICAgICAgICAgICAgICAgIHBhZ2VUaXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJyb2JvdCIpIHx8DQogICAgICAgICAgICAgICAgcGFnZVRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImNhcHRjaGEiKQ0KICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbSWRlYWxpc3RhXSBCbG9xdWVhZG8gcG9yIGFudGlib3QgZW4gJHt1cmx9IC0gc2FsdGFuZG9gKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChpc0ZpcnN0UGFnZSkgew0KICAgICAgICAgICAgICAgIC8vIFNvbG8gZW4gbGEgcHJpbWVyYSBww6FnaW5hIGFjZXB0YW1vcyBjb29raWVzIHkgZXNwZXJhbW9zIG5ldHdvcmtpZGxlDQogICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5ldmFsdWF0ZSgoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIHRyeSB7IGlmICgod2luZG93IGFzIGFueSkuRGlkb21pPy5zZXRVc2VyQWdyZWVUb0FsbCkgKHdpbmRvdyBhcyBhbnkpLkRpZG9taS5zZXRVc2VyQWdyZWVUb0FsbCgpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLndhaXRGb3JMb2FkU3RhdGUoIm5ldHdvcmtpZGxlIiwgeyB0aW1lb3V0OiAyMDAwMCB9KS5jYXRjaCgoKSA9PiB7IH0pOw0KICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDgwMCk7DQogICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCIjZGlkb21pLW5vdGljZS1hZ3JlZS1idXR0b24sIC5kaWRvbWktY29udGludWUtYnRuIikuZmlyc3QoKQ0KICAgICAgICAgICAgICAgICAgICAuY2xpY2soeyB0aW1lb3V0OiAyMDAwLCBmb3JjZTogdHJ1ZSB9KS5jYXRjaCgoKSA9PiB7IH0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAvLyBQw6FnaW5hcyBzaWd1aWVudGVzOiBuZXR3b3JraWRsZSBub3JtYWxtZW50ZSBlcyBtw6FzIHLDoXBpZG8NCiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLndhaXRGb3JMb2FkU3RhdGUoIm5ldHdvcmtpZGxlIiwgeyB0aW1lb3V0OiAxNTAwMCB9KS5jYXRjaCgoKSA9PiB7IH0pOw0KICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDUwMCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoImFydGljbGUuaXRlbSIsIHsgdGltZW91dDogODAwMCB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKTsNCg0KICAgICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuICIiOw0KICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHBhZ2UuY29udGVudCgpOw0KICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkgew0KICAgICAgICAgICAgY29uc29sZS53YXJuKGBbSWRlYWxpc3RhXSBFcnJvciBjYXJnYW5kbyAke3VybH06ICR7ZXJyLm1lc3NhZ2V9YCk7DQogICAgICAgICAgICByZXR1cm4gIiI7DQogICAgICAgIH0gZmluYWxseSB7DQogICAgICAgICAgICBpZiAoY29udGV4dCkgYXdhaXQgY29udGV4dC5jbG9zZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqIEV4dHJhZSBlbCBuw7ptZXJvIG3DoXhpbW8gZGUgcMOhZ2luYSBkZWwgSFRNTCAqLw0KICAgIHByaXZhdGUgZ2V0TGFzdFBhZ2UoaHRtbDogc3RyaW5nKTogbnVtYmVyIHsNCiAgICAgICAgLy8gSWRlYWxpc3RhIHBhZ2luYSBjb24gdXJsIC4uLi9wYWdpbmEtTiDigJQgYnVzY2Ftb3MgZWwgbcOheGltbyBlbiBsb3MgbGlua3MgZGVsIHBhZ2luYWRvcg0KICAgICAgICBjb25zdCBtYXRjaGVzID0gaHRtbC5tYXRjaCgvcGFnaW5hLShcZCspL2cpIHx8IFtdOw0KICAgICAgICBjb25zdCBudW1zID0gbWF0Y2hlcy5tYXAobSA9PiBwYXJzZUludChtLnJlcGxhY2UoInBhZ2luYS0iLCAiIiksIDEwKSk7DQogICAgICAgIHJldHVybiBudW1zLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5udW1zKSA6IDE7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRXh0cmFlIGxhIGRpcmVjY2nDs24gbGltcGlhIGRlbCB0w610dWxvIGRlIElkZWFsaXN0YS4NCiAgICAgKiBFajogIlBpc28gZW4gdmVudGEgZW4gQ2FsbGUgTWF5b3IsIExsw61yaWEiIOKGkiAiQ2FsbGUgTWF5b3IsIExsw61yaWEiDQogICAgICovDQogICAgcHJpdmF0ZSBleHRyYWN0QWRkcmVzcyhmdWxsVGl0bGU6IHN0cmluZyk6IHN0cmluZyB7DQogICAgICAgIHJldHVybiBmdWxsVGl0bGUNCiAgICAgICAgICAgIC5yZXBsYWNlKC9eKHBpc298Y2FzYXxjaGFsZXR8ZFx1MDBmYXBsZXh8XHUwMGUxdGljb3xhcGFydGFtZW50b3xlc3R1ZGlvfGxvY2FsfGdhcmFqZXx0ZXJyZW5vKVxzK2VuXHMrKHZlbnRhfGFscXVpbGVyKVxzK2VuXHMrL2ksICIiKQ0KICAgICAgICAgICAgLnRyaW0oKSB8fCBmdWxsVGl0bGU7DQogICAgfQ0KDQogICAgLyoqIFBhcnNlYSBsb3MgYXJ0aWNsZS5pdGVtIGRlbCBIVE1MIHkgZGV2dWVsdmUgbGFzIHByb3BpZWRhZGVzICovDQogICAgcHJpdmF0ZSBwYXJzZUl0ZW1zKA0KICAgICAgICBodG1sOiBzdHJpbmcsDQogICAgICAgIHpvbmVzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHRoaXMuZ2V0QWN0aXZlWm9uZXM+PiwNCiAgICAgICAgc2VlblVybHM6IFNldDxzdHJpbmc+LA0KICAgICAgICB6b25lTGFiZWw/OiBzdHJpbmcNCiAgICApOiBQcm9wZXJ0eVtdIHsNCiAgICAgICAgY29uc3QgcHJvcHM6IFByb3BlcnR5W10gPSBbXTsNCiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTsNCg0KICAgICAgICAkKCJhcnRpY2xlLml0ZW0iKS5lYWNoKChfaSwgZWwpID0+IHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgY29uc3QgbGlua0VsID0gJChlbCkuZmluZCgiYS5pdGVtLWxpbmsiKTsNCiAgICAgICAgICAgICAgICBjb25zdCBmdWxsVGl0bGUgPSB0aGlzLnNhbml0aXplVGV4dChsaW5rRWwuYXR0cigidGl0bGUiKSB8fCBsaW5rRWwudGV4dCgpKTsNCiAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gbGlua0VsLmF0dHIoImhyZWYiKSB8fCAiIjsNCiAgICAgICAgICAgICAgICBjb25zdCBhYnNVcmwgPSBocmVmLnN0YXJ0c1dpdGgoImh0dHAiKSA/IGhyZWYgOiBgJHt0aGlzLmJhc2VVcmx9JHtocmVmfWA7DQoNCiAgICAgICAgICAgICAgICAvLyBQcmVjaW86IGludGVudGFyIHNlbGVjdG9yIGVzcGVjw61maWNvLCBsdWVnbyBnZW7DqXJpY28NCiAgICAgICAgICAgICAgICBjb25zdCBwcmljZVRleHQgPSB0aGlzLnNhbml0aXplVGV4dCgNCiAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgiLml0ZW0tcHJpY2UgaDIsIC5wcmljZS1yb3cgLml0ZW0tcHJpY2UsIC5pdGVtLXByaWNlIikuZmlyc3QoKS50ZXh0KCkNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5wYXJzZVByaWNlKHByaWNlVGV4dCk7DQoNCiAgICAgICAgICAgICAgICAvLyBIYWJpdGFjaW9uZXMgeSBtwrIgYnVzY2FuZG8gcG9yIHRleHRvIGRlbCBkZXRhbGxlIChtw6FzIHJvYnVzdG8gcXVlIHBvciBwb3NpY2nDs24pDQogICAgICAgICAgICAgICAgbGV0IHJvb21zID0gMDsNCiAgICAgICAgICAgICAgICBsZXQgc2l6ZV9tMiA9IDA7DQogICAgICAgICAgICAgICAgJChlbCkuZmluZCgiLml0ZW0tZGV0YWlsIikuZWFjaCgoX2osIGRldEVsKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSAkKGRldEVsKS50ZXh0KCkudHJpbSgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXJvb21zICYmIC9oYWIvaS50ZXN0KHQpKSByb29tcyA9IHBhcnNlSW50KHQpIHx8IDA7DQogICAgICAgICAgICAgICAgICAgIGlmICghc2l6ZV9tMiAmJiAvbVx1MDBiMi9pLnRlc3QodCkpIHNpemVfbTIgPSBwYXJzZUludCh0KSB8fCAwOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VfdXJsID0gJChlbCkuZmluZCgicGljdHVyZSBpbWciKS5hdHRyKCJzcmMiKQ0KICAgICAgICAgICAgICAgICAgICB8fCAkKGVsKS5maW5kKCJpbWciKS5maXJzdCgpLmF0dHIoInNyYyIpIHx8ICIiOw0KDQogICAgICAgICAgICAgICAgLy8gRGlyZWNjacOzbiBsaW1waWE6IHF1aXRhciDCq1Bpc28gZW4gdmVudGEgZW7CuyBkZWwgaW5pY2lvDQogICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmV4dHJhY3RBZGRyZXNzKGZ1bGxUaXRsZSk7DQoNCiAgICAgICAgICAgICAgICBpZiAocHJpY2UgPiAwICYmIGZ1bGxUaXRsZSAmJiAhc2VlblVybHMuaGFzKGFic1VybCkpIHsNCiAgICAgICAgICAgICAgICAgICAgc2VlblVybHMuYWRkKGFic1VybCk7DQogICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZ1bGxUaXRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICBtdW5pY2lwYWxpdHk6IHpvbmVMYWJlbCAmJiB6b25lTGFiZWwuaW5jbHVkZXMoIlZhbGVuY2lhIikgPyAiVmFsZW5jaWEiIDogdGhpcy5kZXRlY3RNdW5pY2lwYWxpdHkobG9jYXRpb24sIHpvbmVzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X3R5cGU6IHRoaXMubm9ybWFsaXplVHlwZShmdWxsVGl0bGUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uX3R5cGU6IHRoaXMuX29wZXJhdGlvblR5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICByb29tcywgc2l6ZV9tMiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYWJzVXJsLCBzb3VyY2U6IHRoaXMuc291cmNlTmFtZSwgaW1hZ2VfdXJsLA0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGNhdGNoIHsgLyogc2tpcCBtYWxmb3JtZWQgKi8gfQ0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gcHJvcHM7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBhc3luYyBzY3JhcGVab25lKA0KICAgICAgICBicm93c2VyOiBCcm93c2VyLA0KICAgICAgICBiYXNlWm9uZVVybDogc3RyaW5nLA0KICAgICAgICB6b25lczogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmdldEFjdGl2ZVpvbmVzPj4sDQogICAgICAgIHNlZW5VcmxzOiBTZXQ8c3RyaW5nPiwNCiAgICAgICAgem9uZUxhYmVsPzogc3RyaW5nDQogICAgKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7DQogICAgICAgIGNvbnN0IHByb3BzOiBQcm9wZXJ0eVtdID0gW107DQoNCiAgICAgICAgLy8gUMOhZ2luYSAxDQogICAgICAgIGNvbnN0IGh0bWwxID0gYXdhaXQgdGhpcy5sb2FkUGFnZShicm93c2VyLCBiYXNlWm9uZVVybCwgdHJ1ZSk7DQogICAgICAgIGlmICghaHRtbDEpIHsNCiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0lkZWFsaXN0YV0gU2luIGFydMOtY3Vsb3MgZW4gJHtiYXNlWm9uZVVybH1gKTsNCiAgICAgICAgICAgIHJldHVybiBwcm9wczsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHBhZ2UxUHJvcHMgPSB0aGlzLnBhcnNlSXRlbXMoaHRtbDEsIHpvbmVzLCBzZWVuVXJscywgem9uZUxhYmVsKTsNCiAgICAgICAgcHJvcHMucHVzaCguLi5wYWdlMVByb3BzKTsNCg0KICAgICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuZ2V0TGFzdFBhZ2UoaHRtbDEpOw0KICAgICAgICBjb25zb2xlLmxvZyhgW0lkZWFsaXN0YV0gJHtiYXNlWm9uZVVybH0g4oaSICR7cGFnZTFQcm9wcy5sZW5ndGh9IHByb3BzIChww6FnIDEvJHtsYXN0UGFnZX0pYCk7DQoNCiAgICAgICAgLy8gUMOhZ2luYXMgMi4ubGFzdFBhZ2UgKG3DoXggNSBwYXJhIGV2aXRhciBkZW1hc2lhZGFzIHBldGljaW9uZXMpDQogICAgICAgIGNvbnN0IG1heFBhZ2VzID0gTWF0aC5taW4obGFzdFBhZ2UsIDUpOw0KICAgICAgICBmb3IgKGxldCBwID0gMjsgcCA8PSBtYXhQYWdlczsgcCsrKSB7DQogICAgICAgICAgICBhd2FpdCBzbGVlcCgxNTAwICsgTWF0aC5yYW5kb20oKSAqIDE1MDApOw0KICAgICAgICAgICAgY29uc3QgcGFnZVVybCA9IGAke2Jhc2Vab25lVXJsfXBhZ2luYS0ke3B9Lmh0bWA7DQogICAgICAgICAgICBjb25zdCBodG1sTiA9IGF3YWl0IHRoaXMubG9hZFBhZ2UoYnJvd3NlciwgcGFnZVVybCwgZmFsc2UpOw0KICAgICAgICAgICAgaWYgKCFodG1sTikgYnJlYWs7DQoNCiAgICAgICAgICAgIGNvbnN0IHBhZ2VQcm9wcyA9IHRoaXMucGFyc2VJdGVtcyhodG1sTiwgem9uZXMsIHNlZW5VcmxzLCB6b25lTGFiZWwpOw0KICAgICAgICAgICAgcHJvcHMucHVzaCguLi5wYWdlUHJvcHMpOw0KICAgICAgICAgICAgY29uc29sZS5sb2coYFtJZGVhbGlzdGFdICAgcMOhZyAke3B9LyR7bGFzdFBhZ2V9IOKGkiAke3BhZ2VQcm9wcy5sZW5ndGh9IHByb3BzIGFkaWNpb25hbGVzYCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gcHJvcHM7DQogICAgfQ0KfQ0K","afterExisted":true,"afterHash":"88de0b3bafdfe426f5a37485ad6501a032178bd748849d829edd8e98d479fe04","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IGNocm9taXVtLCBCcm93c2VyQ29udGV4dCwgQnJvd3NlciB9IGZyb20gInBsYXl3cmlnaHQiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgVkFMRU5DSUFfRElTVFJJQ1RTIH0gZnJvbSAiLi4vY29uZmlnL3ZhbGVuY2lhRGlzdHJpY3RzIjsNCmltcG9ydCB7IFZhbGVuY2lhRGlzdHJpY3RNb2RlbCB9IGZyb20gIi4uL21vZGVscy92YWxlbmNpYURpc3RyaWN0TW9kZWwiOw0KDQovLyBTY3JpcHQgZGUgc3RlYWx0aCBwYXJhIGV2YWRpciBkZXRlY2Npw7NuIGRlIGJvdCAoY29tcGF0aWJsZSBjb24gSWRlYWxpc3RhL0RhdGFEb21lKQ0KY29uc3QgU1RFQUxUSF9JTklUX1NDUklQVCA9IGANCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICd3ZWJkcml2ZXInLCB7IGdldDogKCkgPT4gdW5kZWZpbmVkIH0pOw0Kd2luZG93LmNocm9tZSA9IHsNCiAgICBhcHA6IHsgaXNJbnN0YWxsZWQ6IGZhbHNlIH0sDQogICAgY3NpOiBmdW5jdGlvbigpIHt9LA0KICAgIGxvYWRUaW1lczogZnVuY3Rpb24oKSB7IHJldHVybiB7fTsgfSwNCiAgICBydW50aW1lOiB7fQ0KfTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICdsYW5ndWFnZXMnLCB7IGdldDogKCkgPT4gWydlcy1FUycsICdlcycsICdlbi1VUycsICdlbiddIH0pOw0KT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvciwgJ2hhcmR3YXJlQ29uY3VycmVuY3knLCB7IGdldDogKCkgPT4gOCB9KTsNCmlmICh0eXBlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0ICE9PSAndW5kZWZpbmVkJykgew0KICAgIGNvbnN0IGdldFBhcmFtZXRlciA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyOw0KICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24ocCkgew0KICAgICAgICBpZiAocCA9PT0gMzc0NDUpIHJldHVybiAnSW50ZWwgSW5jLic7DQogICAgICAgIGlmIChwID09PSAzNzQ0NikgcmV0dXJuICdJbnRlbChSKSBVSEQgR3JhcGhpY3MgNjIwJzsNCiAgICAgICAgcmV0dXJuIGdldFBhcmFtZXRlci5jYWxsKHRoaXMsIHApOw0KICAgIH07DQp9DQppZiAobmF2aWdhdG9yLnBlcm1pc3Npb25zICYmIG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSkgew0KICAgIGNvbnN0IG9yaWdRdWVyeSA9IG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeS5iaW5kKG5hdmlnYXRvci5wZXJtaXNzaW9ucyk7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvci5wZXJtaXNzaW9ucywgJ3F1ZXJ5Jywgew0KICAgICAgICB2YWx1ZTogKHApID0+IHAubmFtZSA9PT0gJ25vdGlmaWNhdGlvbnMnDQogICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZSh7IHN0YXRlOiBOb3RpZmljYXRpb24ucGVybWlzc2lvbiB9KQ0KICAgICAgICAgICAgOiBvcmlnUXVlcnkocCkNCiAgICB9KTsNCn0NCmA7DQoNCi8qKiBHZW5lcmEgZWwgdmFsb3IgZGVsIGNvb2tpZSBkaWRvbWlfdG9rZW4gY29uIGxhIGZlY2hhIGFjdHVhbCAqLw0KZnVuY3Rpb24gbWFrZURpZG9taVRva2VuKCk6IHN0cmluZyB7DQogICAgY29uc3Qgbm93SXNvID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGR7M31aJC8sICIuMDAwWiIpOw0KICAgIGNvbnN0IHBheWxvYWQgPSB7DQogICAgICAgIHVzZXJJZDogIjZmZWM1M2RkLWExOTctNmIyYi1iNDdiLWM4Mzk1ZDc5OTkyNyIsDQogICAgICAgIGNyZWF0ZWQ6IG5vd0lzbywNCiAgICAgICAgdXBkYXRlZDogbm93SXNvLA0KICAgICAgICB2ZXJzaW9uOiAyLA0KICAgICAgICB2ZW5kb3JzOiB7IGVuYWJsZWQ6IFtdIGFzIHN0cmluZ1tdIH0sDQogICAgICAgIHB1cnBvc2VzOiB7IGVuYWJsZWQ6IFtdIGFzIHN0cmluZ1tdIH0sDQogICAgfTsNCiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpLnRvU3RyaW5nKCJiYXNlNjQiKTsNCn0NCg0KZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gew0KICAgIHJldHVybiBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTsNCn0NCg0KLy8gU2x1Z3MgZXNwZWNpYWxlczogem9uYS5zbHVnIOKGkiBzbHVnIGRlIElkZWFsaXN0YSAoc2luIHN1ZmlqbyBkZSBwcm92aW5jaWEpDQpjb25zdCBpZGVhbGlzdGFTbHVnTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gew0KICAgICJlbGlhbmEiOiAibC1lbGlhbmEiLA0KICAgICJyaWJhLXJvamEiOiAicmliYS1yb2phLWRlLXR1cmlhIiwNCiAgICAicG9ibGEtZGUtdmFsbGJvbmEiOiAibGEtcG9ibGEtZGUtdmFsbGJvbmEiLA0KICAgICJ2aWxsYW1hcmNoYW50ZSI6ICJ2aWxhbWFyeGFudCIsDQp9Ow0KDQovLyBTdWZpam8gZGUgcHJvdmluY2lhIHBvciB6b25hIChwb3IgZGVmZWN0bzogIi12YWxlbmNpYSIpDQpjb25zdCBpZGVhbGlzdGFQcm92aW5jZVN1ZmZpeDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsNCiAgICAibW9uY29mYSI6ICItY2FzdGVsbG9uIiwNCn07DQoNCi8vIFpvbmFzIHF1ZSBzZSBvbWl0ZW4gZW4gSWRlYWxpc3RhIChkZW1hc2lhZG8gZ2Vuw6lyaWNhcyBvIHNpbiBww6FnaW5hIHByb3BpYSkNCmNvbnN0IGlkZWFsaXN0YVNraXAgPSBuZXcgU2V0PHN0cmluZz4oWyJ2YWxlbmNpYSJdKTsNCg0KZXhwb3J0IGNsYXNzIElkZWFsaXN0YVBsYXl3cmlnaHRTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXIgew0KICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVRpbWVvdXRNcyA9IDQ1MDAwOw0KICAgIHByaXZhdGUgYXN5bmMgZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKTogUHJvbWlzZTxBcnJheTx7IHNsdWc6IHN0cmluZzsgem9uZUxhYmVsOiBzdHJpbmcgfT4+IHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBWYWxlbmNpYURpc3RyaWN0TW9kZWwuZmluZEFsbCgpOwogICAgICAgICAgICBpZiAocm93cy5sZW5ndGggPiAwKSByZXR1cm4gcm93cwogICAgICAgICAgICAgICAgLmZpbHRlcihyID0+IHIuYWN0aXZlICE9PSAwICYmICEhci5pZGVhbGlzdGFfc2x1ZykKICAgICAgICAgICAgICAgIC5tYXAociA9PiAoeyBzbHVnOiByLmlkZWFsaXN0YV9zbHVnLCB6b25lTGFiZWw6IGAke3IubmFtZX0sIFZhbGVuY2lhYCB9KSk7CiAgICAgICAgfSBjYXRjaCB7IC8qIGZhbGxiYWNrIHRvIHN0YXRpYyAqLyB9DQogICAgICAgIHJldHVybiBWQUxFTkNJQV9ESVNUUklDVFMubWFwKGQgPT4gKHsgc2x1ZzogZC5pZGVhbGlzdGEsIHpvbmVMYWJlbDogYCR7ZC5uYW1lfSwgVmFsZW5jaWFgIH0pKTsNCiAgICB9DQoNCiAgICBjb25zdHJ1Y3RvcigpIHsNCiAgICAgICAgc3VwZXIoImh0dHBzOi8vd3d3LmlkZWFsaXN0YS5jb20iLCAiSWRlYWxpc3RhIik7DQogICAgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3QgdGFyZ2V0czogQXJyYXk8eyBzbHVnOiBzdHJpbmc7IHpvbmVMYWJlbD86IHN0cmluZzsgaXNWYWxlbmNpYURpc3RyaWN0PzogYm9vbGVhbiB9PiA9IFtdOwogICAgICAgIGlmICh6b25lcy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBmb3IgKGNvbnN0IHogb2Ygem9uZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoei5zbHVnID09PSAidmFsZW5jaWEiKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RyaWN0cyA9IGF3YWl0IHRoaXMuZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKTsNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKC4uLmRpc3RyaWN0cy5tYXAoZCA9PiAoeyAuLi5kLCBpc1ZhbGVuY2lhRGlzdHJpY3Q6IHRydWUgfSkpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCh7IHNsdWc6IHouc2x1Zywgem9uZUxhYmVsOiB6Lm5hbWUgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHsgc2x1ZzogImxsaXJpYSIsIHpvbmVMYWJlbDogIkxsw61yaWEiIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOw0KDQogICAgICAgIGxldCBicm93c2VyOiBCcm93c2VyIHwgbnVsbCA9IG51bGw7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBicm93c2VyID0gYXdhaXQgY2hyb21pdW0ubGF1bmNoKHsNCiAgICAgICAgICAgICAgICBoZWFkbGVzczogdHJ1ZSwNCiAgICAgICAgICAgICAgICBhcmdzOiBbDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtYmxpbmstZmVhdHVyZXM9QXV0b21hdGlvbkNvbnRyb2xsZWQiLA0KICAgICAgICAgICAgICAgICAgICAiLS1uby1zYW5kYm94IiwNCiAgICAgICAgICAgICAgICAgICAgIi0tZGlzYWJsZS1zZXR1aWQtc2FuZGJveCIsDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtZGV2LXNobS11c2FnZSIsDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtZ3B1IiwNCiAgICAgICAgICAgICAgICAgICAgIi0tbGFuZz1lcy1FUyIsDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGFyZ2V0cykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0LnNsdWc7DQogICAgICAgICAgICAgICAgaWYgKGlkZWFsaXN0YVNraXAuaGFzKHNsdWcpKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbSWRlYWxpc3RhXSBPbWl0aWVuZG8gJHtzbHVnfSAoem9uYSBtdXkgYW1wbGlhLCBzaW4gcMOhZ2luYSBlc3BlY8OtZmljYSlgKTsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnN0IGlkZWFsaXN0YVNsdWcgPSBpZGVhbGlzdGFTbHVnTWFwW3NsdWddID8/IHNsdWc7DQogICAgICAgICAgICAgICAgY29uc3Qgb3BQYXRoID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gImFscXVpbGVyLXZpdmllbmRhcyIgOiAidmVudGEtdml2aWVuZGFzIjsKICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHQuaXNWYWxlbmNpYURpc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLmJhc2VVcmx9LyR7b3BQYXRofS92YWxlbmNpYS8ke2lkZWFsaXN0YVNsdWd9L2AKICAgICAgICAgICAgICAgICAgICA6IGAke3RoaXMuYmFzZVVybH0vJHtvcFBhdGh9LyR7aWRlYWxpc3RhU2x1Z30ke2lkZWFsaXN0YVByb3ZpbmNlU3VmZml4W3NsdWddID8/ICItdmFsZW5jaWEifS9gOwoNCiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGF3YWl0IHRoaXMuc2NyYXBlWm9uZShicm93c2VyLCB1cmwsIHpvbmVzLCBzZWVuVXJscywgdC56b25lTGFiZWwpOw0KICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCguLi5wcm9wcyk7DQoNCiAgICAgICAgICAgICAgICAvLyBQYXVzYSBhbGVhdG9yaWEgZW50cmUgem9uYXMgcGFyYSBldml0YXIgZGV0ZWNjacOzbg0KICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDIwMDAgKyBNYXRoLnJhbmRvbSgpICogMjAwMCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7DQogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbSWRlYWxpc3RhXSBFcnJvciBnZW5lcmFsOiAke2Vyci5tZXNzYWdlfWApOw0KICAgICAgICB9IGZpbmFsbHkgew0KICAgICAgICAgICAgaWYgKGJyb3dzZXIpIGF3YWl0IGJyb3dzZXIuY2xvc2UoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzdWx0cyhwcm9wZXJ0aWVzKTsNCiAgICB9DQoNCiAgICAvKiogQ2FyZ2EgdW5hIFVSTCBkZSBJZGVhbGlzdGEgdXNhbmRvIHVuIEJyb3dzZXJDb250ZXh0IG51ZXZvIHkgZGV2dWVsdmUgZWwgSFRNTCAqLw0KICAgIHByaXZhdGUgYXN5bmMgbG9hZFBhZ2UoYnJvd3NlcjogQnJvd3NlciwgdXJsOiBzdHJpbmcsIGlzRmlyc3RQYWdlOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHsNCiAgICAgICAgbGV0IGNvbnRleHQ6IEJyb3dzZXJDb250ZXh0IHwgbnVsbCA9IG51bGw7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBjb250ZXh0ID0gYXdhaXQgYnJvd3Nlci5uZXdDb250ZXh0KHsNCiAgICAgICAgICAgICAgICB2aWV3cG9ydDogeyB3aWR0aDogMTM2NiwgaGVpZ2h0OiA3NjggfSwNCiAgICAgICAgICAgICAgICBsb2NhbGU6ICJlcy1FUyIsDQogICAgICAgICAgICAgICAgdGltZXpvbmVJZDogIkV1cm9wZS9NYWRyaWQiLA0KICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzEuMC4wLjAgU2FmYXJpLzUzNy4zNiIsDQogICAgICAgICAgICAgICAgZXh0cmFIVFRQSGVhZGVyczogew0KICAgICAgICAgICAgICAgICAgICAiQWNjZXB0LUxhbmd1YWdlIjogImVzLUVTLGVzO3E9MC45LGVuLVVTO3E9MC44LGVuO3E9MC43IiwNCiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsKi8qO3E9MC44IiwNCiAgICAgICAgICAgICAgICAgICAgIlJlZmVyZXIiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8iLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUZldGNoLURlc3QiOiAiZG9jdW1lbnQiLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUZldGNoLU1vZGUiOiAibmF2aWdhdGUiLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUZldGNoLVNpdGUiOiAiY3Jvc3Mtc2l0ZSIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtQ0gtVUEiOiAnIkNocm9taXVtIjt2PSIxMzEiLCAiR29vZ2xlIENocm9tZSI7dj0iMTMxIiwgIk5vdF9BIEJyYW5kIjt2PSIyNCInLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUNILVVBLU1vYmlsZSI6ICI/MCIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtQ0gtVUEtUGxhdGZvcm0iOiAnIldpbmRvd3MiJywNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuYWRkSW5pdFNjcmlwdChTVEVBTFRIX0lOSVRfU0NSSVBUKTsNCg0KICAgICAgICAgICAgLy8gUHJlLXNldGVhciBjb29raWVzIERpZG9taQ0KICAgICAgICAgICAgYXdhaXQgY29udGV4dC5hZGRDb29raWVzKFsNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJkaWRvbWlfdG9rZW4iLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWFrZURpZG9taVRva2VuKCksDQogICAgICAgICAgICAgICAgICAgIGRvbWFpbjogIi5pZGVhbGlzdGEuY29tIiwgcGF0aDogIi8iLCBzYW1lU2l0ZTogIk5vbmUiIGFzIGNvbnN0LCBzZWN1cmU6IHRydWUsDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJldWNvbnNlbnQtdjIiLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIkNQd0pka0FQd0pka0FFc0FCQkVTQ2dBQUFBQUFBQUFBQUFBQUFBQUFBQS5ZQUFBQUFBQUFBQUEiLA0KICAgICAgICAgICAgICAgICAgICBkb21haW46ICIuaWRlYWxpc3RhLmNvbSIsIHBhdGg6ICIvIiwgc2FtZVNpdGU6ICJOb25lIiBhcyBjb25zdCwgc2VjdXJlOiB0cnVlLA0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGNvbnRleHQubmV3UGFnZSgpOw0KICAgICAgICAgICAgYXdhaXQgcGFnZS5nb3RvKHVybCwgeyB3YWl0VW50aWw6ICJkb21jb250ZW50bG9hZGVkIiwgdGltZW91dDogdGhpcy5wYWdlVGltZW91dE1zIH0pOw0KICAgICAgICAgICAgYXdhaXQgc2xlZXAoODAwKTsNCg0KICAgICAgICAgICAgLy8gRGV0ZWN0YXIgYmxvcXVlbyBwb3IgRGF0YURvbWUgbyBhbnRpYm90DQogICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gcGFnZS51cmwoKTsNCiAgICAgICAgICAgIGNvbnN0IHBhZ2VUaXRsZSA9IGF3YWl0IHBhZ2UudGl0bGUoKS5jYXRjaCgoKSA9PiAiIik7DQogICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgICAgY3VycmVudFVybC5pbmNsdWRlcygiL2FudGlib3QvIikgfHwNCiAgICAgICAgICAgICAgICBjdXJyZW50VXJsLmluY2x1ZGVzKCJkYXRhZG9tZSIpIHx8DQogICAgICAgICAgICAgICAgY3VycmVudFVybC5pbmNsdWRlcygiY2FwdGNoYSIpIHx8DQogICAgICAgICAgICAgICAgcGFnZVRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInJvYm90IikgfHwNCiAgICAgICAgICAgICAgICBwYWdlVGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiY2FwdGNoYSIpDQogICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFtJZGVhbGlzdGFdIEJsb3F1ZWFkbyBwb3IgYW50aWJvdCBlbiAke3VybH0gLSBzYWx0YW5kb2ApOw0KICAgICAgICAgICAgICAgIHJldHVybiAiIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGlzRmlyc3RQYWdlKSB7DQogICAgICAgICAgICAgICAgLy8gU29sbyBlbiBsYSBwcmltZXJhIHDDoWdpbmEgYWNlcHRhbW9zIGNvb2tpZXMgeSBlc3BlcmFtb3MgbmV0d29ya2lkbGUNCiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgaWYgKCh3aW5kb3cgYXMgYW55KS5EaWRvbWk/LnNldFVzZXJBZ3JlZVRvQWxsKSAod2luZG93IGFzIGFueSkuRGlkb21pLnNldFVzZXJBZ3JlZVRvQWxsKCk7IH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvckxvYWRTdGF0ZSgibmV0d29ya2lkbGUiLCB7IHRpbWVvdXQ6IDIwMDAwIH0pLmNhdGNoKCgpID0+IHsgfSk7DQogICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoODAwKTsNCiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoIiNkaWRvbWktbm90aWNlLWFncmVlLWJ1dHRvbiwgLmRpZG9taS1jb250aW51ZS1idG4iKS5maXJzdCgpDQogICAgICAgICAgICAgICAgICAgIC5jbGljayh7IHRpbWVvdXQ6IDIwMDAsIGZvcmNlOiB0cnVlIH0pLmNhdGNoKCgpID0+IHsgfSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIC8vIFDDoWdpbmFzIHNpZ3VpZW50ZXM6IG5ldHdvcmtpZGxlIG5vcm1hbG1lbnRlIGVzIG3DoXMgcsOhcGlkbw0KICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvckxvYWRTdGF0ZSgibmV0d29ya2lkbGUiLCB7IHRpbWVvdXQ6IDE1MDAwIH0pLmNhdGNoKCgpID0+IHsgfSk7DQogICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoNTAwKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgY29uc3QgZm91bmQgPSBhd2FpdCBwYWdlLndhaXRGb3JTZWxlY3RvcigiYXJ0aWNsZS5pdGVtIiwgeyB0aW1lb3V0OiA4MDAwIH0pDQogICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpOw0KDQogICAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gIiI7DQogICAgICAgICAgICByZXR1cm4gYXdhaXQgcGFnZS5jb250ZW50KCk7DQogICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7DQogICAgICAgICAgICBjb25zb2xlLndhcm4oYFtJZGVhbGlzdGFdIEVycm9yIGNhcmdhbmRvICR7dXJsfTogJHtlcnIubWVzc2FnZX1gKTsNCiAgICAgICAgICAgIHJldHVybiAiIjsNCiAgICAgICAgfSBmaW5hbGx5IHsNCiAgICAgICAgICAgIGlmIChjb250ZXh0KSBhd2FpdCBjb250ZXh0LmNsb3NlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKiogRXh0cmFlIGVsIG7Dum1lcm8gbcOheGltbyBkZSBww6FnaW5hIGRlbCBIVE1MICovDQogICAgcHJpdmF0ZSBnZXRMYXN0UGFnZShodG1sOiBzdHJpbmcpOiBudW1iZXIgew0KICAgICAgICAvLyBJZGVhbGlzdGEgcGFnaW5hIGNvbiB1cmwgLi4uL3BhZ2luYS1OIOKAlCBidXNjYW1vcyBlbCBtw6F4aW1vIGVuIGxvcyBsaW5rcyBkZWwgcGFnaW5hZG9yDQogICAgICAgIGNvbnN0IG1hdGNoZXMgPSBodG1sLm1hdGNoKC9wYWdpbmEtKFxkKykvZykgfHwgW107DQogICAgICAgIGNvbnN0IG51bXMgPSBtYXRjaGVzLm1hcChtID0+IHBhcnNlSW50KG0ucmVwbGFjZSgicGFnaW5hLSIsICIiKSwgMTApKTsNCiAgICAgICAgcmV0dXJuIG51bXMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLm51bXMpIDogMTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBFeHRyYWUgbGEgZGlyZWNjacOzbiBsaW1waWEgZGVsIHTDrXR1bG8gZGUgSWRlYWxpc3RhLg0KICAgICAqIEVqOiAiUGlzbyBlbiB2ZW50YSBlbiBDYWxsZSBNYXlvciwgTGzDrXJpYSIg4oaSICJDYWxsZSBNYXlvciwgTGzDrXJpYSINCiAgICAgKi8NCiAgICBwcml2YXRlIGV4dHJhY3RBZGRyZXNzKGZ1bGxUaXRsZTogc3RyaW5nKTogc3RyaW5nIHsNCiAgICAgICAgcmV0dXJuIGZ1bGxUaXRsZQ0KICAgICAgICAgICAgLnJlcGxhY2UoL14ocGlzb3xjYXNhfGNoYWxldHxkXHUwMGZhcGxleHxcdTAwZTF0aWNvfGFwYXJ0YW1lbnRvfGVzdHVkaW98bG9jYWx8Z2FyYWplfHRlcnJlbm8pXHMrZW5ccysodmVudGF8YWxxdWlsZXIpXHMrZW5ccysvaSwgIiIpDQogICAgICAgICAgICAudHJpbSgpIHx8IGZ1bGxUaXRsZTsNCiAgICB9DQoNCiAgICAvKiogUGFyc2VhIGxvcyBhcnRpY2xlLml0ZW0gZGVsIEhUTUwgeSBkZXZ1ZWx2ZSBsYXMgcHJvcGllZGFkZXMgKi8NCiAgICBwcml2YXRlIHBhcnNlSXRlbXMoDQogICAgICAgIGh0bWw6IHN0cmluZywNCiAgICAgICAgem9uZXM6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5nZXRBY3RpdmVab25lcz4+LA0KICAgICAgICBzZWVuVXJsczogU2V0PHN0cmluZz4sDQogICAgICAgIHpvbmVMYWJlbD86IHN0cmluZw0KICAgICk6IFByb3BlcnR5W10gew0KICAgICAgICBjb25zdCBwcm9wczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpOw0KDQogICAgICAgICQoImFydGljbGUuaXRlbSIpLmVhY2goKF9pLCBlbCkgPT4gew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBjb25zdCBsaW5rRWwgPSAkKGVsKS5maW5kKCJhLml0ZW0tbGluayIpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxUaXRsZSA9IHRoaXMuc2FuaXRpemVUZXh0KGxpbmtFbC5hdHRyKCJ0aXRsZSIpIHx8IGxpbmtFbC50ZXh0KCkpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rRWwuYXR0cigiaHJlZiIpIHx8ICIiOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFic1VybCA9IGhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpID8gaHJlZiA6IGAke3RoaXMuYmFzZVVybH0ke2hyZWZ9YDsNCg0KICAgICAgICAgICAgICAgIC8vIFByZWNpbzogaW50ZW50YXIgc2VsZWN0b3IgZXNwZWPDrWZpY28sIGx1ZWdvIGdlbsOpcmljbw0KICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlVGV4dCA9IHRoaXMuc2FuaXRpemVUZXh0KA0KICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCIuaXRlbS1wcmljZSBoMiwgLnByaWNlLXJvdyAuaXRlbS1wcmljZSwgLml0ZW0tcHJpY2UiKS5maXJzdCgpLnRleHQoKQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnBhcnNlUHJpY2UocHJpY2VUZXh0KTsNCg0KICAgICAgICAgICAgICAgIC8vIEhhYml0YWNpb25lcyB5IG3CsiBidXNjYW5kbyBwb3IgdGV4dG8gZGVsIGRldGFsbGUgKG3DoXMgcm9idXN0byBxdWUgcG9yIHBvc2ljacOzbikNCiAgICAgICAgICAgICAgICBsZXQgcm9vbXMgPSAwOw0KICAgICAgICAgICAgICAgIGxldCBzaXplX20yID0gMDsNCiAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCIuaXRlbS1kZXRhaWwiKS5lYWNoKChfaiwgZGV0RWwpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9ICQoZGV0RWwpLnRleHQoKS50cmltKCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghcm9vbXMgJiYgL2hhYi9pLnRlc3QodCkpIHJvb21zID0gcGFyc2VJbnQodCkgfHwgMDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaXplX20yICYmIC9tXHUwMGIyL2kudGVzdCh0KSkgc2l6ZV9tMiA9IHBhcnNlSW50KHQpIHx8IDA7DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZV91cmwgPSAkKGVsKS5maW5kKCJwaWN0dXJlIGltZyIpLmF0dHIoInNyYyIpDQogICAgICAgICAgICAgICAgICAgIHx8ICQoZWwpLmZpbmQoImltZyIpLmZpcnN0KCkuYXR0cigic3JjIikgfHwgIiI7DQoNCiAgICAgICAgICAgICAgICAvLyBEaXJlY2Npw7NuIGxpbXBpYTogcXVpdGFyIMKrUGlzbyBlbiB2ZW50YSBlbsK7IGRlbCBpbmljaW8NCiAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZXh0cmFjdEFkZHJlc3MoZnVsbFRpdGxlKTsNCg0KICAgICAgICAgICAgICAgIGlmIChwcmljZSA+IDAgJiYgZnVsbFRpdGxlICYmICFzZWVuVXJscy5oYXMoYWJzVXJsKSkgew0KICAgICAgICAgICAgICAgICAgICBzZWVuVXJscy5hZGQoYWJzVXJsKTsNCiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZnVsbFRpdGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2UsDQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG11bmljaXBhbGl0eTogem9uZUxhYmVsICYmIHpvbmVMYWJlbC5pbmNsdWRlcygiVmFsZW5jaWEiKSA/ICJWYWxlbmNpYSIgOiB0aGlzLmRldGVjdE11bmljaXBhbGl0eShsb2NhdGlvbiwgem9uZXMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKGZ1bGxUaXRsZSksDQogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fdHlwZTogdGhpcy5fb3BlcmF0aW9uVHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvb21zLCBzaXplX20yLA0KICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBhYnNVcmwsIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLCBpbWFnZV91cmwsDQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gY2F0Y2ggeyAvKiBza2lwIG1hbGZvcm1lZCAqLyB9DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiBwcm9wczsNCiAgICB9DQoNCiAgICBwcml2YXRlIGFzeW5jIHNjcmFwZVpvbmUoDQogICAgICAgIGJyb3dzZXI6IEJyb3dzZXIsDQogICAgICAgIGJhc2Vab25lVXJsOiBzdHJpbmcsDQogICAgICAgIHpvbmVzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHRoaXMuZ2V0QWN0aXZlWm9uZXM+PiwNCiAgICAgICAgc2VlblVybHM6IFNldDxzdHJpbmc+LA0KICAgICAgICB6b25lTGFiZWw/OiBzdHJpbmcNCiAgICApOiBQcm9taXNlPFByb3BlcnR5W10+IHsNCiAgICAgICAgY29uc3QgcHJvcHM6IFByb3BlcnR5W10gPSBbXTsNCg0KICAgICAgICAvLyBQw6FnaW5hIDENCiAgICAgICAgY29uc3QgaHRtbDEgPSBhd2FpdCB0aGlzLmxvYWRQYWdlKGJyb3dzZXIsIGJhc2Vab25lVXJsLCB0cnVlKTsNCiAgICAgICAgaWYgKCFodG1sMSkgew0KICAgICAgICAgICAgY29uc29sZS53YXJuKGBbSWRlYWxpc3RhXSBTaW4gYXJ0w61jdWxvcyBlbiAke2Jhc2Vab25lVXJsfWApOw0KICAgICAgICAgICAgcmV0dXJuIHByb3BzOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgcGFnZTFQcm9wcyA9IHRoaXMucGFyc2VJdGVtcyhodG1sMSwgem9uZXMsIHNlZW5VcmxzLCB6b25lTGFiZWwpOw0KICAgICAgICBwcm9wcy5wdXNoKC4uLnBhZ2UxUHJvcHMpOw0KDQogICAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5nZXRMYXN0UGFnZShodG1sMSk7DQogICAgICAgIGNvbnNvbGUubG9nKGBbSWRlYWxpc3RhXSAke2Jhc2Vab25lVXJsfSDihpIgJHtwYWdlMVByb3BzLmxlbmd0aH0gcHJvcHMgKHDDoWcgMS8ke2xhc3RQYWdlfSlgKTsNCg0KICAgICAgICAvLyBQw6FnaW5hcyAyLi5sYXN0UGFnZSAobcOheCA1IHBhcmEgZXZpdGFyIGRlbWFzaWFkYXMgcGV0aWNpb25lcykNCiAgICAgICAgY29uc3QgbWF4UGFnZXMgPSBNYXRoLm1pbihsYXN0UGFnZSwgNSk7DQogICAgICAgIGZvciAobGV0IHAgPSAyOyBwIDw9IG1heFBhZ2VzOyBwKyspIHsNCiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDE1MDAgKyBNYXRoLnJhbmRvbSgpICogMTUwMCk7DQogICAgICAgICAgICBjb25zdCBwYWdlVXJsID0gYCR7YmFzZVpvbmVVcmx9cGFnaW5hLSR7cH0uaHRtYDsNCiAgICAgICAgICAgIGNvbnN0IGh0bWxOID0gYXdhaXQgdGhpcy5sb2FkUGFnZShicm93c2VyLCBwYWdlVXJsLCBmYWxzZSk7DQogICAgICAgICAgICBpZiAoIWh0bWxOKSBicmVhazsNCg0KICAgICAgICAgICAgY29uc3QgcGFnZVByb3BzID0gdGhpcy5wYXJzZUl0ZW1zKGh0bWxOLCB6b25lcywgc2VlblVybHMsIHpvbmVMYWJlbCk7DQogICAgICAgICAgICBwcm9wcy5wdXNoKC4uLnBhZ2VQcm9wcyk7DQogICAgICAgICAgICBjb25zb2xlLmxvZyhgW0lkZWFsaXN0YV0gICBww6FnICR7cH0vJHtsYXN0UGFnZX0g4oaSICR7cGFnZVByb3BzLmxlbmd0aH0gcHJvcHMgYWRpY2lvbmFsZXNgKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBwcm9wczsNCiAgICB9DQp9DQo=","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\milanunciosScraper.ts","beforeExisted":true,"beforeHash":"4cee3c3fa4be46ad12e45f002a24002362bb929787e4c3c5d0428345fc03dd8d","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IGNocm9taXVtLCBCcm93c2VyLCBCcm93c2VyQ29udGV4dCB9IGZyb20gInBsYXl3cmlnaHQiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KDQovKioNCiAqIFNjcmFwZXIgcGFyYSBNaWxhbnVuY2lvcyDigJQgY2xhc2lmaWNhZG9zIGlubW9iaWxpYXJpb3MuDQogKg0KICogTWlsYW51bmNpb3MgZXMgdW5hIFNQQSBOZXh0LmpzIHF1ZSByZW5kZXJpemEgZWwgRE9NIHbDrWEgUmVhY3Q7DQogKiB1bmEgcGV0aWNpw7NuIEhUVFAgZGlyZWN0YSAoQ2hlZXJpbykgZGV2dWVsdmUgdW4gc2hlbGwgdmFjw61vLg0KICogRXN0YSBpbXBsZW1lbnRhY2nDs24gdXNhIFBsYXl3cmlnaHQgKENocm9taXVtIGhlYWRsZXNzKSBwYXJhIGVzcGVyYXIgbGENCiAqIGhpZHJhdGFjacOzbiBkZSBSZWFjdCB5IGV4dHJhZXIgbG9zIGFudW5jaW9zIHJlYWxlcy4NCiAqDQogKiBVUkw6ICBodHRwczovL3d3dy5taWxhbnVuY2lvcy5jb20vaW5tb2JpbGlhcmlhLz9kZW1hbmRhPW4mcG9ibGFjaW9uPXtub21icmV9WyZwYWdpbmE9Tl0NCiAqLw0KDQpjb25zdCBNQV9VQSA9DQogICAgIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzEuMC4wLjAgU2FmYXJpLzUzNy4zNiI7DQoNCmNvbnN0IE1BX1NURUFMVEggPSBgDQpPYmplY3QuZGVmaW5lUHJvcGVydHkobmF2aWdhdG9yLCAnd2ViZHJpdmVyJywgeyBnZXQ6ICgpID0+IHVuZGVmaW5lZCB9KTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICdsYW5ndWFnZXMnLCB7IGdldDogKCkgPT4gWydlcy1FUycsICdlcycsICdlbi1VUyddIH0pOw0KT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvciwgJ2hhcmR3YXJlQ29uY3VycmVuY3knLCB7IGdldDogKCkgPT4gOCB9KTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICdkZXZpY2VNZW1vcnknLCB7IGdldDogKCkgPT4gOCB9KTsNCndpbmRvdy5jaHJvbWUgPSB7IGFwcDogeyBpc0luc3RhbGxlZDogZmFsc2UgfSwgcnVudGltZToge30gfTsNCmA7DQoNCi8qKiBTZWxlY3RvciBlc3RhYmxlIGVuIE1pbGFudW5jaW9zIChkYXRhLXRlc3RpZCA+IGNsYXNlcyBjb24gaGFzaCBkZSBSZWFjdCkgKi8NCmNvbnN0IEFEX1NFTEVDVE9SID0NCiAgICAnW2RhdGEtdGVzdGlkPSJhZCJdLCBhcnRpY2xlW2NsYXNzKj0ibWEtQWQiXSwgbGlbY2xhc3MqPSJtYS1BZCJdLCAubWEtQWRDYXJkJzsNCg0KZXhwb3J0IGNsYXNzIE1pbGFudW5jaW9zU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyIHsNCiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQUdFUyA9IDM7DQogICAgcHJpdmF0ZSByZWFkb25seSBQQUdFX1RJTUVPVVQgPSAzNV8wMDA7DQoNCiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoImh0dHBzOi8vd3d3Lm1pbGFudW5jaW9zLmNvbSIsICJNaWxhbnVuY2lvcyIpOyB9DQoNCiAgICBhc3luYyBzY3JhcGUoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7DQogICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVab25lcygpOw0KICAgICAgICBjb25zdCB0YXJnZXRzID0gem9uZXMubGVuZ3RoID4gMA0KICAgICAgICAgICAgPyB6b25lcw0KICAgICAgICAgICAgOiBbeyBuYW1lOiAiTGzDrXJpYSIsIHNsdWc6ICJsbGlyaWEiIH0gYXMgKHR5cGVvZiB6b25lcylbMF1dOw0KDQogICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXTsNCiAgICAgICAgY29uc3Qgc2VlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTsNCg0KICAgICAgICBsZXQgYnJvd3NlcjogQnJvd3NlciB8IG51bGwgPSBudWxsOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgYnJvd3NlciA9IGF3YWl0IGNocm9taXVtLmxhdW5jaCh7DQogICAgICAgICAgICAgICAgaGVhZGxlc3M6IHRydWUsDQogICAgICAgICAgICAgICAgYXJnczogWw0KICAgICAgICAgICAgICAgICAgICAiLS1kaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkIiwNCiAgICAgICAgICAgICAgICAgICAgIi0tbm8tc2FuZGJveCIsDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtc2V0dWlkLXNhbmRib3giLA0KICAgICAgICAgICAgICAgICAgICAiLS1kaXNhYmxlLWRldi1zaG0tdXNhZ2UiLA0KICAgICAgICAgICAgICAgICAgICAiLS1sYW5nPWVzLUVTIiwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGZvciAoY29uc3Qgem9uZSBvZiB0YXJnZXRzKSB7DQogICAgICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdGhpcy5NQVhfUEFHRVM7IHBhZ2UrKykgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKHpvbmUubmFtZSwgcGFnZSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmxvYWRQYWdlKGJyb3dzZXIsIHVybCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghaHRtbCkgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gcHJvcGVydGllcy5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VIdG1sKGh0bWwsIHpvbmUsIHRhcmdldHMsIHNlZW5VcmxzLCBwcm9wZXJ0aWVzKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBwcm9wZXJ0aWVzLmxlbmd0aCAtIGJlZm9yZTsNCiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtNaWxhbnVuY2lvc10gJHt6b25lLm5hbWV9IHDDoWcgJHtwYWdlfSDihpIgJHtmb3VuZH0gYW51bmNpb3NgKTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBTaW4gcmVzdWx0YWRvcyBlbiBlc3RhIHDDoWdpbmE6IG5vIGhheSBtw6FzDQogICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PT0gMCkgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIFBhdXNhIGVkdWNhZGEgZW50cmUgem9uYXMgcGFyYSBldml0YXIgYmxvcXVlb3MNCiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMV81MDAgKyBNYXRoLnJhbmRvbSgpICogMV8wMDApKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtNaWxhbnVuY2lvc10gRXJyb3IgZ2VuZXJhbDogJHtlcnIubWVzc2FnZX1gKTsNCiAgICAgICAgfSBmaW5hbGx5IHsNCiAgICAgICAgICAgIGlmIChicm93c2VyKSBhd2FpdCBicm93c2VyLmNsb3NlKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlc3VsdHMocHJvcGVydGllcyk7DQogICAgfQ0KDQogICAgLy8g4pSA4pSA4pSAIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgICBwcml2YXRlIGJ1aWxkVXJsKHpvbmVOYW1lOiBzdHJpbmcsIHBhZ2U6IG51bWJlcik6IHN0cmluZyB7DQogICAgICAgIGNvbnN0IGJhc2UgPSBgJHt0aGlzLmJhc2VVcmx9L2lubW9iaWxpYXJpYS8/ZGVtYW5kYT1uJnBvYmxhY2lvbj0ke2VuY29kZVVSSUNvbXBvbmVudCh6b25lTmFtZSl9YDsNCiAgICAgICAgcmV0dXJuIHBhZ2UgPiAxID8gYCR7YmFzZX0mcGFnaW5hPSR7cGFnZX1gIDogYmFzZTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGFzeW5jIGxvYWRQYWdlKGJyb3dzZXI6IEJyb3dzZXIsIHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHsNCiAgICAgICAgbGV0IGNvbnRleHQ6IEJyb3dzZXJDb250ZXh0IHwgbnVsbCA9IG51bGw7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBjb250ZXh0ID0gYXdhaXQgYnJvd3Nlci5uZXdDb250ZXh0KHsNCiAgICAgICAgICAgICAgICB2aWV3cG9ydDogeyB3aWR0aDogMTM2NiwgaGVpZ2h0OiA3NjggfSwNCiAgICAgICAgICAgICAgICBsb2NhbGU6ICJlcy1FUyIsDQogICAgICAgICAgICAgICAgdGltZXpvbmVJZDogIkV1cm9wZS9NYWRyaWQiLA0KICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogTUFfVUEsDQogICAgICAgICAgICAgICAgZXh0cmFIVFRQSGVhZGVyczogew0KICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCwqLyo7cT0wLjgiLA0KICAgICAgICAgICAgICAgICAgICAiQWNjZXB0LUxhbmd1YWdlIjogImVzLUVTLGVzO3E9MC45IiwNCiAgICAgICAgICAgICAgICAgICAgIlJlZmVyZXIiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlLmVzLyIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtRmV0Y2gtRGVzdCI6ICJkb2N1bWVudCIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtRmV0Y2gtTW9kZSI6ICJuYXZpZ2F0ZSIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtRmV0Y2gtU2l0ZSI6ICJjcm9zcy1zaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIlNlYy1DSC1VQSI6ICciQ2hyb21pdW0iO3Y9IjEzMSIsICJHb29nbGUgQ2hyb21lIjt2PSIxMzEiLCAiTm90X0EgQnJhbmQiO3Y9IjI0IicsDQogICAgICAgICAgICAgICAgICAgICJTZWMtQ0gtVUEtTW9iaWxlIjogIj8wIiwNCiAgICAgICAgICAgICAgICAgICAgIlNlYy1DSC1VQS1QbGF0Zm9ybSI6ICciV2luZG93cyInLA0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgYXdhaXQgY29udGV4dC5hZGRJbml0U2NyaXB0KE1BX1NURUFMVEgpOw0KDQogICAgICAgICAgICBjb25zdCBwZyA9IGF3YWl0IGNvbnRleHQubmV3UGFnZSgpOw0KICAgICAgICAgICAgYXdhaXQgcGcuZ290byh1cmwsIHsgd2FpdFVudGlsOiAiZG9tY29udGVudGxvYWRlZCIsIHRpbWVvdXQ6IHRoaXMuUEFHRV9USU1FT1VUIH0pOw0KDQogICAgICAgICAgICAvLyBFc3BlcmFyIGEgcXVlIFJlYWN0IGhpZHJhdGUgbG9zIGFudW5jaW9zIChtw6F4IDEyIHMpDQogICAgICAgICAgICBhd2FpdCBwZw0KICAgICAgICAgICAgICAgIC53YWl0Rm9yU2VsZWN0b3IoQURfU0VMRUNUT1IsIHsgdGltZW91dDogMTJfMDAwIH0pDQogICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHsgLyogdGltZW91dCBhY2VwdGFibGU7IHByb2Nlc2Ftb3MgbG8gcXVlIGhheWEgKi8gfSk7DQoNCiAgICAgICAgICAgIC8vIEFjZXB0YXIgYmFubmVyIGRlIHByaXZhY2lkYWQgc2kgYXBhcmVjZQ0KICAgICAgICAgICAgYXdhaXQgcGcubG9jYXRvcigNCiAgICAgICAgICAgICAgICAiI0N5Ym90Q29va2llYm90RGlhbG9nQm9keUJ1dHRvbkFjY2VwdCwgIg0KICAgICAgICAgICAgICAgICsgIltpZCo9J2FjY2VwdC1jb29raWVzJ10sICINCiAgICAgICAgICAgICAgICArICJidXR0b246aGFzLXRleHQoJ0FjZXB0YXIgdG9kbycpLCAiDQogICAgICAgICAgICAgICAgKyAiYnV0dG9uOmhhcy10ZXh0KCdBY2VwdGFyJykiDQogICAgICAgICAgICApLmZpcnN0KCkuY2xpY2soeyB0aW1lb3V0OiAzXzAwMCwgZm9yY2U6IHRydWUgfSkuY2F0Y2goKCkgPT4geyB9KTsNCg0KICAgICAgICAgICAgLy8gQnJldmUgcGF1c2EgcGFyYSByZS1yZW5kZXJzIHBvc3QtY29va2llDQogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgODAwKSk7DQoNCiAgICAgICAgICAgIHJldHVybiBhd2FpdCBwZy5jb250ZW50KCk7DQogICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7DQogICAgICAgICAgICBjb25zb2xlLndhcm4oYFtNaWxhbnVuY2lvc10gRXJyb3IgY2FyZ2FuZG8gJHt1cmx9OiAke2Vyci5tZXNzYWdlfWApOw0KICAgICAgICAgICAgcmV0dXJuICIiOw0KICAgICAgICB9IGZpbmFsbHkgew0KICAgICAgICAgICAgaWYgKGNvbnRleHQpIGF3YWl0IGNvbnRleHQuY2xvc2UoKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHByaXZhdGUgcGFyc2VIdG1sKA0KICAgICAgICBodG1sOiBzdHJpbmcsDQogICAgICAgIHpvbmU6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5nZXRBY3RpdmVab25lcz4+WzBdLA0KICAgICAgICBhbGxab25lczogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmdldEFjdGl2ZVpvbmVzPj4sDQogICAgICAgIHNlZW5VcmxzOiBTZXQ8c3RyaW5nPiwNCiAgICAgICAgb3V0OiBQcm9wZXJ0eVtdDQogICAgKTogdm9pZCB7DQogICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7DQoNCiAgICAgICAgJChBRF9TRUxFQ1RPUikuZWFjaCgoX2ksIGVsKSA9PiB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIC8vIFTDrXR1bG8NCiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVUZXh0KCQoZWwpLmZpbmQoImgyLCBoMywgW2NsYXNzKj0ndGl0bGUnXSwgW2NsYXNzKj0nVGl0bGUnXSIpLmZpcnN0KCkudGV4dCgpKQ0KICAgICAgICAgICAgICAgICAgICB8fCAiUHJvcGllZGFkIjsNCg0KICAgICAgICAgICAgICAgIC8vIFByZWNpbw0KICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlVGV4dCA9ICQoZWwpLmZpbmQoIltjbGFzcyo9J3ByaWNlJ10sIFtjbGFzcyo9J1ByaWNlJ10sIFtjbGFzcyo9J3ByZWNpbyddIikuZmlyc3QoKS50ZXh0KCk7DQogICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnBhcnNlUHJpY2UocHJpY2VUZXh0KTsNCg0KICAgICAgICAgICAgICAgIC8vIFVSTCBkZWwgYW51bmNpbw0KICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9ICQoZWwpLmZpbmQoImFbaHJlZl0iKS5maXJzdCgpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBhbmNob3IuYXR0cigiaHJlZiIpIHx8ICIiOw0KICAgICAgICAgICAgICAgIGlmICghaHJlZikgcmV0dXJuOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFic1VybCA9IGhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpID8gaHJlZiA6IGAke3RoaXMuYmFzZVVybH0ke2hyZWZ9YDsNCg0KICAgICAgICAgICAgICAgIC8vIFViaWNhY2nDs24NCiAgICAgICAgICAgICAgICBjb25zdCBsb2NUZXh0ID0gdGhpcy5zYW5pdGl6ZVRleHQoDQogICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoDQogICAgICAgICAgICAgICAgICAgICAgICAiW2NsYXNzKj0nbG9jYXRpb24nXSwgW2NsYXNzKj0nTG9jYXRpb24nXSwgIg0KICAgICAgICAgICAgICAgICAgICAgICAgKyAiW2NsYXNzKj0nY2l0eSddLCBbY2xhc3MqPSdwb2JsYWNpb24nXSwgIg0KICAgICAgICAgICAgICAgICAgICAgICAgKyAiW2NsYXNzKj0nYWRkcmVzcyddLCBbY2xhc3MqPSdBZGRyZXNzJ10iDQogICAgICAgICAgICAgICAgICAgICkuZmlyc3QoKS50ZXh0KCkNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jVGV4dCB8fCB6b25lLm5hbWU7DQoNCiAgICAgICAgICAgICAgICAvLyBJbWFnZW4NCiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZV91cmwgPQ0KICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCJpbWciKS5maXJzdCgpLmF0dHIoInNyYyIpDQogICAgICAgICAgICAgICAgICAgIHx8ICQoZWwpLmZpbmQoImltZyIpLmZpcnN0KCkuYXR0cigiZGF0YS1zcmMiKQ0KICAgICAgICAgICAgICAgICAgICB8fCAiIjsNCg0KICAgICAgICAgICAgICAgIGlmIChwcmljZSA+IDAgJiYgIXNlZW5VcmxzLmhhcyhhYnNVcmwpKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIEZpbHRyYXIgcHJvcGllZGFkZXMgY3V5YSB1YmljYWNpw7NuIG5vIGNvcnJlc3BvbmRhIGEgbmluZ3VuYSB6b25hIGFjdGl2YQ0KICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRlY3RlZE11bmkgPSB0aGlzLmRldGVjdE11bmljaXBhbGl0eShsb2NhdGlvbiwgYWxsWm9uZXMsICIiKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXRlY3RlZE11bmkpIHJldHVybjsgLy8gRnVlcmEgZGUgem9uYXMgYWN0aXZhcyDigJQgb21pdGlyDQogICAgICAgICAgICAgICAgICAgIHNlZW5VcmxzLmFkZChhYnNVcmwpOw0KICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICBtdW5pY2lwYWxpdHk6IGRldGVjdGVkTXVuaSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X3R5cGU6IHRoaXMubm9ybWFsaXplVHlwZSh0aXRsZSksDQogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFic1VybCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsLA0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGNhdGNoIHsgLyogc2tpcCB0YXJqZXRhIG1hbGZvcm1hZGEgKi8gfQ0KICAgICAgICB9KTsNCiAgICB9DQp9DQo=","afterExisted":true,"afterHash":"d61fca31f3ec3dac5918d7c6de37b8014d6c05872e7d59d533a6c27421549b65","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IGNocm9taXVtLCBCcm93c2VyLCBCcm93c2VyQ29udGV4dCB9IGZyb20gInBsYXl3cmlnaHQiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KDQovKioNCiAqIFNjcmFwZXIgcGFyYSBNaWxhbnVuY2lvcyDigJQgY2xhc2lmaWNhZG9zIGlubW9iaWxpYXJpb3MuDQogKg0KICogTWlsYW51bmNpb3MgZXMgdW5hIFNQQSBOZXh0LmpzIHF1ZSByZW5kZXJpemEgZWwgRE9NIHbDrWEgUmVhY3Q7DQogKiB1bmEgcGV0aWNpw7NuIEhUVFAgZGlyZWN0YSAoQ2hlZXJpbykgZGV2dWVsdmUgdW4gc2hlbGwgdmFjw61vLg0KICogRXN0YSBpbXBsZW1lbnRhY2nDs24gdXNhIFBsYXl3cmlnaHQgKENocm9taXVtIGhlYWRsZXNzKSBwYXJhIGVzcGVyYXIgbGENCiAqIGhpZHJhdGFjacOzbiBkZSBSZWFjdCB5IGV4dHJhZXIgbG9zIGFudW5jaW9zIHJlYWxlcy4NCiAqDQogKiBVUkw6ICBodHRwczovL3d3dy5taWxhbnVuY2lvcy5jb20vaW5tb2JpbGlhcmlhLz9kZW1hbmRhPW4mcG9ibGFjaW9uPXtub21icmV9WyZwYWdpbmE9Tl0NCiAqLw0KDQpjb25zdCBNQV9VQSA9DQogICAgIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzEuMC4wLjAgU2FmYXJpLzUzNy4zNiI7DQoNCmNvbnN0IE1BX1NURUFMVEggPSBgDQpPYmplY3QuZGVmaW5lUHJvcGVydHkobmF2aWdhdG9yLCAnd2ViZHJpdmVyJywgeyBnZXQ6ICgpID0+IHVuZGVmaW5lZCB9KTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICdsYW5ndWFnZXMnLCB7IGdldDogKCkgPT4gWydlcy1FUycsICdlcycsICdlbi1VUyddIH0pOw0KT2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdmlnYXRvciwgJ2hhcmR3YXJlQ29uY3VycmVuY3knLCB7IGdldDogKCkgPT4gOCB9KTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuYXZpZ2F0b3IsICdkZXZpY2VNZW1vcnknLCB7IGdldDogKCkgPT4gOCB9KTsNCndpbmRvdy5jaHJvbWUgPSB7IGFwcDogeyBpc0luc3RhbGxlZDogZmFsc2UgfSwgcnVudGltZToge30gfTsNCmA7DQoNCi8qKiBTZWxlY3RvciBlc3RhYmxlIGVuIE1pbGFudW5jaW9zIChkYXRhLXRlc3RpZCA+IGNsYXNlcyBjb24gaGFzaCBkZSBSZWFjdCkgKi8NCmNvbnN0IEFEX1NFTEVDVE9SID0NCiAgICAnW2RhdGEtdGVzdGlkPSJhZCJdLCBhcnRpY2xlW2NsYXNzKj0ibWEtQWQiXSwgbGlbY2xhc3MqPSJtYS1BZCJdLCAubWEtQWRDYXJkJzsNCg0KZXhwb3J0IGNsYXNzIE1pbGFudW5jaW9zU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyIHsNCiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQUdFUyA9IDM7DQogICAgcHJpdmF0ZSByZWFkb25seSBQQUdFX1RJTUVPVVQgPSAzNV8wMDA7DQoNCiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoImh0dHBzOi8vd3d3Lm1pbGFudW5jaW9zLmNvbSIsICJNaWxhbnVuY2lvcyIpOyB9DQoNCiAgICBhc3luYyBzY3JhcGUoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7DQogICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVab25lcygpOw0KICAgICAgICBjb25zdCB0YXJnZXRzID0gem9uZXMubGVuZ3RoID4gMA0KICAgICAgICAgICAgPyB6b25lcw0KICAgICAgICAgICAgOiBbeyBuYW1lOiAiTGzDrXJpYSIsIHNsdWc6ICJsbGlyaWEiIH0gYXMgKHR5cGVvZiB6b25lcylbMF1dOw0KDQogICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXTsNCiAgICAgICAgY29uc3Qgc2VlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTsNCg0KICAgICAgICBsZXQgYnJvd3NlcjogQnJvd3NlciB8IG51bGwgPSBudWxsOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgYnJvd3NlciA9IGF3YWl0IGNocm9taXVtLmxhdW5jaCh7DQogICAgICAgICAgICAgICAgaGVhZGxlc3M6IHRydWUsDQogICAgICAgICAgICAgICAgYXJnczogWw0KICAgICAgICAgICAgICAgICAgICAiLS1kaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkIiwNCiAgICAgICAgICAgICAgICAgICAgIi0tbm8tc2FuZGJveCIsDQogICAgICAgICAgICAgICAgICAgICItLWRpc2FibGUtc2V0dWlkLXNhbmRib3giLA0KICAgICAgICAgICAgICAgICAgICAiLS1kaXNhYmxlLWRldi1zaG0tdXNhZ2UiLA0KICAgICAgICAgICAgICAgICAgICAiLS1sYW5nPWVzLUVTIiwNCiAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGZvciAoY29uc3Qgem9uZSBvZiB0YXJnZXRzKSB7DQogICAgICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdGhpcy5NQVhfUEFHRVM7IHBhZ2UrKykgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKHpvbmUubmFtZSwgem9uZS5zbHVnLCBwYWdlKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5sb2FkUGFnZShicm93c2VyLCB1cmwpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIWh0bWwpIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IHByb3BlcnRpZXMubGVuZ3RoOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlSHRtbChodG1sLCB6b25lLCB0YXJnZXRzLCBzZWVuVXJscywgcHJvcGVydGllcyk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gcHJvcGVydGllcy5sZW5ndGggLSBiZWZvcmU7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbTWlsYW51bmNpb3NdICR7em9uZS5uYW1lfSBww6FnICR7cGFnZX0g4oaSICR7Zm91bmR9IGFudW5jaW9zYCk7DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gU2luIHJlc3VsdGFkb3MgZW4gZXN0YSBww6FnaW5hOiBubyBoYXkgbcOhcw0KICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT09IDApIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBQYXVzYSBlZHVjYWRhIGVudHJlIHpvbmFzIHBhcmEgZXZpdGFyIGJsb3F1ZW9zDQogICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDFfNTAwICsgTWF0aC5yYW5kb20oKSAqIDFfMDAwKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7DQogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbTWlsYW51bmNpb3NdIEVycm9yIGdlbmVyYWw6ICR7ZXJyLm1lc3NhZ2V9YCk7DQogICAgICAgIH0gZmluYWxseSB7DQogICAgICAgICAgICBpZiAoYnJvd3NlcikgYXdhaXQgYnJvd3Nlci5jbG9zZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHRzKHByb3BlcnRpZXMpOw0KICAgIH0NCg0KICAgIC8vIOKUgOKUgOKUgCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogICAgcHJpdmF0ZSBidWlsZFVybCh6b25lTmFtZTogc3RyaW5nLCB6b25lU2x1Zzogc3RyaW5nLCBwYWdlOiBudW1iZXIpOiBzdHJpbmcgewogICAgICAgIGlmICh0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIpIHsKICAgICAgICAgICAgY29uc3QgcHJvdmluY2UgPSBbIm1vbmNvZmEiLCAibGEtdmFsbC1kdWl4byJdLmluY2x1ZGVzKHpvbmVTbHVnKSA/ICJjYXN0ZWxsb24iIDogInZhbGVuY2lhIjsKICAgICAgICAgICAgY29uc3QgYmFzZSA9IGAke3RoaXMuYmFzZVVybH0vYWxxdWlsZXItZGUtcGlzb3MtZW4tJHt6b25lU2x1Z30tJHtwcm92aW5jZX0vYDsKICAgICAgICAgICAgcmV0dXJuIHBhZ2UgPiAxID8gYCR7YmFzZX0/cGFnaW5hPSR7cGFnZX1gIDogYmFzZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYmFzZSA9IGAke3RoaXMuYmFzZVVybH0vaW5tb2JpbGlhcmlhLz9kZW1hbmRhPW4mcG9ibGFjaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHpvbmVOYW1lKX1gOwogICAgICAgIHJldHVybiBwYWdlID4gMSA/IGAke2Jhc2V9JnBhZ2luYT0ke3BhZ2V9YCA6IGJhc2U7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBhc3luYyBsb2FkUGFnZShicm93c2VyOiBCcm93c2VyLCB1cmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7DQogICAgICAgIGxldCBjb250ZXh0OiBCcm93c2VyQ29udGV4dCB8IG51bGwgPSBudWxsOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29udGV4dCA9IGF3YWl0IGJyb3dzZXIubmV3Q29udGV4dCh7DQogICAgICAgICAgICAgICAgdmlld3BvcnQ6IHsgd2lkdGg6IDEzNjYsIGhlaWdodDogNzY4IH0sDQogICAgICAgICAgICAgICAgbG9jYWxlOiAiZXMtRVMiLA0KICAgICAgICAgICAgICAgIHRpbWV6b25lSWQ6ICJFdXJvcGUvTWFkcmlkIiwNCiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IE1BX1VBLA0KICAgICAgICAgICAgICAgIGV4dHJhSFRUUEhlYWRlcnM6IHsNCiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsKi8qO3E9MC44IiwNCiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdC1MYW5ndWFnZSI6ICJlcy1FUyxlcztxPTAuOSIsDQogICAgICAgICAgICAgICAgICAgICJSZWZlcmVyIjogImh0dHBzOi8vd3d3Lmdvb2dsZS5lcy8iLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUZldGNoLURlc3QiOiAiZG9jdW1lbnQiLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUZldGNoLU1vZGUiOiAibmF2aWdhdGUiLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUZldGNoLVNpdGUiOiAiY3Jvc3Mtc2l0ZSIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtQ0gtVUEiOiAnIkNocm9taXVtIjt2PSIxMzEiLCAiR29vZ2xlIENocm9tZSI7dj0iMTMxIiwgIk5vdF9BIEJyYW5kIjt2PSIyNCInLA0KICAgICAgICAgICAgICAgICAgICAiU2VjLUNILVVBLU1vYmlsZSI6ICI/MCIsDQogICAgICAgICAgICAgICAgICAgICJTZWMtQ0gtVUEtUGxhdGZvcm0iOiAnIldpbmRvd3MiJywNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuYWRkSW5pdFNjcmlwdChNQV9TVEVBTFRIKTsNCg0KICAgICAgICAgICAgY29uc3QgcGcgPSBhd2FpdCBjb250ZXh0Lm5ld1BhZ2UoKTsNCiAgICAgICAgICAgIGF3YWl0IHBnLmdvdG8odXJsLCB7IHdhaXRVbnRpbDogImRvbWNvbnRlbnRsb2FkZWQiLCB0aW1lb3V0OiB0aGlzLlBBR0VfVElNRU9VVCB9KTsNCg0KICAgICAgICAgICAgLy8gRXNwZXJhciBhIHF1ZSBSZWFjdCBoaWRyYXRlIGxvcyBhbnVuY2lvcyAobcOheCAxMiBzKQ0KICAgICAgICAgICAgYXdhaXQgcGcNCiAgICAgICAgICAgICAgICAud2FpdEZvclNlbGVjdG9yKEFEX1NFTEVDVE9SLCB7IHRpbWVvdXQ6IDEyXzAwMCB9KQ0KICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7IC8qIHRpbWVvdXQgYWNlcHRhYmxlOyBwcm9jZXNhbW9zIGxvIHF1ZSBoYXlhICovIH0pOw0KDQogICAgICAgICAgICAvLyBBY2VwdGFyIGJhbm5lciBkZSBwcml2YWNpZGFkIHNpIGFwYXJlY2UNCiAgICAgICAgICAgIGF3YWl0IHBnLmxvY2F0b3IoDQogICAgICAgICAgICAgICAgIiNDeWJvdENvb2tpZWJvdERpYWxvZ0JvZHlCdXR0b25BY2NlcHQsICINCiAgICAgICAgICAgICAgICArICJbaWQqPSdhY2NlcHQtY29va2llcyddLCAiDQogICAgICAgICAgICAgICAgKyAiYnV0dG9uOmhhcy10ZXh0KCdBY2VwdGFyIHRvZG8nKSwgIg0KICAgICAgICAgICAgICAgICsgImJ1dHRvbjpoYXMtdGV4dCgnQWNlcHRhcicpIg0KICAgICAgICAgICAgKS5maXJzdCgpLmNsaWNrKHsgdGltZW91dDogM18wMDAsIGZvcmNlOiB0cnVlIH0pLmNhdGNoKCgpID0+IHsgfSk7DQoNCiAgICAgICAgICAgIC8vIEJyZXZlIHBhdXNhIHBhcmEgcmUtcmVuZGVycyBwb3N0LWNvb2tpZQ0KICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDgwMCkpOw0KDQogICAgICAgICAgICByZXR1cm4gYXdhaXQgcGcuY29udGVudCgpOw0KICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkgew0KICAgICAgICAgICAgY29uc29sZS53YXJuKGBbTWlsYW51bmNpb3NdIEVycm9yIGNhcmdhbmRvICR7dXJsfTogJHtlcnIubWVzc2FnZX1gKTsNCiAgICAgICAgICAgIHJldHVybiAiIjsNCiAgICAgICAgfSBmaW5hbGx5IHsNCiAgICAgICAgICAgIGlmIChjb250ZXh0KSBhd2FpdCBjb250ZXh0LmNsb3NlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwcml2YXRlIHBhcnNlSHRtbCgNCiAgICAgICAgaHRtbDogc3RyaW5nLA0KICAgICAgICB6b25lOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHRoaXMuZ2V0QWN0aXZlWm9uZXM+PlswXSwNCiAgICAgICAgYWxsWm9uZXM6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5nZXRBY3RpdmVab25lcz4+LA0KICAgICAgICBzZWVuVXJsczogU2V0PHN0cmluZz4sDQogICAgICAgIG91dDogUHJvcGVydHlbXQ0KICAgICk6IHZvaWQgew0KICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpOw0KDQogICAgICAgICQoQURfU0VMRUNUT1IpLmVhY2goKF9pLCBlbCkgPT4gew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAvLyBUw610dWxvDQogICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNhbml0aXplVGV4dCgkKGVsKS5maW5kKCJoMiwgaDMsIFtjbGFzcyo9J3RpdGxlJ10sIFtjbGFzcyo9J1RpdGxlJ10iKS5maXJzdCgpLnRleHQoKSkNCiAgICAgICAgICAgICAgICAgICAgfHwgIlByb3BpZWRhZCI7DQoNCiAgICAgICAgICAgICAgICAvLyBQcmVjaW8NCiAgICAgICAgICAgICAgICBjb25zdCBwcmljZVRleHQgPSAkKGVsKS5maW5kKCJbY2xhc3MqPSdwcmljZSddLCBbY2xhc3MqPSdQcmljZSddLCBbY2xhc3MqPSdwcmVjaW8nXSIpLmZpcnN0KCkudGV4dCgpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5wYXJzZVByaWNlKHByaWNlVGV4dCk7DQoNCiAgICAgICAgICAgICAgICAvLyBVUkwgZGVsIGFudW5jaW8NCiAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSAkKGVsKS5maW5kKCJhW2hyZWZdIikuZmlyc3QoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gYW5jaG9yLmF0dHIoImhyZWYiKSB8fCAiIjsNCiAgICAgICAgICAgICAgICBpZiAoIWhyZWYpIHJldHVybjsNCiAgICAgICAgICAgICAgICBjb25zdCBhYnNVcmwgPSBocmVmLnN0YXJ0c1dpdGgoImh0dHAiKSA/IGhyZWYgOiBgJHt0aGlzLmJhc2VVcmx9JHtocmVmfWA7DQoNCiAgICAgICAgICAgICAgICAvLyBVYmljYWNpw7NuDQogICAgICAgICAgICAgICAgY29uc3QgbG9jVGV4dCA9IHRoaXMuc2FuaXRpemVUZXh0KA0KICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKA0KICAgICAgICAgICAgICAgICAgICAgICAgIltjbGFzcyo9J2xvY2F0aW9uJ10sIFtjbGFzcyo9J0xvY2F0aW9uJ10sICINCiAgICAgICAgICAgICAgICAgICAgICAgICsgIltjbGFzcyo9J2NpdHknXSwgW2NsYXNzKj0ncG9ibGFjaW9uJ10sICINCiAgICAgICAgICAgICAgICAgICAgICAgICsgIltjbGFzcyo9J2FkZHJlc3MnXSwgW2NsYXNzKj0nQWRkcmVzcyddIg0KICAgICAgICAgICAgICAgICAgICApLmZpcnN0KCkudGV4dCgpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGxvY1RleHQgfHwgem9uZS5uYW1lOw0KDQogICAgICAgICAgICAgICAgLy8gSW1hZ2VuDQogICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VfdXJsID0NCiAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgiaW1nIikuZmlyc3QoKS5hdHRyKCJzcmMiKQ0KICAgICAgICAgICAgICAgICAgICB8fCAkKGVsKS5maW5kKCJpbWciKS5maXJzdCgpLmF0dHIoImRhdGEtc3JjIikNCiAgICAgICAgICAgICAgICAgICAgfHwgIiI7DQoNCiAgICAgICAgICAgICAgICBpZiAocHJpY2UgPiAwICYmICFzZWVuVXJscy5oYXMoYWJzVXJsKSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBGaWx0cmFyIHByb3BpZWRhZGVzIGN1eWEgdWJpY2FjacOzbiBubyBjb3JyZXNwb25kYSBhIG5pbmd1bmEgem9uYSBhY3RpdmENCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWRNdW5pID0gdGhpcy5kZXRlY3RNdW5pY2lwYWxpdHkobG9jYXRpb24sIGFsbFpvbmVzLCAiIik7DQogICAgICAgICAgICAgICAgICAgIGlmICghZGV0ZWN0ZWRNdW5pKSByZXR1cm47IC8vIEZ1ZXJhIGRlIHpvbmFzIGFjdGl2YXMg4oCUIG9taXRpcg0KICAgICAgICAgICAgICAgICAgICBzZWVuVXJscy5hZGQoYWJzVXJsKTsNCiAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsDQogICAgICAgICAgICAgICAgICAgICAgICBwcmljZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgbXVuaWNpcGFsaXR5OiBkZXRlY3RlZE11bmksCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X3R5cGU6IHRoaXMubm9ybWFsaXplVHlwZSh0aXRsZSksCiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbl90eXBlOiB0aGlzLl9vcGVyYXRpb25UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFic1VybCwKICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZU5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV91cmwsDQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gY2F0Y2ggeyAvKiBza2lwIHRhcmpldGEgbWFsZm9ybWFkYSAqLyB9DQogICAgICAgIH0pOw0KICAgIH0NCn0NCg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\pisosScraper.ts","beforeExisted":true,"beforeHash":"c2e79a816b7d5a0bbb31ece95b0711bbc53218cc8c87207aa274dc0ab7935152","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsKaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICIuLi90eXBlcy9wcm9wZXJ0eSI7CmltcG9ydCB7IEJhc2VTY3JhcGVyIH0gZnJvbSAiLi9iYXNlU2NyYXBlciI7CmltcG9ydCB7IFZBTEVOQ0lBX0RJU1RSSUNUUyB9IGZyb20gIi4uL2NvbmZpZy92YWxlbmNpYURpc3RyaWN0cyI7CmltcG9ydCB7IFZhbGVuY2lhRGlzdHJpY3RNb2RlbCB9IGZyb20gIi4uL21vZGVscy92YWxlbmNpYURpc3RyaWN0TW9kZWwiOwoKY29uc3QgTUFYX1BBR0VTID0gNTsgLy8gTcOheGltbyBkZSBww6FnaW5hcyBwb3Igem9uYQovKiogVGlwb3MgZGUgcHJvcGllZGFkIGNvbiBzdXMgcGF0aCBlbiBwaXNvcy5jb20gKi8KY29uc3QgUElTT19UWVBFUyA9IFsicGlzb3MiLCAiY2FzYXMiLCAiY2hhbGV0cyJdIGFzIGNvbnN0OwoKLy8gQ2FjaMOpIGRlIFVSTHMgYmFzZSBxdWUgZGV2b2x2aWVyb24gNDA0IOKAlCBzZSBvbWl0ZW4gZHVyYW50ZSA0OCBoIHBhcmEgbm8KLy8gZGVzcGVyZGljaWFyIHBldGljaW9uZXMgZW4gem9uYXMgcXVlIG5vIGV4aXN0ZW4gZW4gcGlzb3MuY29tLgpjb25zdCBwaXNvczQwNENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8gYmFzZVVybCDihpIgZXhwaXJhY2nDs24gKG1zIGVwb2NoKQpjb25zdCBQSVNPU180MDRfVFRMID0gNDggKiA2MCAqIDYwICogMTAwMDsgICAgICAgLy8gNDggaG9yYXMKCmV4cG9ydCBjbGFzcyBQaXNvc1NjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlciB7CiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCJodHRwczovL3d3dy5waXNvcy5jb20iLCAiUGlzb3MuY29tIik7IH0KICBwcml2YXRlIGFzeW5jIGdldFZhbGVuY2lhRGlzdHJpY3RUYXJnZXRzKCk6IFByb21pc2U8QXJyYXk8eyBzbHVnOiBzdHJpbmc7IHpvbmVOYW1lOiBzdHJpbmcgfT4+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBWYWxlbmNpYURpc3RyaWN0TW9kZWwuZmluZEFjdGl2ZSgpOwogICAgICBjb25zdCBkYXRhID0gcm93cwogICAgICAgIC5maWx0ZXIociA9PiAhIXIucGlzb3Nfc2x1ZykKICAgICAgICAubWFwKHIgPT4gKHsgc2x1Zzogci5waXNvc19zbHVnLCB6b25lTmFtZTogYCR7ci5uYW1lfSwgVmFsZW5jaWFgIH0pKTsKICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgcmV0dXJuIGRhdGE7CiAgICB9IGNhdGNoIHsgLyogZmFsbGJhY2sgKi8gfQogICAgcmV0dXJuIFZBTEVOQ0lBX0RJU1RSSUNUUy5tYXAoZCA9PiAoeyBzbHVnOiBkLnBpc29zLCB6b25lTmFtZTogYCR7ZC5uYW1lfSwgVmFsZW5jaWFgIH0pKTsKICB9CgogIGFzeW5jIHNjcmFwZSgpOiBQcm9taXNlPFByb3BlcnR5W10+IHsKICAgIC8vIFVzYSBnZXRBY3RpdmVab25lcygpIHBhcmEgcmVzcGV0YXIgZWwgem9uZSBvdmVycmlkZSAoc2NyYXBpbmcgcG9yIHpvbmEpCiAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsKICAgIGxldCB0YXJnZXRzOiBBcnJheTx7IGJhc2VVcmw6IHN0cmluZzsgem9uZU5hbWU6IHN0cmluZyB9PiA9IFtdOwoKICAgIGNvbnN0IHR5cGVzRm9yT3BlcmF0aW9uID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gKFsicGlzb3MiXSBhcyBjb25zdCkgOiBQSVNPX1RZUEVTOwogICAgaWYgKHpvbmVzLmxlbmd0aCA+IDApIHsKICAgICAgZm9yIChjb25zdCB6IG9mIHpvbmVzKSB7CiAgICAgICAgY29uc3QgZGlzdHJpY3RTbHVncyA9IHouc2x1ZyA9PT0gInZhbGVuY2lhIiA/IGF3YWl0IHRoaXMuZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMoKSA6IG51bGw7CiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzRm9yT3BlcmF0aW9uKSB7CiAgICAgICAgICBpZiAoZGlzdHJpY3RTbHVncykgewogICAgICAgICAgICBmb3IgKGNvbnN0IGRpc3RyaWN0IG9mIGRpc3RyaWN0U2x1Z3MpIHsKICAgICAgICAgICAgICBjb25zdCBkaXN0cmljdExvY2F0aW9uU2x1ZyA9IGRpc3RyaWN0LnNsdWcucmVwbGFjZSgvXnBpc29zLS8sICIiKTsKICAgICAgICAgICAgICBjb25zdCBkaXN0cmljdFR5cGVTbHVnID0gdHlwZSA9PT0gInBpc29zIiA/IGRpc3RyaWN0LnNsdWcgOiBgJHt0eXBlfS0ke2Rpc3RyaWN0TG9jYXRpb25TbHVnfWA7CiAgICAgICAgICAgICAgY29uc3Qgb3BQYXRoID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gImFscXVpbGVyIiA6ICJ2ZW50YSI7CiAgICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHsgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wUGF0aH0vJHtkaXN0cmljdFR5cGVTbHVnfS9gLCB6b25lTmFtZTogZGlzdHJpY3Quem9uZU5hbWUgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIHBpc29zX3NsdWcgc2UgdXNhIHPDs2xvIHBhcmEgZWwgdGlwbyBwaXNvcyAocHVlZGUgc2VyIHBlcnNvbmFsaXphZG8sIGVqOiAicGlzb3MtcmliYS1yb2phLWRlLXR1cmlhIikKICAgICAgICAgICAgLy8gUGFyYSBjYXNhcy9jaGFsZXRzIGRlcml2YW1vcyBlbCBzbHVnIGRlIGxhIHBhcnRlIGRlIGxvY2FsaWRhZCBkZSBwaXNvc19zbHVnCiAgICAgICAgICAgIC8vIChlajogInBpc29zLXJpYmEtcm9qYS1kZS10dXJpYSIg4oaSICJjYXNhcy1yaWJhLXJvamEtZGUtdHVyaWEiKQogICAgICAgICAgICBjb25zdCBsb2NhdGlvblNsdWcgPSB6LnBpc29zX3NsdWcgPyB6LnBpc29zX3NsdWcucmVwbGFjZSgvXnBpc29zLS8sICIiKSA6IHouc2x1ZzsKICAgICAgICAgICAgY29uc3Qgc2x1ZyA9ICh0eXBlID09PSAicGlzb3MiICYmIHoucGlzb3Nfc2x1ZykgPyB6LnBpc29zX3NsdWcgOiBgJHt0eXBlfS0ke2xvY2F0aW9uU2x1Z31gOwogICAgICAgICAgICBjb25zdCBvcFBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiYWxxdWlsZXIiIDogInZlbnRhIjsKICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHsgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wUGF0aH0vJHtzbHVnfS9gLCB6b25lTmFtZTogei5uYW1lIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzRm9yT3BlcmF0aW9uKSB7CiAgICAgICAgY29uc3Qgb3BQYXRoID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gImFscXVpbGVyIiA6ICJ2ZW50YSI7CiAgICAgICAgdGFyZ2V0cy5wdXNoKHsgYmFzZVVybDogYCR7dGhpcy5iYXNlVXJsfS8ke29wUGF0aH0vJHt0eXBlfS1sbGlyaWEvYCwgem9uZU5hbWU6ICJMbMOtcmlhIiB9KTsKICAgICAgfQogICAgfQoKICAgIGNvbnN0IGFsbDogUHJvcGVydHlbXSA9IFtdOwogICAgY29uc3Qgc2VlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTsKCiAgICBmb3IgKGNvbnN0IHsgYmFzZVVybCwgem9uZU5hbWUgfSBvZiB0YXJnZXRzKSB7CiAgICAgIC8vIFNhbHRhciB6b25hcyBjYWNoZWFkYXMgY29tbyA0MDQgaGFzdGEgcXVlIGV4cGlyZSBlbCBUVEwKICAgICAgY29uc3QgYmxvY2tlZDQwNFVudGlsID0gcGlzb3M0MDRDYWNoZS5nZXQoYmFzZVVybCk7CiAgICAgIGlmIChibG9ja2VkNDA0VW50aWwgJiYgRGF0ZS5ub3coKSA8IGJsb2NrZWQ0MDRVbnRpbCkgewogICAgICAgIGNvbnN0IHJlbWFpbkhycyA9IE1hdGguY2VpbCgoYmxvY2tlZDQwNFVudGlsIC0gRGF0ZS5ub3coKSkgLyAzNjAwMDAwKTsKICAgICAgICBjb25zb2xlLmxvZyhgW1Bpc29zLmNvbV0gJHtiYXNlVXJsfSBzaW4gcmVzdWx0YWRvcyBjb25vY2lkb3MsIG9taXRpZW5kbyAoJHtyZW1haW5IcnN9aCByZXN0YW50ZXMpYCk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGxldCBwYWdlQ291bnQgPSAwOwoKICAgICAgZm9yIChsZXQgcGFnZU51bSA9IDE7IHBhZ2VOdW0gPD0gTUFYX1BBR0VTOyBwYWdlTnVtKyspIHsKICAgICAgICAvLyBQaXNvcy5jb20gdXNhID9wYWdpbmE9TiBhIHBhcnRpciBkZSBsYSBww6FnaW5hIDIKICAgICAgICBjb25zdCBwYWdlVXJsID0gcGFnZU51bSA9PT0gMSA/IGJhc2VVcmwgOiBgJHtiYXNlVXJsfT9wYWdpbmE9JHtwYWdlTnVtfWA7CiAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZmV0Y2hIdG1sKHBhZ2VVcmwpOwogICAgICAgIGlmICghaHRtbCkgewogICAgICAgICAgLy8gU2kgbGEgcHJpbWVyYSBww6FnaW5hIGRhIDQwNCB1IG90cm8gZXJyb3IsIGNhY2hlYXIgbGEgVVJMIGJhc2UgNDggaAogICAgICAgICAgaWYgKHBhZ2VOdW0gPT09IDEpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYFtQaXNvcy5jb21dIENhY2hlYW5kbyAke2Jhc2VVcmx9IGNvbW8gNDA0IGR1cmFudGUgNDhoYCk7CiAgICAgICAgICAgIHBpc29zNDA0Q2FjaGUuc2V0KGJhc2VVcmwsIERhdGUubm93KCkgKyBQSVNPU180MDRfVFRMKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTsKICAgICAgICBsZXQgZm91bmQgPSAwOwoKICAgICAgICAvLyBQaXNvcy5jb20gMjAyNDogY2FyZHMgY29uIGNsYXNlIGFkLXByZXZpZXcgbyBsaS5hZC1wcmV2aWV3LWl0ZW0KICAgICAgICAkKCJbY2xhc3MqPSdhZC1wcmV2aWV3J10sIC5hZC1pdGVtLCBhcnRpY2xlLCBsaVtjbGFzcyo9J2xpc3QtaXRlbSddIikuZWFjaCgoX2ksIGVsKSA9PiB7CiAgICAgICAgICBjb25zdCBsaW5rRWwgPSAkKGVsKS5maW5kKCJhW2hyZWYqPScvY29tcHJhci8nXSwgYVtocmVmKj0nL2FscXVpbGVyLyddLCBhW2hyZWYqPScvYW51bmNpb19pbm1vYmlsaWFyaWEvJ10iKS5maXJzdCgpOwogICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnNhbml0aXplVGV4dCgKICAgICAgICAgICAgbGlua0VsLnRleHQoKS50cmltKCkuc3BsaXQoIlxuIilbMF0gfHwKICAgICAgICAgICAgJChlbCkuZmluZCgiaDIsIGgzLCBbY2xhc3MqPSd0aXRsZSddIikuZmlyc3QoKS50ZXh0KCkgfHwKICAgICAgICAgICAgYFByb3BpZWRhZCBlbiAke3pvbmVOYW1lfWAKICAgICAgICAgICk7CiAgICAgICAgICBjb25zdCBwcmljZVJhdyA9ICQoZWwpLmZpbmQoIltjbGFzcyo9J3ByaWNlJ10sIC5wcmljZSwgW2NsYXNzKj0nUHJpY2UnXSIpLmZpcnN0KCkudGV4dCgpOwogICAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnBhcnNlUHJpY2UocHJpY2VSYXcpOwogICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmtFbC5hdHRyKCJocmVmIikgfHwgJChlbCkuZmluZCgiYVtocmVmXSIpLmZpcnN0KCkuYXR0cigiaHJlZiIpIHx8ICIiOwogICAgICAgICAgaWYgKCFocmVmIHx8ICFwcmljZSkgcmV0dXJuOwogICAgICAgICAgY29uc3QgdXJsMiA9IGhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpID8gaHJlZiA6IGAke3RoaXMuYmFzZVVybH0ke2hyZWZ9YDsKICAgICAgICAgIGlmIChzZWVuVXJscy5oYXModXJsMikpIHJldHVybjsKICAgICAgICAgIHNlZW5VcmxzLmFkZCh1cmwyKTsKICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5zYW5pdGl6ZVRleHQoJChlbCkuZmluZCgiLmxvY2F0aW9uLCBbY2xhc3MqPSdsb2NhdGlvbiddIikuZmlyc3QoKS50ZXh0KCkgfHwgem9uZU5hbWUpOwogICAgICAgICAgY29uc3Qgcm9vbXMgPSBwYXJzZUludCgkKGVsKS5maW5kKCJbY2xhc3MqPSdoYWInXSwgW2NsYXNzKj0ncm9vbSddIikuZmlyc3QoKS50ZXh0KCkpIHx8IDA7CiAgICAgICAgICBjb25zdCBzaXplX20yID0gcGFyc2VJbnQoJChlbCkuZmluZCgiW2NsYXNzKj0nbTInXSwgW2NsYXNzKj0nbWV0cm9zJ10iKS5maXJzdCgpLnRleHQoKSkgfHwgMDsKICAgICAgICAgIGNvbnN0IGltYWdlX3VybCA9ICQoZWwpLmZpbmQoImltZyIpLmF0dHIoInNyYyIpIHx8ICQoZWwpLmZpbmQoImltZyIpLmF0dHIoImRhdGEtc3JjIikgfHwgIiI7CiAgICAgICAgICBhbGwucHVzaCh7CiAgICAgICAgICAgIHRpdGxlLCBwcmljZSwgbG9jYXRpb24sCiAgICAgICAgICAgIG11bmljaXBhbGl0eTogdGhpcy5kZXRlY3RNdW5pY2lwYWxpdHkobG9jYXRpb24gKyAiICIgKyB6b25lTmFtZSwgem9uZXMsIHpvbmVOYW1lKSwKICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKHRpdGxlKSwKICAgICAgICAgICAgb3BlcmF0aW9uX3R5cGU6IHRoaXMuX29wZXJhdGlvblR5cGUsCiAgICAgICAgICAgIHJvb21zLCBzaXplX20yLCB1cmw6IHVybDIsIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLCBpbWFnZV91cmwsCiAgICAgICAgICB9KTsKICAgICAgICAgIGZvdW5kKys7CiAgICAgICAgfSk7CgogICAgICAgIHBhZ2VDb3VudCsrOwogICAgICAgIGlmIChmb3VuZCA8IDMpIGJyZWFrOyAvLyBQcm9iYWJsZSDDumx0aW1hIHDDoWdpbmEKICAgICAgfQoKICAgICAgY29uc29sZS5sb2coYFske3RoaXMuc291cmNlTmFtZX1dICR7em9uZU5hbWV9OiAke3BhZ2VDb3VudH0gcMOhZ2luYXMsICR7c2VlblVybHMuc2l6ZX0gw7puaWNvcyBoYXN0YSBhaG9yYWApOwogICAgfQoKICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzdWx0cyhhbGwpOwogIH0KCn0KCgo=","afterExisted":true,"afterHash":"c9ef7e8360aff03ea41018a8b3949a4f0b81d8c02d6451485d3af1f5f059ebbc","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsKaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICIuLi90eXBlcy9wcm9wZXJ0eSI7CmltcG9ydCB7IEJhc2VTY3JhcGVyIH0gZnJvbSAiLi9iYXNlU2NyYXBlciI7CmltcG9ydCB7IFZBTEVOQ0lBX0RJU1RSSUNUUyB9IGZyb20gIi4uL2NvbmZpZy92YWxlbmNpYURpc3RyaWN0cyI7CmltcG9ydCB7IFZhbGVuY2lhRGlzdHJpY3RNb2RlbCB9IGZyb20gIi4uL21vZGVscy92YWxlbmNpYURpc3RyaWN0TW9kZWwiOwoKY29uc3QgTUFYX1BBR0VTID0gNTsgLy8gTcOheGltbyBkZSBww6FnaW5hcyBwb3Igem9uYQovKiogVGlwb3MgZGUgcHJvcGllZGFkIGNvbiBzdXMgcGF0aCBlbiBwaXNvcy5jb20gKi8KY29uc3QgUElTT19UWVBFUyA9IFsicGlzb3MiLCAiY2FzYXMiLCAiY2hhbGV0cyJdIGFzIGNvbnN0OwoKLy8gQ2FjaMOpIGRlIFVSTHMgYmFzZSBxdWUgZGV2b2x2aWVyb24gNDA0IOKAlCBzZSBvbWl0ZW4gZHVyYW50ZSA0OCBoIHBhcmEgbm8KLy8gZGVzcGVyZGljaWFyIHBldGljaW9uZXMgZW4gem9uYXMgcXVlIG5vIGV4aXN0ZW4gZW4gcGlzb3MuY29tLgpjb25zdCBwaXNvczQwNENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8gYmFzZVVybCDihpIgZXhwaXJhY2nDs24gKG1zIGVwb2NoKQpjb25zdCBQSVNPU180MDRfVFRMID0gNDggKiA2MCAqIDYwICogMTAwMDsgICAgICAgLy8gNDggaG9yYXMKCmV4cG9ydCBjbGFzcyBQaXNvc1NjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlciB7CiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCJodHRwczovL3d3dy5waXNvcy5jb20iLCAiUGlzb3MuY29tIik7IH0KICBwcml2YXRlIGFzeW5jIGdldFZhbGVuY2lhRGlzdHJpY3RUYXJnZXRzKCk6IFByb21pc2U8QXJyYXk8eyBzbHVnOiBzdHJpbmc7IHpvbmVOYW1lOiBzdHJpbmcgfT4+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBWYWxlbmNpYURpc3RyaWN0TW9kZWwuZmluZEFsbCgpOwogICAgICBpZiAocm93cy5sZW5ndGggPiAwKSByZXR1cm4gcm93cwogICAgICAgIC5maWx0ZXIociA9PiByLmFjdGl2ZSAhPT0gMCAmJiAhIXIucGlzb3Nfc2x1ZykKICAgICAgICAubWFwKHIgPT4gKHsgc2x1Zzogci5waXNvc19zbHVnLCB6b25lTmFtZTogYCR7ci5uYW1lfSwgVmFsZW5jaWFgIH0pKTsKICAgIH0gY2F0Y2ggeyAvKiBmYWxsYmFjayAqLyB9CiAgICByZXR1cm4gVkFMRU5DSUFfRElTVFJJQ1RTLm1hcChkID0+ICh7IHNsdWc6IGQucGlzb3MsIHpvbmVOYW1lOiBgJHtkLm5hbWV9LCBWYWxlbmNpYWAgfSkpOwogIH0KCiAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gewogICAgLy8gVXNhIGdldEFjdGl2ZVpvbmVzKCkgcGFyYSByZXNwZXRhciBlbCB6b25lIG92ZXJyaWRlIChzY3JhcGluZyBwb3Igem9uYSkKICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVab25lcygpOwogICAgbGV0IHRhcmdldHM6IEFycmF5PHsgYmFzZVVybDogc3RyaW5nOyB6b25lTmFtZTogc3RyaW5nIH0+ID0gW107CgogICAgY29uc3QgdHlwZXNGb3JPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAoWyJwaXNvcyJdIGFzIGNvbnN0KSA6IFBJU09fVFlQRVM7CiAgICBpZiAoem9uZXMubGVuZ3RoID4gMCkgewogICAgICBmb3IgKGNvbnN0IHogb2Ygem9uZXMpIHsKICAgICAgICBjb25zdCBkaXN0cmljdFNsdWdzID0gei5zbHVnID09PSAidmFsZW5jaWEiID8gYXdhaXQgdGhpcy5nZXRWYWxlbmNpYURpc3RyaWN0VGFyZ2V0cygpIDogbnVsbDsKICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXNGb3JPcGVyYXRpb24pIHsKICAgICAgICAgIGlmIChkaXN0cmljdFNsdWdzKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgZGlzdHJpY3Qgb2YgZGlzdHJpY3RTbHVncykgewogICAgICAgICAgICAgIGNvbnN0IGRpc3RyaWN0TG9jYXRpb25TbHVnID0gZGlzdHJpY3Quc2x1Zy5yZXBsYWNlKC9ecGlzb3MtLywgIiIpOwogICAgICAgICAgICAgIGNvbnN0IGRpc3RyaWN0VHlwZVNsdWcgPSB0eXBlID09PSAicGlzb3MiID8gZGlzdHJpY3Quc2x1ZyA6IGAke3R5cGV9LSR7ZGlzdHJpY3RMb2NhdGlvblNsdWd9YDsKICAgICAgICAgICAgICBjb25zdCBvcFBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiYWxxdWlsZXIiIDogInZlbnRhIjsKICAgICAgICAgICAgICB0YXJnZXRzLnB1c2goeyBiYXNlVXJsOiBgJHt0aGlzLmJhc2VVcmx9LyR7b3BQYXRofS8ke2Rpc3RyaWN0VHlwZVNsdWd9L2AsIHpvbmVOYW1lOiBkaXN0cmljdC56b25lTmFtZSB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcGlzb3Nfc2x1ZyBzZSB1c2Egc8OzbG8gcGFyYSBlbCB0aXBvIHBpc29zIChwdWVkZSBzZXIgcGVyc29uYWxpemFkbywgZWo6ICJwaXNvcy1yaWJhLXJvamEtZGUtdHVyaWEiKQogICAgICAgICAgICAvLyBQYXJhIGNhc2FzL2NoYWxldHMgZGVyaXZhbW9zIGVsIHNsdWcgZGUgbGEgcGFydGUgZGUgbG9jYWxpZGFkIGRlIHBpc29zX3NsdWcKICAgICAgICAgICAgLy8gKGVqOiAicGlzb3MtcmliYS1yb2phLWRlLXR1cmlhIiDihpIgImNhc2FzLXJpYmEtcm9qYS1kZS10dXJpYSIpCiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uU2x1ZyA9IHoucGlzb3Nfc2x1ZyA/IHoucGlzb3Nfc2x1Zy5yZXBsYWNlKC9ecGlzb3MtLywgIiIpIDogei5zbHVnOwogICAgICAgICAgICBjb25zdCBzbHVnID0gKHR5cGUgPT09ICJwaXNvcyIgJiYgei5waXNvc19zbHVnKSA/IHoucGlzb3Nfc2x1ZyA6IGAke3R5cGV9LSR7bG9jYXRpb25TbHVnfWA7CiAgICAgICAgICAgIGNvbnN0IG9wUGF0aCA9IHRoaXMuX29wZXJhdGlvblR5cGUgPT09ICJyZW50IiA/ICJhbHF1aWxlciIgOiAidmVudGEiOwogICAgICAgICAgICB0YXJnZXRzLnB1c2goeyBiYXNlVXJsOiBgJHt0aGlzLmJhc2VVcmx9LyR7b3BQYXRofS8ke3NsdWd9L2AsIHpvbmVOYW1lOiB6Lm5hbWUgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXNGb3JPcGVyYXRpb24pIHsKICAgICAgICBjb25zdCBvcFBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiYWxxdWlsZXIiIDogInZlbnRhIjsKICAgICAgICB0YXJnZXRzLnB1c2goeyBiYXNlVXJsOiBgJHt0aGlzLmJhc2VVcmx9LyR7b3BQYXRofS8ke3R5cGV9LWxsaXJpYS9gLCB6b25lTmFtZTogIkxsw61yaWEiIH0pOwogICAgICB9CiAgICB9CgogICAgY29uc3QgYWxsOiBQcm9wZXJ0eVtdID0gW107CiAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOwoKICAgIGZvciAoY29uc3QgeyBiYXNlVXJsLCB6b25lTmFtZSB9IG9mIHRhcmdldHMpIHsKICAgICAgLy8gU2FsdGFyIHpvbmFzIGNhY2hlYWRhcyBjb21vIDQwNCBoYXN0YSBxdWUgZXhwaXJlIGVsIFRUTAogICAgICBjb25zdCBibG9ja2VkNDA0VW50aWwgPSBwaXNvczQwNENhY2hlLmdldChiYXNlVXJsKTsKICAgICAgaWYgKGJsb2NrZWQ0MDRVbnRpbCAmJiBEYXRlLm5vdygpIDwgYmxvY2tlZDQwNFVudGlsKSB7CiAgICAgICAgY29uc3QgcmVtYWluSHJzID0gTWF0aC5jZWlsKChibG9ja2VkNDA0VW50aWwgLSBEYXRlLm5vdygpKSAvIDM2MDAwMDApOwogICAgICAgIGNvbnNvbGUubG9nKGBbUGlzb3MuY29tXSAke2Jhc2VVcmx9IHNpbiByZXN1bHRhZG9zIGNvbm9jaWRvcywgb21pdGllbmRvICgke3JlbWFpbkhyc31oIHJlc3RhbnRlcylgKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgbGV0IHBhZ2VDb3VudCA9IDA7CgogICAgICBmb3IgKGxldCBwYWdlTnVtID0gMTsgcGFnZU51bSA8PSBNQVhfUEFHRVM7IHBhZ2VOdW0rKykgewogICAgICAgIC8vIFBpc29zLmNvbSB1c2EgLzIvLCAvMy8sIC4uLjsgP3BhZ2luYT1OIGNhbm9uaWNhbGl6YSBhIGxhIHDDoWdpbmEgMS4KICAgICAgICBjb25zdCBwYWdlVXJsID0gcGFnZU51bSA9PT0gMSA/IGJhc2VVcmwgOiBgJHtiYXNlVXJsfSR7cGFnZU51bX0vYDsKICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5mZXRjaEh0bWwocGFnZVVybCk7CiAgICAgICAgaWYgKCFodG1sKSB7CiAgICAgICAgICAvLyBTaSBsYSBwcmltZXJhIHDDoWdpbmEgZGEgNDA0IHUgb3RybyBlcnJvciwgY2FjaGVhciBsYSBVUkwgYmFzZSA0OCBoCiAgICAgICAgICBpZiAocGFnZU51bSA9PT0gMSkgewogICAgICAgICAgICBjb25zb2xlLmxvZyhgW1Bpc29zLmNvbV0gQ2FjaGVhbmRvICR7YmFzZVVybH0gY29tbyA0MDQgZHVyYW50ZSA0OGhgKTsKICAgICAgICAgICAgcGlzb3M0MDRDYWNoZS5zZXQoYmFzZVVybCwgRGF0ZS5ub3coKSArIFBJU09TXzQwNF9UVEwpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpOwogICAgICAgIGxldCBmb3VuZCA9IDA7CgogICAgICAgIC8vIFBpc29zLmNvbSAyMDI0OiBjYXJkcyBjb24gY2xhc2UgYWQtcHJldmlldyBvIGxpLmFkLXByZXZpZXctaXRlbQogICAgICAgICQoIltjbGFzcyo9J2FkLXByZXZpZXcnXSwgLmFkLWl0ZW0sIGFydGljbGUsIGxpW2NsYXNzKj0nbGlzdC1pdGVtJ10iKS5lYWNoKChfaSwgZWwpID0+IHsKICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbkRldGFpbFBhdGggPSB0aGlzLl9vcGVyYXRpb25UeXBlID09PSAicmVudCIgPyAiL2FscXVpbGFyLyIgOiAiL2NvbXByYXIvIjsKICAgICAgICAgIGNvbnN0IGxpbmtFbCA9ICQoZWwpLmZpbmQoYGFbaHJlZio9JyR7b3BlcmF0aW9uRGV0YWlsUGF0aH0nXSwgYVtocmVmKj0nL2FudW5jaW9faW5tb2JpbGlhcmlhLyddYCkuZmlyc3QoKTsKICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5zYW5pdGl6ZVRleHQoCiAgICAgICAgICAgIGxpbmtFbC50ZXh0KCkudHJpbSgpLnNwbGl0KCJcbiIpWzBdIHx8CiAgICAgICAgICAgICQoZWwpLmZpbmQoImgyLCBoMywgW2NsYXNzKj0ndGl0bGUnXSIpLmZpcnN0KCkudGV4dCgpIHx8CiAgICAgICAgICAgIGBQcm9waWVkYWQgZW4gJHt6b25lTmFtZX1gCiAgICAgICAgICApOwogICAgICAgICAgY29uc3QgcHJpY2VSYXcgPSAkKGVsKS5maW5kKCJbY2xhc3MqPSdwcmljZSddLCAucHJpY2UsIFtjbGFzcyo9J1ByaWNlJ10iKS5maXJzdCgpLnRleHQoKTsKICAgICAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5wYXJzZVByaWNlKHByaWNlUmF3KTsKICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rRWwuYXR0cigiaHJlZiIpIHx8ICIiOwogICAgICAgICAgaWYgKCFocmVmIHx8ICFwcmljZSkgcmV0dXJuOwogICAgICAgICAgY29uc3QgdXJsMiA9IGhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpID8gaHJlZiA6IGAke3RoaXMuYmFzZVVybH0ke2hyZWZ9YDsKICAgICAgICAgIGlmIChzZWVuVXJscy5oYXModXJsMikpIHJldHVybjsKICAgICAgICAgIHNlZW5VcmxzLmFkZCh1cmwyKTsKICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5zYW5pdGl6ZVRleHQoJChlbCkuZmluZCgiLmxvY2F0aW9uLCBbY2xhc3MqPSdsb2NhdGlvbiddIikuZmlyc3QoKS50ZXh0KCkgfHwgem9uZU5hbWUpOwogICAgICAgICAgY29uc3Qgcm9vbXMgPSBwYXJzZUludCgkKGVsKS5maW5kKCJbY2xhc3MqPSdoYWInXSwgW2NsYXNzKj0ncm9vbSddIikuZmlyc3QoKS50ZXh0KCkpIHx8IDA7CiAgICAgICAgICBjb25zdCBzaXplX20yID0gcGFyc2VJbnQoJChlbCkuZmluZCgiW2NsYXNzKj0nbTInXSwgW2NsYXNzKj0nbWV0cm9zJ10iKS5maXJzdCgpLnRleHQoKSkgfHwgMDsKICAgICAgICAgIGNvbnN0IGltYWdlX3VybCA9ICQoZWwpLmZpbmQoImltZyIpLmF0dHIoInNyYyIpIHx8ICQoZWwpLmZpbmQoImltZyIpLmF0dHIoImRhdGEtc3JjIikgfHwgIiI7CiAgICAgICAgICBhbGwucHVzaCh7CiAgICAgICAgICAgIHRpdGxlLCBwcmljZSwgbG9jYXRpb24sCiAgICAgICAgICAgIG11bmljaXBhbGl0eTogdGhpcy5kZXRlY3RNdW5pY2lwYWxpdHkobG9jYXRpb24gKyAiICIgKyB6b25lTmFtZSwgem9uZXMsIHpvbmVOYW1lKSwKICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKHRpdGxlKSwKICAgICAgICAgICAgb3BlcmF0aW9uX3R5cGU6IHRoaXMuX29wZXJhdGlvblR5cGUsCiAgICAgICAgICAgIHJvb21zLCBzaXplX20yLCB1cmw6IHVybDIsIHNvdXJjZTogdGhpcy5zb3VyY2VOYW1lLCBpbWFnZV91cmwsCiAgICAgICAgICB9KTsKICAgICAgICAgIGZvdW5kKys7CiAgICAgICAgfSk7CgogICAgICAgIHBhZ2VDb3VudCsrOwogICAgICAgIGlmIChmb3VuZCA8IDMpIGJyZWFrOyAvLyBQcm9iYWJsZSDDumx0aW1hIHDDoWdpbmEKICAgICAgfQoKICAgICAgY29uc29sZS5sb2coYFske3RoaXMuc291cmNlTmFtZX1dICR7em9uZU5hbWV9OiAke3BhZ2VDb3VudH0gcMOhZ2luYXMsICR7c2VlblVybHMuc2l6ZX0gw7puaWNvcyBoYXN0YSBhaG9yYWApOwogICAgfQoKICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzdWx0cyhhbGwpOwogIH0KCn0K","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\tecnocasaScraper.ts","beforeExisted":true,"beforeHash":"9c179ba361115b73d1c85cf4431d4e22de81a4d09e4e636245a02947d626b4d3","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgUGxheXdyaWdodEJhc2VTY3JhcGVyIH0gZnJvbSAiLi9wbGF5d3JpZ2h0QmFzZVNjcmFwZXIiOw0KDQovKioNCiAqIFNjcmFwZXIgcGFyYSBUZWNub2Nhc2EgRXNwYcOxYSAoZnJhbnF1aWNpYSBpbm1vYmlsaWFyaWEpDQogKiBMYSBww6FnaW5hIGVzIHVuYSBTUEEgVnVlLmpzOyBQbGF5d3JpZ2h0IGVqZWN1dGEgZWwgSlMgeSBlc3BlcmEgYSBxdWUgc2UgcmVuZGVyaWNlbiBsYXMgdGFyamV0YXMuDQogKiBVUkw6IGh0dHBzOi8vd3d3LnRlY25vY2FzYS5lcy92ZW50YS9waXNvL2NvbXVuaWRhZC12YWxlbmNpYW5hL3ZhbGVuY2lhL3tzbHVnfS5odG1sDQogKi8NCmV4cG9ydCBjbGFzcyBUZWNub2Nhc2FTY3JhcGVyIGV4dGVuZHMgUGxheXdyaWdodEJhc2VTY3JhcGVyIHsNCiAgICAvLyBFc3BlcmFyIGEgLmFwcC1jb250YWluZXIgKFZ1ZSBhcHAgcmVhZHkpIG8gYSBjdWFscXVpZXIgdGFyamV0YSBkZSBwcm9waWVkYWQNCiAgICBwcm90ZWN0ZWQgd2FpdEZvclNlbGVjdG9yID0gJy5hcHAtY29udGFpbmVyIFtjbGFzcyo9ImVzdGF0ZSJdLCAuYXBwLWNvbnRhaW5lciBbY2xhc3MqPSJjYXJkIl0sIC5hcHAtY29udGFpbmVyIGFydGljbGUnOw0KICAgIHByb3RlY3RlZCBwYWdlVGltZW91dE1zID0gNDUwMDA7DQoNCiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoImh0dHBzOi8vd3d3LnRlY25vY2FzYS5lcyIsICJUZWNub2Nhc2EiKTsgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3Qgc2x1Z3MgPSB6b25lcy5sZW5ndGggPiAwID8gem9uZXMubWFwKHogPT4gei5zbHVnKSA6IFsibGxpcmlhIl07DQoNCiAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOw0KDQogICAgICAgIGZvciAoY29uc3Qgc2x1ZyBvZiBzbHVncykgew0KICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS92ZW50YS9waXNvL2NvbXVuaWRhZC12YWxlbmNpYW5hL3ZhbGVuY2lhLyR7c2x1Z30uaHRtbGA7DQogICAgICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5mZXRjaEh0bWxQbGF5d3JpZ2h0KHVybCwgdGhpcy53YWl0Rm9yU2VsZWN0b3IpOw0KICAgICAgICAgICAgaWYgKCFodG1sKSBjb250aW51ZTsNCiAgICAgICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7DQoNCiAgICAgICAgICAgIC8vIEJ1c2NhciB0YXJqZXRhcyBkZSBwcm9waWVkYWQgY29uIHNlbGVjdG9yZXMgZ2Vuw6lyaWNvcyAoVnVlIHJlbmRlcml6YSBjbGFzZXMgZGluw6FtaWNhcykNCiAgICAgICAgICAgIGNvbnN0IGNhcmRTZWwgPSBbDQogICAgICAgICAgICAgICAgJ1tjbGFzcyo9ImVzdGF0ZS1jYXJkIl0nLA0KICAgICAgICAgICAgICAgICdbY2xhc3MqPSJwcm9wZXJ0eS1jYXJkIl0nLA0KICAgICAgICAgICAgICAgICdbY2xhc3MqPSJzZWFyY2gtY2FyZCJdJywNCiAgICAgICAgICAgICAgICAnLnJlc3VsdC1jYXJkJywNCiAgICAgICAgICAgICAgICAnYXJ0aWNsZVtjbGFzcyo9ImNhcmQiXScsDQogICAgICAgICAgICBdLmpvaW4oJywgJyk7DQoNCiAgICAgICAgICAgICQoY2FyZFNlbCkuZWFjaCgoX2ksIGVsKSA9PiB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnNhbml0aXplVGV4dCgNCiAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJ2gyLCBoMywgW2NsYXNzKj0idGl0bGUiXSwgW2NsYXNzKj0iaGVhZGluZyJdJykuZmlyc3QoKS50ZXh0KCkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICJQcm9waWVkYWQgVGVjbm9jYXNhIg0KICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZVJhdyA9IHRoaXMuc2FuaXRpemVUZXh0KA0KICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnW2NsYXNzKj0icHJpY2UiXSwgW2NsYXNzKj0icHJlY2lvIl0sIFtjbGFzcyo9ImNvc3QiXScpLmZpcnN0KCkudGV4dCgpDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5wYXJzZVByaWNlKHByaWNlUmF3KTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9DQogICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCdhW2hyZWYqPSIvaW5tdWVibGUiXSwgYVtocmVmKj0iL3ZlbnRhIl0nKS5maXJzdCgpLmF0dHIoJ2hyZWYnKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnYVtocmVmXScpLmZpcnN0KCkuYXR0cignaHJlZicpIHx8ICcnOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBhYnNVcmwgPSBocmVmLnN0YXJ0c1dpdGgoJ2h0dHAnKSA/IGhyZWYgOiBgJHt0aGlzLmJhc2VVcmx9JHtocmVmfWA7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5zYW5pdGl6ZVRleHQoDQogICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCdbY2xhc3MqPSJsb2NhdGlvbiJdLCBbY2xhc3MqPSJhZGRyZXNzIl0sIFtjbGFzcyo9ImNpdHkiXScpLmZpcnN0KCkudGV4dCgpIHx8IHNsdWcNCiAgICAgICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgICAgICBsZXQgcm9vbXMgPSAwLCBzaXplX20yID0gMDsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mb1RleHQgPSAkKGVsKS50ZXh0KCk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJNYXRjaCA9IGluZm9UZXh0Lm1hdGNoKC8oXGQrKVxzKig/OmhhYnxkb3JtKS9pKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJNYXRjaCkgcm9vbXMgPSBwYXJzZUludChyTWF0Y2hbMV0pOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzTWF0Y2ggPSBpbmZvVGV4dC5tYXRjaCgvKFxkKylccyptW8KyMl0vaSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzTWF0Y2gpIHNpemVfbTIgPSBwYXJzZUludChzTWF0Y2hbMV0pOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlX3VybCA9ICQoZWwpLmZpbmQoJ2ltZycpLmZpcnN0KCkuYXR0cignc3JjJykgfHwgJyc7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHByaWNlID4gMCAmJiBocmVmICYmICFzZWVuVXJscy5oYXMoYWJzVXJsKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2VlblVybHMuYWRkKGFic1VybCk7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBwcmljZSwgbG9jYXRpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVuaWNpcGFsaXR5OiB0aGlzLmRldGVjdE11bmljaXBhbGl0eShsb2NhdGlvbiArICcgJyArIHNsdWcsIHpvbmVzKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV90eXBlOiB0aGlzLm5vcm1hbGl6ZVR5cGUodGl0bGUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb21zLCBzaXplX20yLCB1cmw6IGFic1VybCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlTmFtZSwgaW1hZ2VfdXJsLA0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsgLyogc2tpcCAqLyB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlc3VsdHMocHJvcGVydGllcyk7DQogICAgfQ0KfQ0K","afterExisted":true,"afterHash":"fa4eaf762256a84352ab03d512608bf7c06f2fd0cbb90b017594c05a73364aff","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgUGxheXdyaWdodEJhc2VTY3JhcGVyIH0gZnJvbSAiLi9wbGF5d3JpZ2h0QmFzZVNjcmFwZXIiOw0KDQovKioNCiAqIFNjcmFwZXIgcGFyYSBUZWNub2Nhc2EgRXNwYcOxYSAoZnJhbnF1aWNpYSBpbm1vYmlsaWFyaWEpDQogKiBMYSBww6FnaW5hIGVzIHVuYSBTUEEgVnVlLmpzOyBQbGF5d3JpZ2h0IGVqZWN1dGEgZWwgSlMgeSBlc3BlcmEgYSBxdWUgc2UgcmVuZGVyaWNlbiBsYXMgdGFyamV0YXMuDQogKiBVUkw6IGh0dHBzOi8vd3d3LnRlY25vY2FzYS5lcy92ZW50YS9waXNvL2NvbXVuaWRhZC12YWxlbmNpYW5hL3ZhbGVuY2lhL3tzbHVnfS5odG1sDQogKi8NCmV4cG9ydCBjbGFzcyBUZWNub2Nhc2FTY3JhcGVyIGV4dGVuZHMgUGxheXdyaWdodEJhc2VTY3JhcGVyIHsNCiAgICAvLyBFc3BlcmFyIGEgLmFwcC1jb250YWluZXIgKFZ1ZSBhcHAgcmVhZHkpIG8gYSBjdWFscXVpZXIgdGFyamV0YSBkZSBwcm9waWVkYWQNCiAgICBwcm90ZWN0ZWQgd2FpdEZvclNlbGVjdG9yID0gJy5hcHAtY29udGFpbmVyIFtjbGFzcyo9ImVzdGF0ZSJdLCAuYXBwLWNvbnRhaW5lciBbY2xhc3MqPSJjYXJkIl0sIC5hcHAtY29udGFpbmVyIGFydGljbGUnOw0KICAgIHByb3RlY3RlZCBwYWdlVGltZW91dE1zID0gNDUwMDA7DQoNCiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoImh0dHBzOi8vd3d3LnRlY25vY2FzYS5lcyIsICJUZWNub2Nhc2EiKTsgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3Qgc2x1Z3MgPSB6b25lcy5sZW5ndGggPiAwID8gem9uZXMubWFwKHogPT4gei5zbHVnKSA6IFsibGxpcmlhIl07DQoNCiAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdOw0KICAgICAgICBjb25zdCBzZWVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpOw0KDQogICAgICAgIGZvciAoY29uc3Qgc2x1ZyBvZiBzbHVncykgewogICAgICAgICAgICBjb25zdCBvcGVyYXRpb25QYXRoID0gdGhpcy5fb3BlcmF0aW9uVHlwZSA9PT0gInJlbnQiID8gImFscXVpbGVyIiA6ICJ2ZW50YSI7CiAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0vJHtvcGVyYXRpb25QYXRofS9waXNvL2NvbXVuaWRhZC12YWxlbmNpYW5hL3ZhbGVuY2lhLyR7c2x1Z30uaHRtbGA7CiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmZldGNoSHRtbFBsYXl3cmlnaHQodXJsLCB0aGlzLndhaXRGb3JTZWxlY3Rvcik7DQogICAgICAgICAgICBpZiAoIWh0bWwpIGNvbnRpbnVlOw0KICAgICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTsNCg0KICAgICAgICAgICAgLy8gQnVzY2FyIHRhcmpldGFzIGRlIHByb3BpZWRhZCBjb24gc2VsZWN0b3JlcyBnZW7DqXJpY29zIChWdWUgcmVuZGVyaXphIGNsYXNlcyBkaW7DoW1pY2FzKQ0KICAgICAgICAgICAgY29uc3QgY2FyZFNlbCA9IFsNCiAgICAgICAgICAgICAgICAnW2NsYXNzKj0iZXN0YXRlLWNhcmQiXScsDQogICAgICAgICAgICAgICAgJ1tjbGFzcyo9InByb3BlcnR5LWNhcmQiXScsDQogICAgICAgICAgICAgICAgJ1tjbGFzcyo9InNlYXJjaC1jYXJkIl0nLA0KICAgICAgICAgICAgICAgICcucmVzdWx0LWNhcmQnLA0KICAgICAgICAgICAgICAgICdhcnRpY2xlW2NsYXNzKj0iY2FyZCJdJywNCiAgICAgICAgICAgIF0uam9pbignLCAnKTsNCg0KICAgICAgICAgICAgJChjYXJkU2VsKS5lYWNoKChfaSwgZWwpID0+IHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuc2FuaXRpemVUZXh0KA0KICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnaDIsIGgzLCBbY2xhc3MqPSJ0aXRsZSJdLCBbY2xhc3MqPSJoZWFkaW5nIl0nKS5maXJzdCgpLnRleHQoKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgIlByb3BpZWRhZCBUZWNub2Nhc2EiDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlUmF3ID0gdGhpcy5zYW5pdGl6ZVRleHQoDQogICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCdbY2xhc3MqPSJwcmljZSJdLCBbY2xhc3MqPSJwcmVjaW8iXSwgW2NsYXNzKj0iY29zdCJdJykuZmlyc3QoKS50ZXh0KCkNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnBhcnNlUHJpY2UocHJpY2VSYXcpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBocmVmID0NCiAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJ2FbaHJlZio9Ii9pbm11ZWJsZSJdLCBhW2hyZWYqPSIvdmVudGEiXSwgYVtocmVmKj0iL2FscXVpbGVyIl0nKS5maXJzdCgpLmF0dHIoJ2hyZWYnKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCdhW2hyZWZdJykuZmlyc3QoKS5hdHRyKCdocmVmJykgfHwgJyc7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic1VybCA9IGhyZWYuc3RhcnRzV2l0aCgnaHR0cCcpID8gaHJlZiA6IGAke3RoaXMuYmFzZVVybH0ke2hyZWZ9YDsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLnNhbml0aXplVGV4dCgNCiAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJ1tjbGFzcyo9ImxvY2F0aW9uIl0sIFtjbGFzcyo9ImFkZHJlc3MiXSwgW2NsYXNzKj0iY2l0eSJdJykuZmlyc3QoKS50ZXh0KCkgfHwgc2x1Zw0KICAgICAgICAgICAgICAgICAgICApOw0KDQogICAgICAgICAgICAgICAgICAgIGxldCByb29tcyA9IDAsIHNpemVfbTIgPSAwOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvVGV4dCA9ICQoZWwpLnRleHQoKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgck1hdGNoID0gaW5mb1RleHQubWF0Y2goLyhcZCspXHMqKD86aGFifGRvcm0pL2kpOw0KICAgICAgICAgICAgICAgICAgICBpZiAock1hdGNoKSByb29tcyA9IHBhcnNlSW50KHJNYXRjaFsxXSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNNYXRjaCA9IGluZm9UZXh0Lm1hdGNoKC8oXGQrKVxzKm1bwrIyXS9pKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNNYXRjaCkgc2l6ZV9tMiA9IHBhcnNlSW50KHNNYXRjaFsxXSk7DQoNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VfdXJsID0gJChlbCkuZmluZCgnaW1nJykuZmlyc3QoKS5hdHRyKCdzcmMnKSB8fCAnJzsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAocHJpY2UgPiAwICYmIGhyZWYgJiYgIXNlZW5VcmxzLmhhcyhhYnNVcmwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWVuVXJscy5hZGQoYWJzVXJsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsIHByaWNlLCBsb2NhdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdW5pY2lwYWxpdHk6IHRoaXMuZGV0ZWN0TXVuaWNpcGFsaXR5KGxvY2F0aW9uICsgJyAnICsgc2x1Zywgem9uZXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKHRpdGxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbl90eXBlOiB0aGlzLl9vcGVyYXRpb25UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vbXMsIHNpemVfbTIsIHVybDogYWJzVXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZU5hbWUsIGltYWdlX3VybCwNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHRzKHByb3BlcnRpZXMpOw0KICAgIH0NCn0NCg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\yaencontreScraper.ts","beforeExisted":true,"beforeHash":"2c86325cdda67c286f39e744ca112499e3a94769b9a27d80ee557d762680de85","beforeContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCg0KLyoqDQogKiBTY3JhcGVyIHBhcmEgWWFlbmNvbnRyZSAocG9ydGFsIGlubW9iaWxpYXJpbyBuYWNpb25hbCkNCiAqIFVSTDogaHR0cHM6Ly93d3cueWFlbmNvbnRyZS5jb20vdmVudGEvcGlzb3Mve3NsdWd9DQogKiBQYWdpbmFjacOzbjogL3ZlbnRhL3Bpc29zL3tzbHVnfS9wYWdpbmEte059Lmh0bWwNCiAqLw0KZXhwb3J0IGNsYXNzIFlhZW5jb250cmVTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXIgew0KICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX1BBR0VTID0gMzsNCiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoImh0dHBzOi8vd3d3LnlhZW5jb250cmUuY29tIiwgIllhZW5jb250cmUiKTsgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHpvbmVzLmxlbmd0aCA+IDANCiAgICAgICAgICAgID8gem9uZXMubWFwKHogPT4gei5zbHVnKQ0KICAgICAgICAgICAgOiBbImxsaXJpYSJdOw0KDQogICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXTsNCiAgICAgICAgY29uc3Qgc2VlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTsNCiAgICAgICAgbGV0IGNvbnNlY3V0aXZlQmxvY2tlZCA9IDA7DQoNCiAgICAgICAgZm9yIChjb25zdCBzbHVnIG9mIHRhcmdldHMpIHsNCiAgICAgICAgICAgIGNvbnN0IHpvbmUgPSB6b25lcy5maW5kKHogPT4gei5zbHVnID09PSBzbHVnKTsNCiAgICAgICAgICAgIGNvbnN0IHpvbmVOYW1lID0gem9uZT8ubmFtZSA/PyBzbHVnOw0KDQogICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSB0aGlzLk1BWF9QQUdFUzsgcGFnZSsrKSB7DQogICAgICAgICAgICAgICAgLy8gRm9ybWF0byBhY3R1YWwgZGUgWWFlbmNvbnRyZTogL3ZlbnRhL3Bpc29zL3tzbHVnfSAocMOhZyAxKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC92ZW50YS9waXNvcy97c2x1Z30vcGFnaW5hLXtOfS5odG1sIChww6FnIE4pDQogICAgICAgICAgICAgICAgY29uc3QgdXJsID0gcGFnZSA9PT0gMQ0KICAgICAgICAgICAgICAgICAgICA/IGAke3RoaXMuYmFzZVVybH0vdmVudGEvcGlzb3MvJHtzbHVnfWANCiAgICAgICAgICAgICAgICAgICAgOiBgJHt0aGlzLmJhc2VVcmx9L3ZlbnRhL3Bpc29zLyR7c2x1Z30vcGFnaW5hLSR7cGFnZX0uaHRtbGA7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5mZXRjaEh0bWwodXJsKTsNCiAgICAgICAgICAgICAgICBpZiAoIWh0bWwpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT09IDEpIGNvbnNlY3V0aXZlQmxvY2tlZCsrOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29uc2VjdXRpdmVCbG9ja2VkID0gMDsgLy8gcmVzZXQgYWwgb2J0ZW5lciBjb250ZW5pZG8NCiAgICAgICAgICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpOw0KDQogICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gMDsNCiAgICAgICAgICAgICAgICAkKCJbY2xhc3MqPSdwcm9wZXJ0eSddLCBhcnRpY2xlLCAubGlzdGluZy1jYXJkLCBbY2xhc3MqPSdjYXJkJ10sIFtjbGFzcyo9J0hvdXNlQ2FyZCddIikuZWFjaCgoX2ksIGVsKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuc2FuaXRpemVUZXh0KCQoZWwpLmZpbmQoImgyLCBoMywgW2NsYXNzKj0ndGl0bGUnXSwgW2NsYXNzKj0nVGl0bGUnXSIpLmZpcnN0KCkudGV4dCgpIHx8ICJQcm9waWVkYWQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlUmF3ID0gJChlbCkuZmluZCgiW2NsYXNzKj0ncHJpY2UnXSwgLnByZWNpbywgW2NsYXNzKj0nUHJpY2UnXSIpLmZpcnN0KCkudGV4dCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnBhcnNlUHJpY2UocHJpY2VSYXcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9ICQoZWwpLmZpbmQoImFbaHJlZl0iKS5maXJzdCgpLmF0dHIoImhyZWYiKSB8fCAiIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybDIgPSBocmVmLnN0YXJ0c1dpdGgoImh0dHAiKSA/IGhyZWYgOiBgJHt0aGlzLmJhc2VVcmx9JHtocmVmfWA7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuc2FuaXRpemVUZXh0KCQoZWwpLmZpbmQoIltjbGFzcyo9J2xvY2F0aW9uJ10sIC51YmljYWNpb24sIFtjbGFzcyo9J2FkZHJlc3MnXSIpLmZpcnN0KCkudGV4dCgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb21zID0gcGFyc2VJbnQoJChlbCkuZmluZCgiW2NsYXNzKj0ncm9vbSddLCBbY2xhc3MqPSdoYWInXSIpLmZpcnN0KCkudGV4dCgpKSB8fCAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV9tMiA9IHBhcnNlSW50KCQoZWwpLmZpbmQoIltjbGFzcyo9J20yJ10sIFtjbGFzcyo9J2FyZWEnXSIpLmZpcnN0KCkudGV4dCgpKSB8fCAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VfdXJsID0gJChlbCkuZmluZCgiaW1nIikuYXR0cigic3JjIikgfHwgJChlbCkuZmluZCgiaW1nIikuYXR0cigiZGF0YS1zcmMiKSB8fCAiIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmljZSA+IDAgJiYgaHJlZiAmJiAhc2VlblVybHMuaGFzKHVybDIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblVybHMuYWRkKHVybDIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsIHByaWNlLCBsb2NhdGlvbjogbG9jYXRpb24gfHwgem9uZU5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bmljaXBhbGl0eTogdGhpcy5kZXRlY3RNdW5pY2lwYWxpdHkobG9jYXRpb24gKyAiICIgKyB6b25lTmFtZSwgem9uZXMsIHpvbmVOYW1lKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKHRpdGxlKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vbXMsIHNpemVfbTIsIHVybDogdXJsMiwgc291cmNlOiB0aGlzLnNvdXJjZU5hbWUsIGltYWdlX3VybCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfQ0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgaWYgKGZvdW5kIDwgMykgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBTaSAyIHpvbmFzIGNvbnNlY3V0aXZhcyBubyBkZXZ1ZWx2ZW4gbmFkYSDihpIgZWwgcG9ydGFsIGVzdMOhIGJsb3F1ZWFuZG8sIGFib3J0YXINCiAgICAgICAgICAgIGlmIChjb25zZWN1dGl2ZUJsb2NrZWQgPj0gMikgew0KICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtZYWVuY29udHJlXSBQb3J0YWwgYmxvcXVlYW5kbyBzaXN0ZW3DoXRpY2FtZW50ZSAoJHtjb25zZWN1dGl2ZUJsb2NrZWR9IHpvbmFzIHNpbiByZXNwdWVzdGEpLCBhYm9ydGFuZG8gc2NyYXBpbmdgKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlc3VsdHMocHJvcGVydGllcyk7DQogICAgfQ0KfQ0K","afterExisted":true,"afterHash":"ad907885f3ad1eae9616e01cf15e7b3a4eae8142f7ee4d26b870707c6bcbace0","afterContent":"aW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICJjaGVlcmlvIjsNCmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAiLi4vdHlwZXMvcHJvcGVydHkiOw0KaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICIuL2Jhc2VTY3JhcGVyIjsNCg0KLyoqDQogKiBTY3JhcGVyIHBhcmEgWWFlbmNvbnRyZSAocG9ydGFsIGlubW9iaWxpYXJpbyBuYWNpb25hbCkNCiAqIFVSTDogaHR0cHM6Ly93d3cueWFlbmNvbnRyZS5jb20vdmVudGEvcGlzb3Mve3NsdWd9DQogKiBQYWdpbmFjacOzbjogL3ZlbnRhL3Bpc29zL3tzbHVnfS9wYWdpbmEte059Lmh0bWwNCiAqLw0KZXhwb3J0IGNsYXNzIFlhZW5jb250cmVTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXIgew0KICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX1BBR0VTID0gMzsNCiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoImh0dHBzOi8vd3d3LnlhZW5jb250cmUuY29tIiwgIllhZW5jb250cmUiKTsgfQ0KDQogICAgYXN5bmMgc2NyYXBlKCk6IFByb21pc2U8UHJvcGVydHlbXT4gew0KICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlWm9uZXMoKTsNCiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHpvbmVzLmxlbmd0aCA+IDANCiAgICAgICAgICAgID8gem9uZXMubWFwKHogPT4gei5zbHVnKQ0KICAgICAgICAgICAgOiBbImxsaXJpYSJdOw0KDQogICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXTsNCiAgICAgICAgY29uc3Qgc2VlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTsNCiAgICAgICAgbGV0IGNvbnNlY3V0aXZlQmxvY2tlZCA9IDA7DQoNCiAgICAgICAgZm9yIChjb25zdCBzbHVnIG9mIHRhcmdldHMpIHsNCiAgICAgICAgICAgIGNvbnN0IHpvbmUgPSB6b25lcy5maW5kKHogPT4gei5zbHVnID09PSBzbHVnKTsNCiAgICAgICAgICAgIGNvbnN0IHpvbmVOYW1lID0gem9uZT8ubmFtZSA/PyBzbHVnOw0KDQogICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSB0aGlzLk1BWF9QQUdFUzsgcGFnZSsrKSB7DQogICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uUGF0aCA9IHRoaXMuX29wZXJhdGlvblR5cGUgPT09ICJyZW50IiA/ICJhbHF1aWxlciIgOiAidmVudGEiOwogICAgICAgICAgICAgICAgY29uc3QgdXJsID0gcGFnZSA9PT0gMQogICAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5iYXNlVXJsfS8ke29wZXJhdGlvblBhdGh9L3Bpc29zLyR7c2x1Z31gCiAgICAgICAgICAgICAgICAgICAgOiBgJHt0aGlzLmJhc2VVcmx9LyR7b3BlcmF0aW9uUGF0aH0vcGlzb3MvJHtzbHVnfS9wYWdpbmEtJHtwYWdlfS5odG1sYDsKDQogICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZmV0Y2hIdG1sKHVybCk7DQogICAgICAgICAgICAgICAgaWYgKCFodG1sKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChwYWdlID09PSAxKSBjb25zZWN1dGl2ZUJsb2NrZWQrKzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnNlY3V0aXZlQmxvY2tlZCA9IDA7IC8vIHJlc2V0IGFsIG9idGVuZXIgY29udGVuaWRvDQogICAgICAgICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTsNCg0KICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IDA7DQogICAgICAgICAgICAgICAgJCgiW2NsYXNzKj0ncHJvcGVydHknXSwgYXJ0aWNsZSwgLmxpc3RpbmctY2FyZCwgW2NsYXNzKj0nY2FyZCddLCBbY2xhc3MqPSdIb3VzZUNhcmQnXSIpLmVhY2goKF9pLCBlbCkgPT4gew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnNhbml0aXplVGV4dCgkKGVsKS5maW5kKCJoMiwgaDMsIFtjbGFzcyo9J3RpdGxlJ10sIFtjbGFzcyo9J1RpdGxlJ10iKS5maXJzdCgpLnRleHQoKSB8fCAiUHJvcGllZGFkIik7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZVJhdyA9ICQoZWwpLmZpbmQoIltjbGFzcyo9J3ByaWNlJ10sIC5wcmVjaW8sIFtjbGFzcyo9J1ByaWNlJ10iKS5maXJzdCgpLnRleHQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5wYXJzZVByaWNlKHByaWNlUmF3KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSAkKGVsKS5maW5kKCJhW2hyZWZdIikuZmlyc3QoKS5hdHRyKCJocmVmIikgfHwgIiI7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwyID0gaHJlZi5zdGFydHNXaXRoKCJodHRwIikgPyBocmVmIDogYCR7dGhpcy5iYXNlVXJsfSR7aHJlZn1gOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLnNhbml0aXplVGV4dCgkKGVsKS5maW5kKCJbY2xhc3MqPSdsb2NhdGlvbiddLCAudWJpY2FjaW9uLCBbY2xhc3MqPSdhZGRyZXNzJ10iKS5maXJzdCgpLnRleHQoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb29tcyA9IHBhcnNlSW50KCQoZWwpLmZpbmQoIltjbGFzcyo9J3Jvb20nXSwgW2NsYXNzKj0naGFiJ10iKS5maXJzdCgpLnRleHQoKSkgfHwgMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfbTIgPSBwYXJzZUludCgkKGVsKS5maW5kKCJbY2xhc3MqPSdtMiddLCBbY2xhc3MqPSdhcmVhJ10iKS5maXJzdCgpLnRleHQoKSkgfHwgMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlX3VybCA9ICQoZWwpLmZpbmQoImltZyIpLmF0dHIoInNyYyIpIHx8ICQoZWwpLmZpbmQoImltZyIpLmF0dHIoImRhdGEtc3JjIikgfHwgIiI7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpY2UgPiAwICYmIGhyZWYgJiYgIXNlZW5VcmxzLmhhcyh1cmwyKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5VcmxzLmFkZCh1cmwyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBwcmljZSwgbG9jYXRpb246IGxvY2F0aW9uIHx8IHpvbmVOYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdW5pY2lwYWxpdHk6IHRoaXMuZGV0ZWN0TXVuaWNpcGFsaXR5KGxvY2F0aW9uICsgIiAiICsgem9uZU5hbWUsIHpvbmVzLCB6b25lTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZTogdGhpcy5ub3JtYWxpemVUeXBlKHRpdGxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fdHlwZTogdGhpcy5fb3BlcmF0aW9uVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb29tcywgc2l6ZV9tMiwgdXJsOiB1cmwyLCBzb3VyY2U6IHRoaXMuc291cmNlTmFtZSwgaW1hZ2VfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggeyAvKiBza2lwICovIH0NCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGlmIChmb3VuZCA8IDMpIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gU2kgMiB6b25hcyBjb25zZWN1dGl2YXMgbm8gZGV2dWVsdmVuIG5hZGEg4oaSIGVsIHBvcnRhbCBlc3TDoSBibG9xdWVhbmRvLCBhYm9ydGFyDQogICAgICAgICAgICBpZiAoY29uc2VjdXRpdmVCbG9ja2VkID49IDIpIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbWWFlbmNvbnRyZV0gUG9ydGFsIGJsb3F1ZWFuZG8gc2lzdGVtw6F0aWNhbWVudGUgKCR7Y29uc2VjdXRpdmVCbG9ja2VkfSB6b25hcyBzaW4gcmVzcHVlc3RhKSwgYWJvcnRhbmRvIHNjcmFwaW5nYCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHRzKHByb3BlcnRpZXMpOw0KICAgIH0NCn0NCg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\services\\propertyService.ts","beforeExisted":true,"beforeHash":"08a1321b99f153151c2c6fb8ae4cf8d988d9289d0b267b37443d572abfe92ef5","beforeContent":"aW1wb3J0IHsgUHJvcGVydHlNb2RlbCB9IGZyb20gIi4uL21vZGVscy9wcm9wZXJ0eU1vZGVsIjsKaW1wb3J0IHsgUHJpY2VIaXN0b3J5TW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvcHJpY2VIaXN0b3J5TW9kZWwiOwppbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gIi4uL3R5cGVzL3Byb3BlcnR5IjsKaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAiLi4vdHlwZXMvZmlsdGVyIjsKaW1wb3J0IHsgYnVzTG9nLCBzY3JhcGVyQnVzIH0gZnJvbSAiLi4vdXRpbHMvc2NyYXBlckV2ZW50QnVzIjsKaW1wb3J0IHsKICBJZGVhbGlzdGFQbGF5d3JpZ2h0U2NyYXBlciwgRm90b2Nhc2FQbGF5d3JpZ2h0U2NyYXBlciwKICBIYWJpdGFjbGlhU2NyYXBlciwgUGlzb3NTY3JhcGVyLCBUcm92YXRTY3JhcGVyLAogIEt5ZXJvU2NyYXBlciwgVGhpbmtTcGFpblNjcmFwZXIsCiAgTWlsYW51bmNpb3NTY3JhcGVyLCBZYWVuY29udHJlU2NyYXBlciwgQ2FzYXNhcG9TY3JhcGVyLCBWaWJib1NjcmFwZXIsCiAgR2xvYmFsaXphU2NyYXBlciwgTnVyb2FTY3JhcGVyLCBFbmdlbFZvbGtlcnNTY3JhcGVyLCBUZWNub2Nhc2FTY3JhcGVyLAogIEVyYVNwYWluU2NyYXBlciwgUmVtYXhTY3JhcGVyLCBJbm1vYmlsaWFyaWFTY3JhcGVyLCBTcGFpbkhvdXNlc1NjcmFwZXIsCiAgSG9scHJvcFNjcmFwZXIsCn0gZnJvbSAiLi4vc2NyYXBlcnMvaW5kZXgiOwppbXBvcnQgeyBHZW9jb2RpbmdTZXJ2aWNlIH0gZnJvbSAiLi9nZW9jb2RpbmdTZXJ2aWNlIjsKaW1wb3J0IHsgU2NvcmluZ1NlcnZpY2UgfSBmcm9tICIuL3Njb3JpbmdTZXJ2aWNlIjsKaW1wb3J0IHsgRGVkdXBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICIuL2RlZHVwbGljYXRpb25TZXJ2aWNlIjsKaW1wb3J0IHsgUG9ydGFsTW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvcG9ydGFsTW9kZWwiOwppbXBvcnQgeyBab25lTW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvem9uZU1vZGVsIjsKaW1wb3J0IHBvb2wgZnJvbSAiLi4vY29uZmlnL2RiIjsKaW1wb3J0IHsgUm93RGF0YVBhY2tldCB9IGZyb20gIm15c3FsMiI7CgovLyBNYXBhIGRlIG5vbWJyZSBkZSBjbGFzZSDihpIgY29uc3RydWN0b3IgZGUgc2NyYXBlciAoUGxheXdyaWdodCA+IENoZWVyaW8gcGFyYSBwb3J0YWxlcyBKUykKY29uc3QgU0NSQVBFUl9NQVA6IFJlY29yZDxzdHJpbmcsIG5ldyAoKSA9PiBhbnk+ID0gewogIElkZWFsaXN0YVNjcmFwZXI6IElkZWFsaXN0YVBsYXl3cmlnaHRTY3JhcGVyLCAgICAgICAgICAgLy8gYWxpYXMgbGVnYWN5IOKGkiBQbGF5d3JpZ2h0CiAgSWRlYWxpc3RhUGxheXdyaWdodFNjcmFwZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGF2ZSBkaXJlY3RhICh2YWxvciBhY3R1YWwgZW4gQkQpCiAgRm90b2Nhc2FTY3JhcGVyOiBGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyLCAgICAgICAgICAgICAvLyBhbGlhcyBsZWdhY3kg4oaSIFBsYXl3cmlnaHQKICBGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXZlIGRpcmVjdGEgKHZhbG9yIGFjdHVhbCBlbiBCRCkKICBIYWJpdGFjbGlhU2NyYXBlciwgUGlzb3NTY3JhcGVyLCBUcm92YXRTY3JhcGVyLAogIEt5ZXJvU2NyYXBlciwgVGhpbmtTcGFpblNjcmFwZXIsCiAgTWlsYW51bmNpb3NTY3JhcGVyLCBZYWVuY29udHJlU2NyYXBlciwgQ2FzYXNhcG9TY3JhcGVyLCBWaWJib1NjcmFwZXIsCiAgR2xvYmFsaXphU2NyYXBlciwgTnVyb2FTY3JhcGVyLCBFbmdlbFZvbGtlcnNTY3JhcGVyLCBUZWNub2Nhc2FTY3JhcGVyLAogIEVyYVNwYWluU2NyYXBlciwgUmVtYXhTY3JhcGVyLCBJbm1vYmlsaWFyaWFTY3JhcGVyLCBTcGFpbkhvdXNlc1NjcmFwZXIsCiAgSG9scHJvcFNjcmFwZXIsCn07Cgpjb25zdCBnZW9TZXJ2aWNlID0gbmV3IEdlb2NvZGluZ1NlcnZpY2UoKTsKY29uc3Qgc2NvcmluZ1NlcnZpY2UgPSBuZXcgU2NvcmluZ1NlcnZpY2UoKTsKY29uc3QgZGVkdXBsaWNhdGlvblNlcnZpY2UgPSBuZXcgRGVkdXBsaWNhdGlvblNlcnZpY2UoKTsKCmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVNlcnZpY2UgewogIGFzeW5jIGdldEFsbFByb3BlcnRpZXMoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7CiAgICByZXR1cm4gUHJvcGVydHlNb2RlbC5maW5kQWxsKCk7CiAgfQoKICBhc3luYyBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoZmlsdGVyOiBQYXJ0aWFsPEZpbHRlcj4pOiBQcm9taXNlPFByb3BlcnR5W10+IHsKICAgIHJldHVybiBQcm9wZXJ0eU1vZGVsLmZpbHRlckFkdmFuY2VkKAogICAgICBmaWx0ZXIubWluX3ByaWNlLCBmaWx0ZXIubWF4X3ByaWNlLCBmaWx0ZXIucHJvcGVydHlfdHlwZSwKICAgICAgZmlsdGVyLm11bmljaXBhbGl0eSwgZmlsdGVyLm1pbl9yb29tcywgZmlsdGVyLm1pbl9zaXplX20yCiAgICApOwogIH0KCiAgYXN5bmMgZ2V0UHJvcGVydHlCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFByb3BlcnR5IHwgbnVsbD4gewogICAgcmV0dXJuIFByb3BlcnR5TW9kZWwuZmluZEJ5SWQocGFyc2VJbnQoaWQpKTsKICB9CgogIGFzeW5jIGNyZWF0ZVByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb21pc2U8UHJvcGVydHk+IHsKICAgIGF3YWl0IFByb3BlcnR5TW9kZWwudXBzZXJ0KHByb3BlcnR5KTsKICAgIHJldHVybiBwcm9wZXJ0eTsKICB9CgogIGFzeW5jIHVwZGF0ZVByb3BlcnR5KGlkOiBzdHJpbmcsIHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb21pc2U8UHJvcGVydHkgfCBudWxsPiB7CiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IFByb3BlcnR5TW9kZWwuZmluZEJ5SWQocGFyc2VJbnQoaWQpKTsKICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBudWxsOwogICAgYXdhaXQgUHJvcGVydHlNb2RlbC51cHNlcnQoeyAuLi5leGlzdGluZywgLi4ucHJvcGVydHkgfSk7CiAgICByZXR1cm4gcHJvcGVydHk7CiAgfQoKICBhc3luYyBkZWxldGVQcm9wZXJ0eShpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7CiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IFByb3BlcnR5TW9kZWwuZmluZEJ5SWQocGFyc2VJbnQoaWQpKTsKICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBmYWxzZTsKICAgIGF3YWl0IFByb3BlcnR5TW9kZWwuZGVsZXRlQnlJZChwYXJzZUludChpZCkpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBhc3luYyBzY3JhcGVBbGwob3BlcmF0aW9uVHlwZTogInNhbGUiIHwgInJlbnQiID0gInNhbGUiKTogUHJvbWlzZTx7IHRvdGFsOiBudW1iZXI7IG5ld19jb3VudDogbnVtYmVyIH0+IHsKICAgIC8vIENvbnN0cnVpciBsaXN0YSBkZSBzY3JhcGVycyBhY3Rpdm9zIHNlZ8O6biBsYSBCRCBkZSBwb3J0YWxlcwogICAgbGV0IHNjcmFwZXJDbGFzc2VzOiBzdHJpbmdbXSA9IFtdOwogICAgdHJ5IHsKICAgICAgY29uc3QgcG9ydGFscyA9IGF3YWl0IFBvcnRhbE1vZGVsLmZpbmRBY3RpdmUoKTsKICAgICAgc2NyYXBlckNsYXNzZXMgPSBwb3J0YWxzLm1hcChwID0+IHAuc2NyYXBlcl9jbGFzcyk7CiAgICB9IGNhdGNoIChfZSkgewogICAgICBzY3JhcGVyQ2xhc3NlcyA9IE9iamVjdC5rZXlzKFNDUkFQRVJfTUFQKTsKICAgIH0KCiAgICBjb25zdCBzY3JhcGVycyA9IHNjcmFwZXJDbGFzc2VzCiAgICAgIC5maWx0ZXIoY2xzID0+IFNDUkFQRVJfTUFQW2Nsc10pCiAgICAgIC5tYXAoY2xzID0+IChuZXcgU0NSQVBFUl9NQVBbY2xzXSgpKS5zZXRPcGVyYXRpb25UeXBlKG9wZXJhdGlvblR5cGUpKTsKCiAgICBidXNMb2coImluZm8iLCBgVXNhbmRvICR7c2NyYXBlcnMubGVuZ3RofSBwb3J0YWxlcyBhY3Rpdm9zICgke29wZXJhdGlvblR5cGV9KTogJHtzY3JhcGVyQ2xhc3Nlcy5maWx0ZXIoYyA9PiBTQ1JBUEVSX01BUFtjXSkuam9pbigiLCAiKX1gKTsKCiAgICBsZXQgdG90YWwgPSAwOwogICAgbGV0IG5ld19jb3VudCA9IDA7CiAgICBjb25zdCBzYXZlZElkczogbnVtYmVyW10gPSBbXTsKCiAgICBmb3IgKGNvbnN0IHNjcmFwZXIgb2Ygc2NyYXBlcnMpIHsKICAgICAgY29uc3QgcG9ydGFsTmFtZTogc3RyaW5nID0gc2NyYXBlci5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyAiU2NyYXBlciI7CiAgICAgIHRyeSB7CiAgICAgICAgYnVzTG9nKCJpbmZvIiwgYEluaWNpYW5kbyBzY3JhcGluZy4uLmAsIHBvcnRhbE5hbWUpOwogICAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAic3RhcnQiIH0pOwogICAgICAgIGNvbnN0IHNjcmFwZVN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCk7CiAgICAgICAgY29uc3QgcHJvcHM6IFByb3BlcnR5W10gPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSgpOwogICAgICAgIHRvdGFsICs9IHByb3BzLmxlbmd0aDsKICAgICAgICBidXNMb2coImluZm8iLCBgT2J0ZW5pZGFzICR7cHJvcHMubGVuZ3RofSBwcm9waWVkYWRlc2AsIHBvcnRhbE5hbWUpOwoKICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5fc2F2ZVByb3BlcnR5KHByb3ApOwogICAgICAgICAgaWYgKHNhdmVkKSB7IG5ld19jb3VudCsrOyBzYXZlZElkcy5wdXNoKHNhdmVkKTsgfQogICAgICAgIH0KCiAgICAgICAgLy8gQXJjaGl2YXIgYW51bmNpb3MgZGVsIHBvcnRhbCBxdWUgeWEgbm8gZXN0w6FuIHB1YmxpY2Fkb3MKICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3Qgc3JjOiBzdHJpbmcgPSBzY3JhcGVyLnNvdXJjZSA/PyBwcm9wc1swXS5zb3VyY2U7CiAgICAgICAgICBjb25zdCBhcmNoaXZlZCA9IGF3YWl0IFByb3BlcnR5TW9kZWwuYXJjaGl2ZVN0YWxlQnlTb3VyY2Uoc3JjLCBzY3JhcGVTdGFydGVkQXQpOwogICAgICAgICAgaWYgKGFyY2hpdmVkID4gMCkgYnVzTG9nKCJpbmZvIiwgYCR7YXJjaGl2ZWR9IGFudW5jaW8ocykgYXJjaGl2YWRvcyAoeWEgbm8gcHVibGljYWRvcylgLCBwb3J0YWxOYW1lKTsKICAgICAgICB9CgogICAgICAgIGJ1c0xvZygic3VjY2VzcyIsIGBDb21wbGV0YWRvOiAke3Byb3BzLmxlbmd0aH0gb2J0ZW5pZGFzLCAke25ld19jb3VudH0gZ3VhcmRhZGFzL2FjdHVhbGl6YWRhc2AsIHBvcnRhbE5hbWUpOwogICAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAiZG9uZSIsIHRvdGFsOiBwcm9wcy5sZW5ndGgsIHNhdmVkOiBuZXdfY291bnQgfSk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGJ1c0xvZygiZXJyb3IiLCBgRXJyb3I6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gLCBwb3J0YWxOYW1lKTsKICAgICAgICBzY3JhcGVyQnVzLnByb2dyZXNzKHsgcG9ydGFsOiBwb3J0YWxOYW1lLCBwaGFzZTogImVycm9yIiwgbXNnOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pOwogICAgICB9CiAgICB9CgogICAgYnVzTG9nKCJzdWNjZXNzIiwgYFNjcmFwaW5nIGNvbXBsZXRhZG86ICR7dG90YWx9IHByb3BpZWRhZGVzIHByb2Nlc2FkYXMsICR7bmV3X2NvdW50fSBndWFyZGFkYXMvYWN0dWFsaXphZGFzYCk7CgogICAgLy8gUG9zdC1wcm9jZXNhZG8gYXPDrW5jcm9ubzogc2NvcmluZyArIGRlZHVwbGljYWNpw7NuCiAgICB0aGlzLl9wb3N0UHJvY2VzcygpOwoKICAgIHJldHVybiB7IHRvdGFsLCBuZXdfY291bnQgfTsKICB9CgogIC8qKiBFamVjdXRhIGVsIHNjcmFwaW5nIGRlIFVOIMO6bmljbyBwb3J0YWwgcG9yIHN1IHNjcmFwZXJfY2xhc3MgKi8KICBhc3luYyBzY3JhcGVQb3J0YWwoc2NyYXBlckNsYXNzOiBzdHJpbmcsIG9wZXJhdGlvblR5cGU6ICJzYWxlIiB8ICJyZW50IiA9ICJzYWxlIik6IFByb21pc2U8eyB0b3RhbDogbnVtYmVyOyBuZXdfY291bnQ6IG51bWJlciB9PiB7CiAgICBjb25zdCBTY3JhcGVyQ3RvciA9IFNDUkFQRVJfTUFQW3NjcmFwZXJDbGFzc107CiAgICBpZiAoIVNjcmFwZXJDdG9yKSB0aHJvdyBuZXcgRXJyb3IoYFNjcmFwZXIgbm8gZW5jb250cmFkbzogJHtzY3JhcGVyQ2xhc3N9YCk7CiAgICBjb25zdCBzY3JhcGVyID0gbmV3IFNjcmFwZXJDdG9yKCkuc2V0T3BlcmF0aW9uVHlwZShvcGVyYXRpb25UeXBlKTsKICAgIGNvbnN0IHBvcnRhbE5hbWUgPSBzY3JhcGVyQ2xhc3MucmVwbGFjZSgvU2NyYXBlciQvLCAiIikucmVwbGFjZSgvUGxheXdyaWdodCQvLCAiIChQbGF5d3JpZ2h0KSIpOwogICAgYnVzTG9nKCJpbmZvIiwgYEluaWNpYW5kbyBzY3JhcGluZy4uLmAsIHBvcnRhbE5hbWUpOwogICAgc2NyYXBlckJ1cy5wcm9ncmVzcyh7IHBvcnRhbDogcG9ydGFsTmFtZSwgcGhhc2U6ICJzdGFydCIgfSk7CgogICAgbGV0IHRvdGFsID0gMDsKICAgIGxldCBuZXdfY291bnQgPSAwOwoKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNjcmFwZVN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCk7CiAgICAgIGNvbnN0IHByb3BzOiBQcm9wZXJ0eVtdID0gYXdhaXQgc2NyYXBlci5zY3JhcGUoKTsKICAgICAgdG90YWwgPSBwcm9wcy5sZW5ndGg7CiAgICAgIGJ1c0xvZygiaW5mbyIsIGBPYnRlbmlkYXMgJHtwcm9wcy5sZW5ndGh9IHByb3BpZWRhZGVzIGRlbCBwb3J0YWxgLCBwb3J0YWxOYW1lKTsKICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7CiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLl9zYXZlUHJvcGVydHkocHJvcCk7CiAgICAgICAgaWYgKHNhdmVkKSBuZXdfY291bnQrKzsKICAgICAgfQogICAgICAvLyBBcmNoaXZhciBhbnVuY2lvcyBkZWwgcG9ydGFsIHF1ZSB5YSBubyBlc3TDoW4gcHVibGljYWRvcwogICAgICBpZiAocHJvcHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHNyYzogc3RyaW5nID0gc2NyYXBlci5zb3VyY2UgPz8gcHJvcHNbMF0uc291cmNlOwogICAgICAgIGNvbnN0IGFyY2hpdmVkID0gYXdhaXQgUHJvcGVydHlNb2RlbC5hcmNoaXZlU3RhbGVCeVNvdXJjZShzcmMsIHNjcmFwZVN0YXJ0ZWRBdCk7CiAgICAgICAgaWYgKGFyY2hpdmVkID4gMCkgYnVzTG9nKCJpbmZvIiwgYCR7YXJjaGl2ZWR9IGFudW5jaW8ocykgYXJjaGl2YWRvcyAoeWEgbm8gcHVibGljYWRvcylgLCBwb3J0YWxOYW1lKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGJ1c0xvZygiZXJyb3IiLCBgRXJyb3I6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gLCBwb3J0YWxOYW1lKTsKICAgICAgc2NyYXBlckJ1cy5wcm9ncmVzcyh7IHBvcnRhbDogcG9ydGFsTmFtZSwgcGhhc2U6ICJlcnJvciIsIG1zZzogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTsKICAgIH0KCiAgICBidXNMb2coInN1Y2Nlc3MiLCBgQ29tcGxldGFkbzogJHt0b3RhbH0gb2J0ZW5pZGFzLCAke25ld19jb3VudH0gZ3VhcmRhZGFzYCwgcG9ydGFsTmFtZSk7CiAgICBzY3JhcGVyQnVzLnByb2dyZXNzKHsgcG9ydGFsOiBwb3J0YWxOYW1lLCBwaGFzZTogImRvbmUiLCB0b3RhbCwgc2F2ZWQ6IG5ld19jb3VudCB9KTsKICAgIHRoaXMuX3Bvc3RQcm9jZXNzKHBvcnRhbE5hbWUpOwogICAgcmV0dXJuIHsgdG90YWwsIG5ld19jb3VudCB9OwogIH0KCiAgLyoqIFNjcmFwaW5nIHJlc3RyaW5naWRvIGEgdW5hIMO6bmljYSB6b25hIGdlb2dyw6FmaWNhICh0b2RvcyBsb3MgcG9ydGFsZXMgYWN0aXZvcykgKi8KICBhc3luYyBzY3JhcGVCeVpvbmUoem9uZVNsdWc6IHN0cmluZywgb3BlcmF0aW9uVHlwZTogInNhbGUiIHwgInJlbnQiID0gInNhbGUiKTogUHJvbWlzZTx7IHRvdGFsOiBudW1iZXI7IG5ld19jb3VudDogbnVtYmVyIH0+IHsKICAgIGNvbnN0IHpvbmUgPSBhd2FpdCBab25lTW9kZWwuZmluZEJ5U2x1Zyh6b25lU2x1Zyk7CiAgICBpZiAoIXpvbmUpIHRocm93IG5ldyBFcnJvcihgWm9uYSAnJHt6b25lU2x1Z30nIG5vIGVuY29udHJhZGEgZW4gbGEgYmFzZSBkZSBkYXRvc2ApOwoKICAgIGxldCBzY3JhcGVyQ2xhc3Nlczogc3RyaW5nW10gPSBbXTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHBvcnRhbHMgPSBhd2FpdCBQb3J0YWxNb2RlbC5maW5kQWN0aXZlKCk7CiAgICAgIHNjcmFwZXJDbGFzc2VzID0gcG9ydGFscy5tYXAocCA9PiBwLnNjcmFwZXJfY2xhc3MpOwogICAgfSBjYXRjaCAoX2UpIHsKICAgICAgc2NyYXBlckNsYXNzZXMgPSBPYmplY3Qua2V5cyhTQ1JBUEVSX01BUCk7CiAgICB9CgogICAgY29uc3Qgc2NyYXBlcnMgPSBzY3JhcGVyQ2xhc3NlcwogICAgICAuZmlsdGVyKGNscyA9PiBTQ1JBUEVSX01BUFtjbHNdKQogICAgICAubWFwKGNscyA9PiAobmV3IFNDUkFQRVJfTUFQW2Nsc10oKSkuc2V0Wm9uZU92ZXJyaWRlKFt6b25lXSkuc2V0T3BlcmF0aW9uVHlwZShvcGVyYXRpb25UeXBlKSk7CgogICAgYnVzTG9nKCJpbmZvIiwgYFNjcmFwaW5nIHpvbmEgIiR7em9uZS5uYW1lfSIg4oCUICR7c2NyYXBlcnMubGVuZ3RofSBwb3J0YWxlc2ApOwoKICAgIGxldCB0b3RhbCA9IDA7CiAgICBsZXQgbmV3X2NvdW50ID0gMDsKCiAgICBmb3IgKGNvbnN0IHNjcmFwZXIgb2Ygc2NyYXBlcnMpIHsKICAgICAgY29uc3QgcG9ydGFsTmFtZTogc3RyaW5nID0gc2NyYXBlci5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyAiU2NyYXBlciI7CiAgICAgIHRyeSB7CiAgICAgICAgYnVzTG9nKCJpbmZvIiwgYEluaWNpYW5kbyBzY3JhcGluZy4uLmAsIHBvcnRhbE5hbWUpOwogICAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAic3RhcnQiIH0pOwogICAgICAgIGNvbnN0IHByb3BzOiBQcm9wZXJ0eVtdID0gYXdhaXQgc2NyYXBlci5zY3JhcGUoKTsKICAgICAgICB0b3RhbCArPSBwcm9wcy5sZW5ndGg7CiAgICAgICAgYnVzTG9nKCJpbmZvIiwgYE9idGVuaWRhcyAke3Byb3BzLmxlbmd0aH0gcHJvcGllZGFkZXNgLCBwb3J0YWxOYW1lKTsKICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5fc2F2ZVByb3BlcnR5KHByb3ApOwogICAgICAgICAgaWYgKHNhdmVkKSBuZXdfY291bnQrKzsKICAgICAgICB9CiAgICAgICAgc2NyYXBlckJ1cy5wcm9ncmVzcyh7IHBvcnRhbDogcG9ydGFsTmFtZSwgcGhhc2U6ICJkb25lIiwgdG90YWw6IHByb3BzLmxlbmd0aCwgc2F2ZWQ6IG5ld19jb3VudCB9KTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgYnVzTG9nKCJlcnJvciIsIGBFcnJvcjogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAsIHBvcnRhbE5hbWUpOwogICAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAiZXJyb3IiLCBtc2c6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7CiAgICAgIH0KICAgIH0KCiAgICBidXNMb2coInN1Y2Nlc3MiLCBgWm9uYSAiJHt6b25lLm5hbWV9IiBjb21wbGV0YWRhOiAke3RvdGFsfSBwcm9waWVkYWRlcyBwcm9jZXNhZGFzLCAke25ld19jb3VudH0gZ3VhcmRhZGFzYCk7CiAgICB0aGlzLl9wb3N0UHJvY2Vzcyhgem9uYToke3pvbmUubmFtZX1gKTsKICAgIHJldHVybiB7IHRvdGFsLCBuZXdfY291bnQgfTsKICB9CgogIC8qKiBSZS1nZW9jb2RpZmljYSBwcm9waWVkYWRlcyBxdWUgdGllbmVuIGNvb3JkZW5hZGFzIGRlIGNlbnRybyBkZSBtdW5pY2lwaW8gZXhhY3RhcyAqLwogIGFzeW5jIHJlR2VvY29kZUFsbCgpOiBQcm9taXNlPHsgdXBkYXRlZDogbnVtYmVyIH0+IHsKICAgIC8vIFVzYXIgY2VudHJvcyBkZSB6b25hIGRlc2RlIGxhIEJEIGVuIGx1Z2FyIGRlIHZhbG9yZXMgaGFyZGNvZGVhZG9zCiAgICBjb25zdCB6b25lcyA9IGF3YWl0IFpvbmVNb2RlbC5maW5kQWN0aXZlKCk7CiAgICBjb25zdCBjZW50ZXJDb29yZHMgPSB6b25lcy5tYXAoeiA9PiBbei5sYXQsIHoubG5nXSBhcyBbbnVtYmVyLCBudW1iZXJdKTsKICAgIGNvbnN0IGlzQ2VudGVyID0gKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcikgPT4KICAgICAgY2VudGVyQ29vcmRzLnNvbWUoKFtsYSwgbG5dKSA9PiBNYXRoLmFicyhsYSAtIGxhdCkgPCAwLjAwMDEgJiYgTWF0aC5hYnMobG4gLSBsbmcpIDwgMC4wMDAxKTsKCiAgICBjb25zdCBhbGwgPSBhd2FpdCBQcm9wZXJ0eU1vZGVsLmZpbmRBbGwoKTsKICAgIGxldCB1cGRhdGVkID0gMDsKICAgIGZvciAoY29uc3QgcHJvcCBvZiBhbGwpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIXByb3AubGF0IHx8ICFwcm9wLmxuZyB8fCBpc0NlbnRlcihwcm9wLmxhdCwgcHJvcC5sbmcpKSB7CiAgICAgICAgICBjb25zdCBnZW9RdWVyeSA9IFtwcm9wLmxvY2F0aW9uLCBwcm9wLm11bmljaXBhbGl0eSwgIlZhbGVuY2lhIiwgIkVzcGHDsWEiXQogICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKS5qb2luKCIsICIpOwogICAgICAgICAgbGV0IGdlbzogeyBsYXQ6IG51bWJlcjsgbG5nOiBudW1iZXIgfSB8IG51bGwgPSBudWxsOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZ2VvID0gYXdhaXQgZ2VvU2VydmljZS5nZXRDb29yZGluYXRlcyhnZW9RdWVyeSk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgaWYgKHByb3AubXVuaWNpcGFsaXR5KSB7CiAgICAgICAgICAgICAgZ2VvID0gYXdhaXQgZ2VvU2VydmljZS5nZW9jb2RlTXVuaWNpcGFsaXR5KHByb3AubXVuaWNpcGFsaXR5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGdlbykgewogICAgICAgICAgICBhd2FpdCBQcm9wZXJ0eU1vZGVsLnVwc2VydCh7IC4uLnByb3AsIGxhdDogZ2VvLmxhdCwgbG5nOiBnZW8ubG5nIH0pOwogICAgICAgICAgICB1cGRhdGVkKys7CiAgICAgICAgICB9CiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTEwMCkpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoX2UpIHsgLyogc2tpcCAqLyB9CiAgICB9CiAgICByZXR1cm4geyB1cGRhdGVkIH07CiAgfQoKICAvLyDilIDilIDilIAgSGVscGVycyBwcml2YWRvcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCiAgLyoqIEdlb2NvZGlmaWNhIHNpIGZhbHRhLCBjYWxjdWxhIHByZWNpby9twrIsIGd1YXJkYSBlbiBCRCB5IHJlZ2lzdHJhIGhpc3RvcmlhbC4KICAgKiAgRGV2dWVsdmUgZWwgSUQgZ3VhcmRhZG8gbyBudWxsIHNpIGh1Ym8gZXJyb3IgKGR1cGxpY2FkbyB1IG90cm8pLiAqLwogIHByaXZhdGUgYXN5bmMgX3NhdmVQcm9wZXJ0eShwcm9wOiBQcm9wZXJ0eSk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4gewogICAgdHJ5IHsKICAgICAgaWYgKCFwcm9wLmxhdCAmJiAhcHJvcC5sbmcpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZ2VvUXVlcnkgPSAoW3Byb3AubG9jYXRpb24sIHByb3AubXVuaWNpcGFsaXR5LCAiVmFsZW5jaWEiLCAiRXNwYcOxYSJdIGFzIHN0cmluZ1tdKQogICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKS5qb2luKCIsICIpOwogICAgICAgICAgY29uc3QgZ2VvID0gYXdhaXQgZ2VvU2VydmljZS5nZXRDb29yZGluYXRlcyhnZW9RdWVyeSk7CiAgICAgICAgICBwcm9wLmxhdCA9IGdlby5sYXQ7CiAgICAgICAgICBwcm9wLmxuZyA9IGdlby5sbmc7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBpZiAocHJvcC5tdW5pY2lwYWxpdHkpIHsKICAgICAgICAgICAgY29uc3QgZ2VvID0gYXdhaXQgZ2VvU2VydmljZS5nZW9jb2RlTXVuaWNpcGFsaXR5KHByb3AubXVuaWNpcGFsaXR5KTsKICAgICAgICAgICAgaWYgKGdlbykgeyBwcm9wLmxhdCA9IGdlby5sYXQ7IHByb3AubG5nID0gZ2VvLmxuZzsgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocHJvcC5wcmljZSA+IDAgJiYgKHByb3Auc2l6ZV9tMiB8fCAwKSA+IDApIHsKICAgICAgICAocHJvcCBhcyBhbnkpLnByaWNlX3Blcl9tMiA9IE1hdGgucm91bmQocHJvcC5wcmljZSAvIHByb3Auc2l6ZV9tMiEpOwogICAgICB9CiAgICAgIGNvbnN0IHNhdmVkSWQgPSBhd2FpdCBQcm9wZXJ0eU1vZGVsLnVwc2VydChwcm9wKTsKICAgICAgaWYgKHNhdmVkSWQgJiYgcHJvcC5wcmljZSA+IDApIHsKICAgICAgICBhd2FpdCBQcmljZUhpc3RvcnlNb2RlbC5yZWNvcmRJZkNoYW5nZWQoc2F2ZWRJZCwgcHJvcC5wcmljZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNhdmVkSWQgPz8gbnVsbDsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gbnVsbDsgLy8gc2tpcCBkdXBsaWNhdGVzIC8gY29uc3RyYWludCBlcnJvcnMKICAgIH0KICB9CgogIC8qKiBMYW56YSBzY29yaW5nICsgZGVkdXBsaWNhY2nDs24gZGUgZm9ybWEgYXPDrW5jcm9uYSBzaW4gYmxvcXVlYXIgbGEgcmVzcHVlc3RhICovCiAgcHJpdmF0ZSBfcG9zdFByb2Nlc3MobGFiZWwgPSAiIik6IHZvaWQgewogICAgc2V0SW1tZWRpYXRlKGFzeW5jICgpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBidXNMb2coImluZm8iLCAiQ2FsY3VsYW5kbyBzY29yZXMuLi4iLCBsYWJlbCk7CiAgICAgICAgYXdhaXQgc2NvcmluZ1NlcnZpY2Uuc2NvcmVBbGwoKTsKICAgICAgICBidXNMb2coImluZm8iLCAiRWplY3V0YW5kbyBkZWR1cGxpY2FjacOzbi4uLiIsIGxhYmVsKTsKICAgICAgICBhd2FpdCBkZWR1cGxpY2F0aW9uU2VydmljZS5yZXNldER1cGxpY2F0ZXMoKTsKICAgICAgICBhd2FpdCBkZWR1cGxpY2F0aW9uU2VydmljZS5ydW5EZWR1cGxpY2F0aW9uKCk7CiAgICAgICAgYnVzTG9nKCJzdWNjZXNzIiwgIlBvc3QtcHJvY2VzYWRvIGNvbXBsZXRhZG8g4pyFIiwgbGFiZWwpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBidXNMb2coImVycm9yIiwgYFtQb3N0LXNjcmFwaW5nXSBFcnJvcjogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAsIGxhYmVsKTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvKiogRGF0b3MgZGUgYW5hbHl0aWNzIHBhcmEgZWwgZGFzaGJvYXJkICovCiAgYXN5bmMgZ2V0QW5hbHl0aWNzKCk6IFByb21pc2U8YW55PiB7CiAgICBjb25zdCBbYnlQb3J0YWxdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KGAKICAgICAgU0VMRUNUIHNvdXJjZSwgQ09VTlQoKikgQVMgY291bnQsIEFWRyhwcmljZSkgQVMgYXZnX3ByaWNlLCBBVkcocHJpY2VfcGVyX20yKSBBUyBhdmdfcG0yCiAgICAgIEZST00gcHJvcGVydGllcyBXSEVSRSBpc19kdXBsaWNhdGUgPSAwIE9SIGlzX2R1cGxpY2F0ZSBJUyBOVUxMCiAgICAgIEdST1VQIEJZIHNvdXJjZSBPUkRFUiBCWSBjb3VudCBERVNDCiAgICBgKTsKCiAgICBjb25zdCBbYnlNdW5pXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPihgCiAgICAgIFNFTEVDVCBtdW5pY2lwYWxpdHksIENPVU5UKCopIEFTIGNvdW50LCBBVkcocHJpY2UpIEFTIGF2Z19wcmljZSwKICAgICAgICAgICAgIEFWRyhwcmljZV9wZXJfbTIpIEFTIGF2Z19wbTIsIEFWRyhzY29yZSkgQVMgYXZnX3Njb3JlCiAgICAgIEZST00gcHJvcGVydGllcyBXSEVSRSBpc19kdXBsaWNhdGUgPSAwIE9SIGlzX2R1cGxpY2F0ZSBJUyBOVUxMCiAgICAgIEdST1VQIEJZIG11bmljaXBhbGl0eSBPUkRFUiBCWSBjb3VudCBERVNDCiAgICBgKTsKCiAgICBjb25zdCBbYnlUeXBlXSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPihgCiAgICAgIFNFTEVDVCBwcm9wZXJ0eV90eXBlLCBDT1VOVCgqKSBBUyBjb3VudCwgQVZHKHByaWNlKSBBUyBhdmdfcHJpY2UKICAgICAgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGlzX2R1cGxpY2F0ZSA9IDAgT1IgaXNfZHVwbGljYXRlIElTIE5VTEwKICAgICAgR1JPVVAgQlkgcHJvcGVydHlfdHlwZSBPUkRFUiBCWSBjb3VudCBERVNDCiAgICBgKTsKCiAgICBjb25zdCBbc3VtbWFyeV0gPSBhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oYAogICAgICBTRUxFQ1QgQ09VTlQoKikgQVMgdG90YWwsCiAgICAgICAgICAgICBDT1VOVChDQVNFIFdIRU4gaXNfZHVwbGljYXRlID0gMSBUSEVOIDEgRU5EKSBBUyBkdXBsaWNhdGVzLAogICAgICAgICAgICAgQVZHKHByaWNlKSBBUyBhdmdfcHJpY2UsIEFWRyhwcmljZV9wZXJfbTIpIEFTIGF2Z19wbTIsCiAgICAgICAgICAgICBBVkcoc2NvcmUpIEFTIGF2Z19zY29yZSwKICAgICAgICAgICAgIE1JTihwcmljZSkgQVMgbWluX3ByaWNlLCBNQVgocHJpY2UpIEFTIG1heF9wcmljZSwKICAgICAgICAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBwcmljZV9oaXN0b3J5KSBBUyBwcmljZV9yZWNvcmRzCiAgICAgIEZST00gcHJvcGVydGllcwogICAgYCk7CgogICAgY29uc3QgcHJpY2VEcm9wcyA9IGF3YWl0IFByaWNlSGlzdG9yeU1vZGVsLmdldFByaWNlRHJvcFN0YXRzKCk7CiAgICBjb25zdCBwcmljZU92ZXJUaW1lID0gYXdhaXQgUHJpY2VIaXN0b3J5TW9kZWwuZ2V0T3ZlcmFsbFRyZW5kKDkwKTsKCiAgICByZXR1cm4gewogICAgICBzdW1tYXJ5OiBzdW1tYXJ5WzBdLAogICAgICBieVBvcnRhbCwgYnlNdW5pLCBieVR5cGUsCiAgICAgIHByaWNlRHJvcHMsIHByaWNlT3ZlclRpbWUsCiAgICB9OwogIH0KfQoKZXhwb3J0IGRlZmF1bHQgbmV3IFByb3BlcnR5U2VydmljZSgpOwoK","afterExisted":true,"afterHash":"467d97fd5b77c5cbff2edf28e18554d2ebedccaf3ae7b4a7ad48840c9f100bd5","afterContent":"aW1wb3J0IHsgUHJvcGVydHlNb2RlbCB9IGZyb20gIi4uL21vZGVscy9wcm9wZXJ0eU1vZGVsIjsKaW1wb3J0IHsgUHJpY2VIaXN0b3J5TW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvcHJpY2VIaXN0b3J5TW9kZWwiOwppbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gIi4uL3R5cGVzL3Byb3BlcnR5IjsKaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAiLi4vdHlwZXMvZmlsdGVyIjsKaW1wb3J0IHsgYnVzTG9nLCBzY3JhcGVyQnVzIH0gZnJvbSAiLi4vdXRpbHMvc2NyYXBlckV2ZW50QnVzIjsKaW1wb3J0IHsKICBJZGVhbGlzdGFQbGF5d3JpZ2h0U2NyYXBlciwgRm90b2Nhc2FQbGF5d3JpZ2h0U2NyYXBlciwKICBIYWJpdGFjbGlhU2NyYXBlciwgUGlzb3NTY3JhcGVyLCBUcm92YXRTY3JhcGVyLAogIEt5ZXJvU2NyYXBlciwgVGhpbmtTcGFpblNjcmFwZXIsCiAgTWlsYW51bmNpb3NTY3JhcGVyLCBZYWVuY29udHJlU2NyYXBlciwgQ2FzYXNhcG9TY3JhcGVyLCBWaWJib1NjcmFwZXIsCiAgR2xvYmFsaXphU2NyYXBlciwgTnVyb2FTY3JhcGVyLCBFbmdlbFZvbGtlcnNTY3JhcGVyLCBUZWNub2Nhc2FTY3JhcGVyLAogIEVyYVNwYWluU2NyYXBlciwgUmVtYXhTY3JhcGVyLCBJbm1vYmlsaWFyaWFTY3JhcGVyLCBTcGFpbkhvdXNlc1NjcmFwZXIsCiAgSG9scHJvcFNjcmFwZXIsCn0gZnJvbSAiLi4vc2NyYXBlcnMvaW5kZXgiOwppbXBvcnQgeyBHZW9jb2RpbmdTZXJ2aWNlIH0gZnJvbSAiLi9nZW9jb2RpbmdTZXJ2aWNlIjsKaW1wb3J0IHsgU2NvcmluZ1NlcnZpY2UgfSBmcm9tICIuL3Njb3JpbmdTZXJ2aWNlIjsKaW1wb3J0IHsgRGVkdXBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICIuL2RlZHVwbGljYXRpb25TZXJ2aWNlIjsKaW1wb3J0IHsgUG9ydGFsTW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvcG9ydGFsTW9kZWwiOwppbXBvcnQgeyBab25lTW9kZWwgfSBmcm9tICIuLi9tb2RlbHMvem9uZU1vZGVsIjsKaW1wb3J0IHBvb2wgZnJvbSAiLi4vY29uZmlnL2RiIjsKaW1wb3J0IHsgUm93RGF0YVBhY2tldCB9IGZyb20gIm15c3FsMiI7CmltcG9ydCB7IHN1cHBvcnRzU2NyYXBlck9wZXJhdGlvbiB9IGZyb20gIi4uL3NjcmFwZXJzL2NhcGFiaWxpdGllcyI7CgovLyBNYXBhIGRlIG5vbWJyZSBkZSBjbGFzZSDihpIgY29uc3RydWN0b3IgZGUgc2NyYXBlciAoUGxheXdyaWdodCA+IENoZWVyaW8gcGFyYSBwb3J0YWxlcyBKUykKY29uc3QgU0NSQVBFUl9NQVA6IFJlY29yZDxzdHJpbmcsIG5ldyAoKSA9PiBhbnk+ID0gewogIElkZWFsaXN0YVNjcmFwZXI6IElkZWFsaXN0YVBsYXl3cmlnaHRTY3JhcGVyLCAgICAgICAgICAgLy8gYWxpYXMgbGVnYWN5IOKGkiBQbGF5d3JpZ2h0CiAgSWRlYWxpc3RhUGxheXdyaWdodFNjcmFwZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGF2ZSBkaXJlY3RhICh2YWxvciBhY3R1YWwgZW4gQkQpCiAgRm90b2Nhc2FTY3JhcGVyOiBGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyLCAgICAgICAgICAgICAvLyBhbGlhcyBsZWdhY3kg4oaSIFBsYXl3cmlnaHQKICBGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXZlIGRpcmVjdGEgKHZhbG9yIGFjdHVhbCBlbiBCRCkKICBIYWJpdGFjbGlhU2NyYXBlciwgUGlzb3NTY3JhcGVyLCBUcm92YXRTY3JhcGVyLAogIEt5ZXJvU2NyYXBlciwgVGhpbmtTcGFpblNjcmFwZXIsCiAgTWlsYW51bmNpb3NTY3JhcGVyLCBZYWVuY29udHJlU2NyYXBlciwgQ2FzYXNhcG9TY3JhcGVyLCBWaWJib1NjcmFwZXIsCiAgR2xvYmFsaXphU2NyYXBlciwgTnVyb2FTY3JhcGVyLCBFbmdlbFZvbGtlcnNTY3JhcGVyLCBUZWNub2Nhc2FTY3JhcGVyLAogIEVyYVNwYWluU2NyYXBlciwgUmVtYXhTY3JhcGVyLCBJbm1vYmlsaWFyaWFTY3JhcGVyLCBTcGFpbkhvdXNlc1NjcmFwZXIsCiAgSG9scHJvcFNjcmFwZXIsCn07Cgpjb25zdCBnZW9TZXJ2aWNlID0gbmV3IEdlb2NvZGluZ1NlcnZpY2UoKTsKY29uc3Qgc2NvcmluZ1NlcnZpY2UgPSBuZXcgU2NvcmluZ1NlcnZpY2UoKTsKY29uc3QgZGVkdXBsaWNhdGlvblNlcnZpY2UgPSBuZXcgRGVkdXBsaWNhdGlvblNlcnZpY2UoKTsKCmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVNlcnZpY2UgewogIGFzeW5jIGdldEFsbFByb3BlcnRpZXMoKTogUHJvbWlzZTxQcm9wZXJ0eVtdPiB7CiAgICByZXR1cm4gUHJvcGVydHlNb2RlbC5maW5kQWxsKCk7CiAgfQoKICBhc3luYyBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoZmlsdGVyOiBQYXJ0aWFsPEZpbHRlcj4pOiBQcm9taXNlPFByb3BlcnR5W10+IHsKICAgIHJldHVybiBQcm9wZXJ0eU1vZGVsLmZpbHRlckFkdmFuY2VkKAogICAgICBmaWx0ZXIubWluX3ByaWNlLCBmaWx0ZXIubWF4X3ByaWNlLCBmaWx0ZXIucHJvcGVydHlfdHlwZSwKICAgICAgZmlsdGVyLm11bmljaXBhbGl0eSwgZmlsdGVyLm1pbl9yb29tcywgZmlsdGVyLm1pbl9zaXplX20yCiAgICApOwogIH0KCiAgYXN5bmMgZ2V0UHJvcGVydHlCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFByb3BlcnR5IHwgbnVsbD4gewogICAgcmV0dXJuIFByb3BlcnR5TW9kZWwuZmluZEJ5SWQocGFyc2VJbnQoaWQpKTsKICB9CgogIGFzeW5jIGNyZWF0ZVByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb21pc2U8UHJvcGVydHk+IHsKICAgIGF3YWl0IFByb3BlcnR5TW9kZWwudXBzZXJ0KHByb3BlcnR5KTsKICAgIHJldHVybiBwcm9wZXJ0eTsKICB9CgogIGFzeW5jIHVwZGF0ZVByb3BlcnR5KGlkOiBzdHJpbmcsIHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb21pc2U8UHJvcGVydHkgfCBudWxsPiB7CiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IFByb3BlcnR5TW9kZWwuZmluZEJ5SWQocGFyc2VJbnQoaWQpKTsKICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBudWxsOwogICAgYXdhaXQgUHJvcGVydHlNb2RlbC51cHNlcnQoeyAuLi5leGlzdGluZywgLi4ucHJvcGVydHkgfSk7CiAgICByZXR1cm4gcHJvcGVydHk7CiAgfQoKICBhc3luYyBkZWxldGVQcm9wZXJ0eShpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7CiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IFByb3BlcnR5TW9kZWwuZmluZEJ5SWQocGFyc2VJbnQoaWQpKTsKICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBmYWxzZTsKICAgIGF3YWl0IFByb3BlcnR5TW9kZWwuZGVsZXRlQnlJZChwYXJzZUludChpZCkpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBhc3luYyBzY3JhcGVBbGwob3BlcmF0aW9uVHlwZTogInNhbGUiIHwgInJlbnQiID0gInNhbGUiKTogUHJvbWlzZTx7IHRvdGFsOiBudW1iZXI7IG5ld19jb3VudDogbnVtYmVyIH0+IHsKICAgIC8vIENvbnN0cnVpciBsaXN0YSBkZSBzY3JhcGVycyBhY3Rpdm9zIHNlZ8O6biBsYSBCRCBkZSBwb3J0YWxlcwogICAgbGV0IHNjcmFwZXJDbGFzc2VzOiBzdHJpbmdbXSA9IFtdOwogICAgdHJ5IHsKICAgICAgY29uc3QgcG9ydGFscyA9IGF3YWl0IFBvcnRhbE1vZGVsLmZpbmRBY3RpdmUoKTsKICAgICAgc2NyYXBlckNsYXNzZXMgPSBwb3J0YWxzLm1hcChwID0+IHAuc2NyYXBlcl9jbGFzcyk7CiAgICB9IGNhdGNoIChfZSkgewogICAgICBzY3JhcGVyQ2xhc3NlcyA9IE9iamVjdC5rZXlzKFNDUkFQRVJfTUFQKTsKICAgIH0KCiAgICBjb25zdCBrbm93blNjcmFwZXJDbGFzc2VzID0gc2NyYXBlckNsYXNzZXMuZmlsdGVyKGNscyA9PiBTQ1JBUEVSX01BUFtjbHNdKTsKICAgIGNvbnN0IGNvbXBhdGlibGVDbGFzc2VzID0ga25vd25TY3JhcGVyQ2xhc3NlcwogICAgICAuZmlsdGVyKGNscyA9PiBzdXBwb3J0c1NjcmFwZXJPcGVyYXRpb24oY2xzLCBvcGVyYXRpb25UeXBlKSk7CiAgICBjb25zdCB1bnN1cHBvcnRlZENsYXNzZXMgPSBrbm93blNjcmFwZXJDbGFzc2VzCiAgICAgIC5maWx0ZXIoY2xzID0+ICFzdXBwb3J0c1NjcmFwZXJPcGVyYXRpb24oY2xzLCBvcGVyYXRpb25UeXBlKSk7CiAgICBjb25zdCBzY3JhcGVycyA9IGNvbXBhdGlibGVDbGFzc2VzCiAgICAgIC5tYXAoY2xzID0+IChuZXcgU0NSQVBFUl9NQVBbY2xzXSgpKS5zZXRPcGVyYXRpb25UeXBlKG9wZXJhdGlvblR5cGUpKTsKCiAgICBidXNMb2coImluZm8iLCBgVXNhbmRvICR7c2NyYXBlcnMubGVuZ3RofSBwb3J0YWxlcyBhY3Rpdm9zICgke29wZXJhdGlvblR5cGV9KTogJHtjb21wYXRpYmxlQ2xhc3Nlcy5qb2luKCIsICIpfWApOwogICAgaWYgKHVuc3VwcG9ydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7CiAgICAgIGJ1c0xvZygiaW5mbyIsIGBPbWl0aWRvcyBwb3Igbm8gc29wb3J0YXIgJHtvcGVyYXRpb25UeXBlfTogJHt1bnN1cHBvcnRlZENsYXNzZXMuam9pbigiLCAiKX1gKTsKICAgIH0KCiAgICBsZXQgdG90YWwgPSAwOwogICAgbGV0IG5ld19jb3VudCA9IDA7CiAgICBjb25zdCBzYXZlZElkczogbnVtYmVyW10gPSBbXTsKCiAgICBmb3IgKGNvbnN0IHNjcmFwZXIgb2Ygc2NyYXBlcnMpIHsKICAgICAgY29uc3QgcG9ydGFsTmFtZTogc3RyaW5nID0gc2NyYXBlci5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyAiU2NyYXBlciI7CiAgICAgIHRyeSB7CiAgICAgICAgYnVzTG9nKCJpbmZvIiwgYEluaWNpYW5kbyBzY3JhcGluZy4uLmAsIHBvcnRhbE5hbWUpOwogICAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAic3RhcnQiIH0pOwogICAgICAgIGNvbnN0IHNjcmFwZVN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCk7CiAgICAgICAgY29uc3QgcHJvcHM6IFByb3BlcnR5W10gPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSgpOwogICAgICAgIHRvdGFsICs9IHByb3BzLmxlbmd0aDsKICAgICAgICBidXNMb2coImluZm8iLCBgT2J0ZW5pZGFzICR7cHJvcHMubGVuZ3RofSBwcm9waWVkYWRlc2AsIHBvcnRhbE5hbWUpOwoKICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5fc2F2ZVByb3BlcnR5KHByb3ApOwogICAgICAgICAgaWYgKHNhdmVkKSB7IG5ld19jb3VudCsrOyBzYXZlZElkcy5wdXNoKHNhdmVkKTsgfQogICAgICAgIH0KCiAgICAgICAgLy8gQXJjaGl2YXIgYW51bmNpb3MgZGVsIHBvcnRhbCBxdWUgeWEgbm8gZXN0w6FuIHB1YmxpY2Fkb3MKICAgICAgICBpZiAocHJvcHMubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3Qgc3JjOiBzdHJpbmcgPSBzY3JhcGVyLnNvdXJjZSA/PyBwcm9wc1swXS5zb3VyY2U7CiAgICAgICAgICBjb25zdCBhcmNoaXZlZCA9IGF3YWl0IFByb3BlcnR5TW9kZWwuYXJjaGl2ZVN0YWxlQnlTb3VyY2Uoc3JjLCBvcGVyYXRpb25UeXBlLCBzY3JhcGVTdGFydGVkQXQpOwogICAgICAgICAgaWYgKGFyY2hpdmVkID4gMCkgYnVzTG9nKCJpbmZvIiwgYCR7YXJjaGl2ZWR9IGFudW5jaW8ocykgYXJjaGl2YWRvcyAoeWEgbm8gcHVibGljYWRvcylgLCBwb3J0YWxOYW1lKTsKICAgICAgICB9CgogICAgICAgIGJ1c0xvZygic3VjY2VzcyIsIGBDb21wbGV0YWRvOiAke3Byb3BzLmxlbmd0aH0gb2J0ZW5pZGFzLCAke25ld19jb3VudH0gZ3VhcmRhZGFzL2FjdHVhbGl6YWRhc2AsIHBvcnRhbE5hbWUpOwogICAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAiZG9uZSIsIHRvdGFsOiBwcm9wcy5sZW5ndGgsIHNhdmVkOiBuZXdfY291bnQgfSk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGJ1c0xvZygiZXJyb3IiLCBgRXJyb3I6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gLCBwb3J0YWxOYW1lKTsKICAgICAgICBzY3JhcGVyQnVzLnByb2dyZXNzKHsgcG9ydGFsOiBwb3J0YWxOYW1lLCBwaGFzZTogImVycm9yIiwgbXNnOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pOwogICAgICB9CiAgICB9CgogICAgYnVzTG9nKCJzdWNjZXNzIiwgYFNjcmFwaW5nIGNvbXBsZXRhZG86ICR7dG90YWx9IHByb3BpZWRhZGVzIHByb2Nlc2FkYXMsICR7bmV3X2NvdW50fSBndWFyZGFkYXMvYWN0dWFsaXphZGFzYCk7CgogICAgLy8gUG9zdC1wcm9jZXNhZG8gYXPDrW5jcm9ubzogc2NvcmluZyArIGRlZHVwbGljYWNpw7NuCiAgICB0aGlzLl9wb3N0UHJvY2VzcygpOwoKICAgIHJldHVybiB7IHRvdGFsLCBuZXdfY291bnQgfTsKICB9CgogIC8qKiBFamVjdXRhIGVsIHNjcmFwaW5nIGRlIFVOIMO6bmljbyBwb3J0YWwgcG9yIHN1IHNjcmFwZXJfY2xhc3MgKi8KICBhc3luYyBzY3JhcGVQb3J0YWwoc2NyYXBlckNsYXNzOiBzdHJpbmcsIG9wZXJhdGlvblR5cGU6ICJzYWxlIiB8ICJyZW50IiA9ICJzYWxlIik6IFByb21pc2U8eyB0b3RhbDogbnVtYmVyOyBuZXdfY291bnQ6IG51bWJlciB9PiB7CiAgICBjb25zdCBTY3JhcGVyQ3RvciA9IFNDUkFQRVJfTUFQW3NjcmFwZXJDbGFzc107CiAgICBpZiAoIVNjcmFwZXJDdG9yKSB0aHJvdyBuZXcgRXJyb3IoYFNjcmFwZXIgbm8gZW5jb250cmFkbzogJHtzY3JhcGVyQ2xhc3N9YCk7CiAgICBpZiAoIXN1cHBvcnRzU2NyYXBlck9wZXJhdGlvbihzY3JhcGVyQ2xhc3MsIG9wZXJhdGlvblR5cGUpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgRWwgc2NyYXBlciAke3NjcmFwZXJDbGFzc30gbm8gc29wb3J0YSBsYSBvcGVyYWNpw7NuICcke29wZXJhdGlvblR5cGV9J2ApOwogICAgfQogICAgY29uc3Qgc2NyYXBlciA9IG5ldyBTY3JhcGVyQ3RvcigpLnNldE9wZXJhdGlvblR5cGUob3BlcmF0aW9uVHlwZSk7CiAgICBjb25zdCBwb3J0YWxOYW1lID0gc2NyYXBlckNsYXNzLnJlcGxhY2UoL1NjcmFwZXIkLywgIiIpLnJlcGxhY2UoL1BsYXl3cmlnaHQkLywgIiAoUGxheXdyaWdodCkiKTsKICAgIGJ1c0xvZygiaW5mbyIsIGBJbmljaWFuZG8gc2NyYXBpbmcuLi5gLCBwb3J0YWxOYW1lKTsKICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAic3RhcnQiIH0pOwoKICAgIGxldCB0b3RhbCA9IDA7CiAgICBsZXQgbmV3X2NvdW50ID0gMDsKCiAgICB0cnkgewogICAgICBjb25zdCBzY3JhcGVTdGFydGVkQXQgPSBuZXcgRGF0ZSgpOwogICAgICBjb25zdCBwcm9wczogUHJvcGVydHlbXSA9IGF3YWl0IHNjcmFwZXIuc2NyYXBlKCk7CiAgICAgIHRvdGFsID0gcHJvcHMubGVuZ3RoOwogICAgICBidXNMb2coImluZm8iLCBgT2J0ZW5pZGFzICR7cHJvcHMubGVuZ3RofSBwcm9waWVkYWRlcyBkZWwgcG9ydGFsYCwgcG9ydGFsTmFtZSk7CiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykgewogICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5fc2F2ZVByb3BlcnR5KHByb3ApOwogICAgICAgIGlmIChzYXZlZCkgbmV3X2NvdW50Kys7CiAgICAgIH0KICAgICAgLy8gQXJjaGl2YXIgYW51bmNpb3MgZGVsIHBvcnRhbCBxdWUgeWEgbm8gZXN0w6FuIHB1YmxpY2Fkb3MKICAgICAgaWYgKHByb3BzLmxlbmd0aCA+IDApIHsKICAgICAgICBjb25zdCBzcmM6IHN0cmluZyA9IHNjcmFwZXIuc291cmNlID8/IHByb3BzWzBdLnNvdXJjZTsKICAgICAgICBjb25zdCBhcmNoaXZlZCA9IGF3YWl0IFByb3BlcnR5TW9kZWwuYXJjaGl2ZVN0YWxlQnlTb3VyY2Uoc3JjLCBvcGVyYXRpb25UeXBlLCBzY3JhcGVTdGFydGVkQXQpOwogICAgICAgIGlmIChhcmNoaXZlZCA+IDApIGJ1c0xvZygiaW5mbyIsIGAke2FyY2hpdmVkfSBhbnVuY2lvKHMpIGFyY2hpdmFkb3MgKHlhIG5vIHB1YmxpY2Fkb3MpYCwgcG9ydGFsTmFtZSk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBidXNMb2coImVycm9yIiwgYEVycm9yOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCwgcG9ydGFsTmFtZSk7CiAgICAgIHNjcmFwZXJCdXMucHJvZ3Jlc3MoeyBwb3J0YWw6IHBvcnRhbE5hbWUsIHBoYXNlOiAiZXJyb3IiLCBtc2c6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7CiAgICB9CgogICAgYnVzTG9nKCJzdWNjZXNzIiwgYENvbXBsZXRhZG86ICR7dG90YWx9IG9idGVuaWRhcywgJHtuZXdfY291bnR9IGd1YXJkYWRhc2AsIHBvcnRhbE5hbWUpOwogICAgc2NyYXBlckJ1cy5wcm9ncmVzcyh7IHBvcnRhbDogcG9ydGFsTmFtZSwgcGhhc2U6ICJkb25lIiwgdG90YWwsIHNhdmVkOiBuZXdfY291bnQgfSk7CiAgICB0aGlzLl9wb3N0UHJvY2Vzcyhwb3J0YWxOYW1lKTsKICAgIHJldHVybiB7IHRvdGFsLCBuZXdfY291bnQgfTsKICB9CgogIC8qKiBTY3JhcGluZyByZXN0cmluZ2lkbyBhIHVuYSDDum5pY2Egem9uYSBnZW9ncsOhZmljYSAodG9kb3MgbG9zIHBvcnRhbGVzIGFjdGl2b3MpICovCiAgYXN5bmMgc2NyYXBlQnlab25lKHpvbmVTbHVnOiBzdHJpbmcsIG9wZXJhdGlvblR5cGU6ICJzYWxlIiB8ICJyZW50IiA9ICJzYWxlIik6IFByb21pc2U8eyB0b3RhbDogbnVtYmVyOyBuZXdfY291bnQ6IG51bWJlciB9PiB7CiAgICBjb25zdCB6b25lID0gYXdhaXQgWm9uZU1vZGVsLmZpbmRCeVNsdWcoem9uZVNsdWcpOwogICAgaWYgKCF6b25lKSB0aHJvdyBuZXcgRXJyb3IoYFpvbmEgJyR7em9uZVNsdWd9JyBubyBlbmNvbnRyYWRhIGVuIGxhIGJhc2UgZGUgZGF0b3NgKTsKCiAgICBsZXQgc2NyYXBlckNsYXNzZXM6IHN0cmluZ1tdID0gW107CiAgICB0cnkgewogICAgICBjb25zdCBwb3J0YWxzID0gYXdhaXQgUG9ydGFsTW9kZWwuZmluZEFjdGl2ZSgpOwogICAgICBzY3JhcGVyQ2xhc3NlcyA9IHBvcnRhbHMubWFwKHAgPT4gcC5zY3JhcGVyX2NsYXNzKTsKICAgIH0gY2F0Y2ggKF9lKSB7CiAgICAgIHNjcmFwZXJDbGFzc2VzID0gT2JqZWN0LmtleXMoU0NSQVBFUl9NQVApOwogICAgfQoKICAgIGNvbnN0IGtub3duU2NyYXBlckNsYXNzZXMgPSBzY3JhcGVyQ2xhc3Nlcy5maWx0ZXIoY2xzID0+IFNDUkFQRVJfTUFQW2Nsc10pOwogICAgY29uc3QgY29tcGF0aWJsZUNsYXNzZXMgPSBrbm93blNjcmFwZXJDbGFzc2VzCiAgICAgIC5maWx0ZXIoY2xzID0+IHN1cHBvcnRzU2NyYXBlck9wZXJhdGlvbihjbHMsIG9wZXJhdGlvblR5cGUpKTsKICAgIGNvbnN0IHVuc3VwcG9ydGVkQ2xhc3NlcyA9IGtub3duU2NyYXBlckNsYXNzZXMKICAgICAgLmZpbHRlcihjbHMgPT4gIXN1cHBvcnRzU2NyYXBlck9wZXJhdGlvbihjbHMsIG9wZXJhdGlvblR5cGUpKTsKICAgIGNvbnN0IHNjcmFwZXJzID0gY29tcGF0aWJsZUNsYXNzZXMKICAgICAgLm1hcChjbHMgPT4gKG5ldyBTQ1JBUEVSX01BUFtjbHNdKCkpLnNldFpvbmVPdmVycmlkZShbem9uZV0pLnNldE9wZXJhdGlvblR5cGUob3BlcmF0aW9uVHlwZSkpOwoKICAgIGJ1c0xvZygiaW5mbyIsIGBTY3JhcGluZyB6b25hICIke3pvbmUubmFtZX0iIOKAlCAke3NjcmFwZXJzLmxlbmd0aH0gcG9ydGFsZXNgKTsKICAgIGlmICh1bnN1cHBvcnRlZENsYXNzZXMubGVuZ3RoID4gMCkgewogICAgICBidXNMb2coImluZm8iLCBgT21pdGlkb3MgcG9yIG5vIHNvcG9ydGFyICR7b3BlcmF0aW9uVHlwZX06ICR7dW5zdXBwb3J0ZWRDbGFzc2VzLmpvaW4oIiwgIil9YCk7CiAgICB9CgogICAgbGV0IHRvdGFsID0gMDsKICAgIGxldCBuZXdfY291bnQgPSAwOwoKICAgIGZvciAoY29uc3Qgc2NyYXBlciBvZiBzY3JhcGVycykgewogICAgICBjb25zdCBwb3J0YWxOYW1lOiBzdHJpbmcgPSBzY3JhcGVyLmNvbnN0cnVjdG9yPy5uYW1lID8/ICJTY3JhcGVyIjsKICAgICAgdHJ5IHsKICAgICAgICBidXNMb2coImluZm8iLCBgSW5pY2lhbmRvIHNjcmFwaW5nLi4uYCwgcG9ydGFsTmFtZSk7CiAgICAgICAgc2NyYXBlckJ1cy5wcm9ncmVzcyh7IHBvcnRhbDogcG9ydGFsTmFtZSwgcGhhc2U6ICJzdGFydCIgfSk7CiAgICAgICAgY29uc3QgcHJvcHM6IFByb3BlcnR5W10gPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSgpOwogICAgICAgIHRvdGFsICs9IHByb3BzLmxlbmd0aDsKICAgICAgICBidXNMb2coImluZm8iLCBgT2J0ZW5pZGFzICR7cHJvcHMubGVuZ3RofSBwcm9waWVkYWRlc2AsIHBvcnRhbE5hbWUpOwogICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykgewogICAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLl9zYXZlUHJvcGVydHkocHJvcCk7CiAgICAgICAgICBpZiAoc2F2ZWQpIG5ld19jb3VudCsrOwogICAgICAgIH0KICAgICAgICBzY3JhcGVyQnVzLnByb2dyZXNzKHsgcG9ydGFsOiBwb3J0YWxOYW1lLCBwaGFzZTogImRvbmUiLCB0b3RhbDogcHJvcHMubGVuZ3RoLCBzYXZlZDogbmV3X2NvdW50IH0pOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBidXNMb2coImVycm9yIiwgYEVycm9yOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCwgcG9ydGFsTmFtZSk7CiAgICAgICAgc2NyYXBlckJ1cy5wcm9ncmVzcyh7IHBvcnRhbDogcG9ydGFsTmFtZSwgcGhhc2U6ICJlcnJvciIsIG1zZzogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTsKICAgICAgfQogICAgfQoKICAgIGJ1c0xvZygic3VjY2VzcyIsIGBab25hICIke3pvbmUubmFtZX0iIGNvbXBsZXRhZGE6ICR7dG90YWx9IHByb3BpZWRhZGVzIHByb2Nlc2FkYXMsICR7bmV3X2NvdW50fSBndWFyZGFkYXNgKTsKICAgIHRoaXMuX3Bvc3RQcm9jZXNzKGB6b25hOiR7em9uZS5uYW1lfWApOwogICAgcmV0dXJuIHsgdG90YWwsIG5ld19jb3VudCB9OwogIH0KCiAgLyoqIFJlLWdlb2NvZGlmaWNhIHByb3BpZWRhZGVzIHF1ZSB0aWVuZW4gY29vcmRlbmFkYXMgZGUgY2VudHJvIGRlIG11bmljaXBpbyBleGFjdGFzICovCiAgYXN5bmMgcmVHZW9jb2RlQWxsKCk6IFByb21pc2U8eyB1cGRhdGVkOiBudW1iZXIgfT4gewogICAgLy8gVXNhciBjZW50cm9zIGRlIHpvbmEgZGVzZGUgbGEgQkQgZW4gbHVnYXIgZGUgdmFsb3JlcyBoYXJkY29kZWFkb3MKICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgWm9uZU1vZGVsLmZpbmRBY3RpdmUoKTsKICAgIGNvbnN0IGNlbnRlckNvb3JkcyA9IHpvbmVzLm1hcCh6ID0+IFt6LmxhdCwgei5sbmddIGFzIFtudW1iZXIsIG51bWJlcl0pOwogICAgY29uc3QgaXNDZW50ZXIgPSAobGF0OiBudW1iZXIsIGxuZzogbnVtYmVyKSA9PgogICAgICBjZW50ZXJDb29yZHMuc29tZSgoW2xhLCBsbl0pID0+IE1hdGguYWJzKGxhIC0gbGF0KSA8IDAuMDAwMSAmJiBNYXRoLmFicyhsbiAtIGxuZykgPCAwLjAwMDEpOwoKICAgIGNvbnN0IGFsbCA9IGF3YWl0IFByb3BlcnR5TW9kZWwuZmluZEFsbCgpOwogICAgbGV0IHVwZGF0ZWQgPSAwOwogICAgZm9yIChjb25zdCBwcm9wIG9mIGFsbCkgewogICAgICB0cnkgewogICAgICAgIGlmICghcHJvcC5sYXQgfHwgIXByb3AubG5nIHx8IGlzQ2VudGVyKHByb3AubGF0LCBwcm9wLmxuZykpIHsKICAgICAgICAgIGNvbnN0IGdlb1F1ZXJ5ID0gW3Byb3AubG9jYXRpb24sIHByb3AubXVuaWNpcGFsaXR5LCAiVmFsZW5jaWEiLCAiRXNwYcOxYSJdCiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbikuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmluZGV4T2YodikgPT09IGkpLmpvaW4oIiwgIik7CiAgICAgICAgICBsZXQgZ2VvOiB7IGxhdDogbnVtYmVyOyBsbmc6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBnZW8gPSBhd2FpdCBnZW9TZXJ2aWNlLmdldENvb3JkaW5hdGVzKGdlb1F1ZXJ5KTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICBpZiAocHJvcC5tdW5pY2lwYWxpdHkpIHsKICAgICAgICAgICAgICBnZW8gPSBhd2FpdCBnZW9TZXJ2aWNlLmdlb2NvZGVNdW5pY2lwYWxpdHkocHJvcC5tdW5pY2lwYWxpdHkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZ2VvKSB7CiAgICAgICAgICAgIGF3YWl0IFByb3BlcnR5TW9kZWwudXBzZXJ0KHsgLi4ucHJvcCwgbGF0OiBnZW8ubGF0LCBsbmc6IGdlby5sbmcgfSk7CiAgICAgICAgICAgIHVwZGF0ZWQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMTAwKSk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChfZSkgeyAvKiBza2lwICovIH0KICAgIH0KICAgIHJldHVybiB7IHVwZGF0ZWQgfTsKICB9CgogIC8vIOKUgOKUgOKUgCBIZWxwZXJzIHByaXZhZG9zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKICAvKiogR2VvY29kaWZpY2Egc2kgZmFsdGEsIGNhbGN1bGEgcHJlY2lvL23CsiwgZ3VhcmRhIGVuIEJEIHkgcmVnaXN0cmEgaGlzdG9yaWFsLgogICAqICBEZXZ1ZWx2ZSBlbCBJRCBndWFyZGFkbyBvIG51bGwgc2kgaHVibyBlcnJvciAoZHVwbGljYWRvIHUgb3RybykuICovCiAgcHJpdmF0ZSBhc3luYyBfc2F2ZVByb3BlcnR5KHByb3A6IFByb3BlcnR5KTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7CiAgICB0cnkgewogICAgICBpZiAoIXByb3AubGF0ICYmICFwcm9wLmxuZykgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBnZW9RdWVyeSA9IChbcHJvcC5sb2NhdGlvbiwgcHJvcC5tdW5pY2lwYWxpdHksICJWYWxlbmNpYSIsICJFc3Bhw7FhIl0gYXMgc3RyaW5nW10pCiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbikuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmluZGV4T2YodikgPT09IGkpLmpvaW4oIiwgIik7CiAgICAgICAgICBjb25zdCBnZW8gPSBhd2FpdCBnZW9TZXJ2aWNlLmdldENvb3JkaW5hdGVzKGdlb1F1ZXJ5KTsKICAgICAgICAgIHByb3AubGF0ID0gZ2VvLmxhdDsKICAgICAgICAgIHByb3AubG5nID0gZ2VvLmxuZzsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIGlmIChwcm9wLm11bmljaXBhbGl0eSkgewogICAgICAgICAgICBjb25zdCBnZW8gPSBhd2FpdCBnZW9TZXJ2aWNlLmdlb2NvZGVNdW5pY2lwYWxpdHkocHJvcC5tdW5pY2lwYWxpdHkpOwogICAgICAgICAgICBpZiAoZ2VvKSB7IHByb3AubGF0ID0gZ2VvLmxhdDsgcHJvcC5sbmcgPSBnZW8ubG5nOyB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChwcm9wLnByaWNlID4gMCAmJiAocHJvcC5zaXplX20yIHx8IDApID4gMCkgewogICAgICAgIChwcm9wIGFzIGFueSkucHJpY2VfcGVyX20yID0gTWF0aC5yb3VuZChwcm9wLnByaWNlIC8gcHJvcC5zaXplX20yISk7CiAgICAgIH0KICAgICAgY29uc3Qgc2F2ZWRJZCA9IGF3YWl0IFByb3BlcnR5TW9kZWwudXBzZXJ0KHByb3ApOwogICAgICBpZiAoc2F2ZWRJZCAmJiBwcm9wLnByaWNlID4gMCkgewogICAgICAgIGF3YWl0IFByaWNlSGlzdG9yeU1vZGVsLnJlY29yZElmQ2hhbmdlZChzYXZlZElkLCBwcm9wLnByaWNlKTsKICAgICAgfQogICAgICByZXR1cm4gc2F2ZWRJZCA/PyBudWxsOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOyAvLyBza2lwIGR1cGxpY2F0ZXMgLyBjb25zdHJhaW50IGVycm9ycwogICAgfQogIH0KCiAgLyoqIExhbnphIHNjb3JpbmcgKyBkZWR1cGxpY2FjacOzbiBkZSBmb3JtYSBhc8OtbmNyb25hIHNpbiBibG9xdWVhciBsYSByZXNwdWVzdGEgKi8KICBwcml2YXRlIF9wb3N0UHJvY2VzcyhsYWJlbCA9ICIiKTogdm9pZCB7CiAgICBzZXRJbW1lZGlhdGUoYXN5bmMgKCkgPT4gewogICAgICB0cnkgewogICAgICAgIGJ1c0xvZygiaW5mbyIsICJDYWxjdWxhbmRvIHNjb3Jlcy4uLiIsIGxhYmVsKTsKICAgICAgICBhd2FpdCBzY29yaW5nU2VydmljZS5zY29yZUFsbCgpOwogICAgICAgIGJ1c0xvZygiaW5mbyIsICJFamVjdXRhbmRvIGRlZHVwbGljYWNpw7NuLi4uIiwgbGFiZWwpOwogICAgICAgIGF3YWl0IGRlZHVwbGljYXRpb25TZXJ2aWNlLnJlc2V0RHVwbGljYXRlcygpOwogICAgICAgIGF3YWl0IGRlZHVwbGljYXRpb25TZXJ2aWNlLnJ1bkRlZHVwbGljYXRpb24oKTsKICAgICAgICBidXNMb2coInN1Y2Nlc3MiLCAiUG9zdC1wcm9jZXNhZG8gY29tcGxldGFkbyDinIUiLCBsYWJlbCk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGJ1c0xvZygiZXJyb3IiLCBgW1Bvc3Qtc2NyYXBpbmddIEVycm9yOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCwgbGFiZWwpOwogICAgICB9CiAgICB9KTsKICB9CgogIC8qKiBEYXRvcyBkZSBhbmFseXRpY3MgcGFyYSBlbCBkYXNoYm9hcmQgKi8KICBhc3luYyBnZXRBbmFseXRpY3MoKTogUHJvbWlzZTxhbnk+IHsKICAgIGNvbnN0IFtieVBvcnRhbF0gPSBhd2FpdCBwb29sLnF1ZXJ5PFJvd0RhdGFQYWNrZXRbXT4oYAogICAgICBTRUxFQ1Qgc291cmNlLCBDT1VOVCgqKSBBUyBjb3VudCwgQVZHKHByaWNlKSBBUyBhdmdfcHJpY2UsIEFWRyhwcmljZV9wZXJfbTIpIEFTIGF2Z19wbTIKICAgICAgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGlzX2R1cGxpY2F0ZSA9IDAgT1IgaXNfZHVwbGljYXRlIElTIE5VTEwKICAgICAgR1JPVVAgQlkgc291cmNlIE9SREVSIEJZIGNvdW50IERFU0MKICAgIGApOwoKICAgIGNvbnN0IFtieU11bmldID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KGAKICAgICAgU0VMRUNUIG11bmljaXBhbGl0eSwgQ09VTlQoKikgQVMgY291bnQsIEFWRyhwcmljZSkgQVMgYXZnX3ByaWNlLAogICAgICAgICAgICAgQVZHKHByaWNlX3Blcl9tMikgQVMgYXZnX3BtMiwgQVZHKHNjb3JlKSBBUyBhdmdfc2NvcmUKICAgICAgRlJPTSBwcm9wZXJ0aWVzIFdIRVJFIGlzX2R1cGxpY2F0ZSA9IDAgT1IgaXNfZHVwbGljYXRlIElTIE5VTEwKICAgICAgR1JPVVAgQlkgbXVuaWNpcGFsaXR5IE9SREVSIEJZIGNvdW50IERFU0MKICAgIGApOwoKICAgIGNvbnN0IFtieVR5cGVdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KGAKICAgICAgU0VMRUNUIHByb3BlcnR5X3R5cGUsIENPVU5UKCopIEFTIGNvdW50LCBBVkcocHJpY2UpIEFTIGF2Z19wcmljZQogICAgICBGUk9NIHByb3BlcnRpZXMgV0hFUkUgaXNfZHVwbGljYXRlID0gMCBPUiBpc19kdXBsaWNhdGUgSVMgTlVMTAogICAgICBHUk9VUCBCWSBwcm9wZXJ0eV90eXBlIE9SREVSIEJZIGNvdW50IERFU0MKICAgIGApOwoKICAgIGNvbnN0IFtzdW1tYXJ5XSA9IGF3YWl0IHBvb2wucXVlcnk8Um93RGF0YVBhY2tldFtdPihgCiAgICAgIFNFTEVDVCBDT1VOVCgqKSBBUyB0b3RhbCwKICAgICAgICAgICAgIENPVU5UKENBU0UgV0hFTiBpc19kdXBsaWNhdGUgPSAxIFRIRU4gMSBFTkQpIEFTIGR1cGxpY2F0ZXMsCiAgICAgICAgICAgICBBVkcocHJpY2UpIEFTIGF2Z19wcmljZSwgQVZHKHByaWNlX3Blcl9tMikgQVMgYXZnX3BtMiwKICAgICAgICAgICAgIEFWRyhzY29yZSkgQVMgYXZnX3Njb3JlLAogICAgICAgICAgICAgTUlOKHByaWNlKSBBUyBtaW5fcHJpY2UsIE1BWChwcmljZSkgQVMgbWF4X3ByaWNlLAogICAgICAgICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHByaWNlX2hpc3RvcnkpIEFTIHByaWNlX3JlY29yZHMKICAgICAgRlJPTSBwcm9wZXJ0aWVzCiAgICBgKTsKCiAgICBjb25zdCBwcmljZURyb3BzID0gYXdhaXQgUHJpY2VIaXN0b3J5TW9kZWwuZ2V0UHJpY2VEcm9wU3RhdHMoKTsKICAgIGNvbnN0IHByaWNlT3ZlclRpbWUgPSBhd2FpdCBQcmljZUhpc3RvcnlNb2RlbC5nZXRPdmVyYWxsVHJlbmQoOTApOwoKICAgIHJldHVybiB7CiAgICAgIHN1bW1hcnk6IHN1bW1hcnlbMF0sCiAgICAgIGJ5UG9ydGFsLCBieU11bmksIGJ5VHlwZSwKICAgICAgcHJpY2VEcm9wcywgcHJpY2VPdmVyVGltZSwKICAgIH07CiAgfQp9CgpleHBvcnQgZGVmYXVsdCBuZXcgUHJvcGVydHlTZXJ2aWNlKCk7Cg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\services\\schedulerService.ts","beforeExisted":true,"beforeHash":"bdd1d3060b7acf087c23bd9e7d4228f37d44cd4f1448382adc52b4ae3b56fc51","beforeContent":"aW1wb3J0IGNyb24gZnJvbSAibm9kZS1jcm9uIjsNCmltcG9ydCB7IFByb3BlcnR5U2VydmljZSB9IGZyb20gIi4vcHJvcGVydHlTZXJ2aWNlIjsNCmltcG9ydCB7IEVtYWlsU2VydmljZSB9IGZyb20gIi4vZW1haWxTZXJ2aWNlIjsNCmltcG9ydCBwb29sIGZyb20gIi4uL2NvbmZpZy9kYiI7DQppbXBvcnQgeyBSZXN1bHRTZXRIZWFkZXIsIFJvd0RhdGFQYWNrZXQgfSBmcm9tICJteXNxbDIiOw0KDQpsZXQgaXNSdW5uaW5nID0gZmFsc2U7DQpsZXQgbGFzdFJ1bkF0OiBEYXRlIHwgbnVsbCA9IG51bGw7DQpsZXQgbGFzdFJ1blN0YXR1czogInN1Y2Nlc3MiIHwgImVycm9yIiB8IG51bGwgPSBudWxsOw0KbGV0IGxhc3RSdW5Ub3RhbCA9IDA7DQpsZXQgbGFzdFJ1bk5ldyA9IDA7DQpsZXQgbmV4dFJ1bkF0OiBEYXRlIHwgbnVsbCA9IG51bGw7DQoNCmFzeW5jIGZ1bmN0aW9uIGxvZ1NjcmFwaW5nU3RhcnQoKTogUHJvbWlzZTxudW1iZXI+IHsNCiAgdHJ5IHsNCiAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHBvb2wucXVlcnk8UmVzdWx0U2V0SGVhZGVyPigNCiAgICAgICJJTlNFUlQgSU5UTyBzY3JhcGluZ19sb2cgKHN0YXJ0ZWRfYXQsIHN0YXR1cykgVkFMVUVTIChOT1coKSwgJ3J1bm5pbmcnKSINCiAgICApOw0KICAgIHJldHVybiByZXN1bHQuaW5zZXJ0SWQ7DQogIH0gY2F0Y2ggKF9lKSB7IHJldHVybiAwOyB9DQp9DQoNCmFzeW5jIGZ1bmN0aW9uIGxvZ1NjcmFwaW5nRW5kKA0KICBsb2dJZDogbnVtYmVyLA0KICB0b3RhbDogbnVtYmVyLA0KICBuZXdTYXZlZDogbnVtYmVyLA0KICBlcnJvcnM6IHN0cmluZywNCiAgc3RhdHVzOiAic3VjY2VzcyIgfCAiZXJyb3IiDQopOiBQcm9taXNlPHZvaWQ+IHsNCiAgdHJ5IHsNCiAgICBhd2FpdCBwb29sLnF1ZXJ5KA0KICAgICAgYFVQREFURSBzY3JhcGluZ19sb2cgU0VUIGZpbmlzaGVkX2F0ID0gTk9XKCksIHRvdGFsX2ZvdW5kID0gPywgbmV3X3NhdmVkID0gPywgZXJyb3JzID0gPywgc3RhdHVzID0gPyBXSEVSRSBpZCA9ID9gLA0KICAgICAgW3RvdGFsLCBuZXdTYXZlZCwgZXJyb3JzIHx8IG51bGwsIHN0YXR1cywgbG9nSWRdDQogICAgKTsNCiAgfSBjYXRjaCAoX2UpIHsgLyogbm9uLWNyaXRpY2FsICovIH0NCn0NCg0KZXhwb3J0IGNvbnN0IHN0YXJ0U2NoZWR1bGVyID0gKCk6IHZvaWQgPT4gew0KICBjb25zdCBpbnRlcnZhbE1pbnV0ZXMgPSBwYXJzZUludChwcm9jZXNzLmVudi5TQ1JBUElOR19JTlRFUlZBTF9NSU5VVEVTIHx8ICI2MCIpOw0KICBjb25zdCBob3VycyA9IGludGVydmFsTWludXRlcyA+PSA2MCA/IE1hdGguZmxvb3IoaW50ZXJ2YWxNaW51dGVzIC8gNjApIDogMTsNCiAgY29uc3QgY3JvbkV4cHJlc3Npb24gPSBgMCAqLyR7aG91cnN9ICogKiAqYDsNCg0KICBjb25zb2xlLmxvZyhgU2NoZWR1bGVyIGluaWNpYWRvOiBzY3JhcGluZyBjYWRhICR7aW50ZXJ2YWxNaW51dGVzfSBtaW51dG9zIChjcm9uOiAke2Nyb25FeHByZXNzaW9ufSlgKTsNCg0KICAvLyBDYWxjdWxhciBwcsOzeGltYSBlamVjdWNpw7NuDQogIGNvbnN0IGNhbGNOZXh0UnVuID0gKCkgPT4gew0KICAgIGNvbnN0IG5leHQgPSBuZXcgRGF0ZSgpOw0KICAgIG5leHQuc2V0TWludXRlcygwLCAwLCAwKTsNCiAgICBuZXh0LnNldEhvdXJzKG5leHQuZ2V0SG91cnMoKSArIGhvdXJzKTsNCiAgICBuZXh0UnVuQXQgPSBuZXh0Ow0KICB9Ow0KICBjYWxjTmV4dFJ1bigpOw0KDQogIGNyb24uc2NoZWR1bGUoY3JvbkV4cHJlc3Npb24sIGFzeW5jICgpID0+IHsNCiAgICBpZiAoaXNSdW5uaW5nKSB7DQogICAgICBjb25zb2xlLmxvZygiU2NyYXBpbmcgeWEgZW4gZWplY3VjacOzbiwgc2FsdGFuZG8uLi4iKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgaXNSdW5uaW5nID0gdHJ1ZTsNCiAgICBjb25zdCBsb2dJZCA9IGF3YWl0IGxvZ1NjcmFwaW5nU3RhcnQoKTsNCiAgICBsZXQgZXJyb3JNc2cgPSAiIjsNCiAgICB0cnkgew0KICAgICAgY29uc3QgcHJvcGVydHlTZXJ2aWNlID0gbmV3IFByb3BlcnR5U2VydmljZSgpOw0KICAgICAgY29uc3QgZW1haWxTZXJ2aWNlID0gbmV3IEVtYWlsU2VydmljZSgpOw0KICAgICAgY29uc29sZS5sb2coIkluaWNpYW5kbyBzY3JhcGluZyBwcm9ncmFtYWRvLi4uIik7DQogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9wZXJ0eVNlcnZpY2Uuc2NyYXBlQWxsKCdyZW50Jyk7DQogICAgICBsYXN0UnVuVG90YWwgPSByZXN1bHQudG90YWw7DQogICAgICBsYXN0UnVuTmV3ID0gcmVzdWx0Lm5ld19jb3VudCB8fCAwOw0KICAgICAgY29uc29sZS5sb2coYFNjcmFwaW5nIHByb2dyYW1hZG8gY29tcGxldGFkbzogJHtyZXN1bHQudG90YWx9IHByb3BpZWRhZGVzLCAke2xhc3RSdW5OZXd9IG51ZXZhcy9hY3R1YWxpemFkYXNgKTsNCiAgICAgIGF3YWl0IGVtYWlsU2VydmljZS5zZW5kRmlsdGVyZWRBbGVydHMoKTsNCiAgICAgIGxhc3RSdW5TdGF0dXMgPSAic3VjY2VzcyI7DQogICAgICBhd2FpdCBsb2dTY3JhcGluZ0VuZChsb2dJZCwgbGFzdFJ1blRvdGFsLCBsYXN0UnVuTmV3LCAiIiwgInN1Y2Nlc3MiKTsNCiAgICB9IGNhdGNoIChlcnI6IGFueSkgew0KICAgICAgZXJyb3JNc2cgPSBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycik7DQogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBlbiBzY3JhcGluZyBwcm9ncmFtYWRvOiIsIGVycm9yTXNnKTsNCiAgICAgIGxhc3RSdW5TdGF0dXMgPSAiZXJyb3IiOw0KICAgICAgYXdhaXQgbG9nU2NyYXBpbmdFbmQobG9nSWQsIGxhc3RSdW5Ub3RhbCwgbGFzdFJ1bk5ldywgZXJyb3JNc2csICJlcnJvciIpOw0KICAgIH0gZmluYWxseSB7DQogICAgICBpc1J1bm5pbmcgPSBmYWxzZTsNCiAgICAgIGxhc3RSdW5BdCA9IG5ldyBEYXRlKCk7DQogICAgICBjYWxjTmV4dFJ1bigpOw0KICAgIH0NCiAgfSk7DQoNCiAgLy8gUHVyZ2EgZGlhcmlhIGEgbGFzIDM6MDAg4oCUIGVsaW1pbmEgZGVsIGFyY2hpdm8gbG9zIGFudW5jaW9zIGNvbiBtw6FzIGRlIDMwIGTDrWFzDQogIGNyb24uc2NoZWR1bGUoIjAgMyAqICogKiIsIGFzeW5jICgpID0+IHsNCiAgICB0cnkgew0KICAgICAgY29uc3QgUE0gPSBhd2FpdCBpbXBvcnQoIi4uL21vZGVscy9wcm9wZXJ0eU1vZGVsIik7DQogICAgICBjb25zdCBQcm9wZXJ0eU1vZGVsID0gUE0uUHJvcGVydHlNb2RlbDsNCiAgICAgIGNvbnN0IG4gPSBhd2FpdCBQcm9wZXJ0eU1vZGVsLnB1cmdlT2xkRGVsZXRlZCgpOw0KICAgICAgaWYgKG4gPiAwKSB7DQogICAgICAgIGNvbnNvbGUubG9nKGBbUHVyZ2VdICR7bn0gcHJvcGllZGFkZXMgZWxpbWluYWRhcyBkZWZpbml0aXZhbWVudGUgZGVsIGFyY2hpdm8gKD4zMCBkw61hcylgKTsNCiAgICAgIH0NCiAgICB9IGNhdGNoIChlOiBhbnkpIHsNCiAgICAgIGNvbnNvbGUuZXJyb3IoIltQdXJnZV0gRXJyb3IgZW4gcHVyZ2EgZGlhcmlhOiIsIGU/Lm1lc3NhZ2UgfHwgU3RyaW5nKGUpKTsNCiAgICB9DQogIH0pOw0KfTsNCg0KZXhwb3J0IGNvbnN0IGdldFNjaGVkdWxlclN0YXR1cyA9ICgpOiB7DQogIHJ1bm5pbmc6IGJvb2xlYW47DQogIGxhc3RSdW5BdDogc3RyaW5nIHwgbnVsbDsNCiAgbGFzdFJ1blN0YXR1czogc3RyaW5nIHwgbnVsbDsNCiAgbGFzdFJ1blRvdGFsOiBudW1iZXI7DQogIGxhc3RSdW5OZXc6IG51bWJlcjsNCiAgbmV4dFJ1bkF0OiBzdHJpbmcgfCBudWxsOw0KfSA9PiAoew0KICBydW5uaW5nOiBpc1J1bm5pbmcsDQogIGxhc3RSdW5BdDogbGFzdFJ1bkF0ID8gbGFzdFJ1bkF0LnRvSVNPU3RyaW5nKCkgOiBudWxsLA0KICBsYXN0UnVuU3RhdHVzLA0KICBsYXN0UnVuVG90YWwsDQogIGxhc3RSdW5OZXcsDQogIG5leHRSdW5BdDogbmV4dFJ1bkF0ID8gbmV4dFJ1bkF0LnRvSVNPU3RyaW5nKCkgOiBudWxsLA0KfSk7DQoNCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZWNlbnRTY3JhcGluZ0xvZ3MobGltaXQgPSAxMCk6IFByb21pc2U8Um93RGF0YVBhY2tldFtdPiB7DQogIHRyeSB7DQogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KA0KICAgICAgIlNFTEVDVCAqIEZST00gc2NyYXBpbmdfbG9nIE9SREVSIEJZIHN0YXJ0ZWRfYXQgREVTQyBMSU1JVCA/IiwNCiAgICAgIFtsaW1pdF0NCiAgICApOw0KICAgIHJldHVybiByb3dzOw0KICB9IGNhdGNoIChfZSkgeyByZXR1cm4gW107IH0NCn0NCg0K","afterExisted":true,"afterHash":"6166cc14192a6cf3e3ba0c296d90ababf20c457913ab711f5e65b99002a935f3","afterContent":"aW1wb3J0IGNyb24gZnJvbSAibm9kZS1jcm9uIjsNCmltcG9ydCB7IFByb3BlcnR5U2VydmljZSB9IGZyb20gIi4vcHJvcGVydHlTZXJ2aWNlIjsNCmltcG9ydCB7IEVtYWlsU2VydmljZSB9IGZyb20gIi4vZW1haWxTZXJ2aWNlIjsNCmltcG9ydCBwb29sIGZyb20gIi4uL2NvbmZpZy9kYiI7DQppbXBvcnQgeyBSZXN1bHRTZXRIZWFkZXIsIFJvd0RhdGFQYWNrZXQgfSBmcm9tICJteXNxbDIiOw0KDQpsZXQgaXNSdW5uaW5nID0gZmFsc2U7DQpsZXQgbGFzdFJ1bkF0OiBEYXRlIHwgbnVsbCA9IG51bGw7DQpsZXQgbGFzdFJ1blN0YXR1czogInN1Y2Nlc3MiIHwgImVycm9yIiB8IG51bGwgPSBudWxsOw0KbGV0IGxhc3RSdW5Ub3RhbCA9IDA7DQpsZXQgbGFzdFJ1bk5ldyA9IDA7DQpsZXQgbmV4dFJ1bkF0OiBEYXRlIHwgbnVsbCA9IG51bGw7CgpmdW5jdGlvbiBnZXRTY2hlZHVsZWRPcGVyYXRpb25zKCk6IEFycmF5PCJzYWxlIiB8ICJyZW50Ij4gewogIGNvbnN0IGNvbmZpZ3VyZWQgPSAocHJvY2Vzcy5lbnYuU0NSQVBJTkdfT1BFUkFUSU9OUyB8fCAic2FsZSxyZW50IikKICAgIC5zcGxpdCgiLCIpCiAgICAubWFwKHZhbHVlID0+IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpKQogICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyAic2FsZSIgfCAicmVudCIgPT4gdmFsdWUgPT09ICJzYWxlIiB8fCB2YWx1ZSA9PT0gInJlbnQiKTsKICByZXR1cm4gY29uZmlndXJlZC5sZW5ndGggPiAwID8gWy4uLm5ldyBTZXQoY29uZmlndXJlZCldIDogWyJzYWxlIiwgInJlbnQiXTsKfQoNCmFzeW5jIGZ1bmN0aW9uIGxvZ1NjcmFwaW5nU3RhcnQoKTogUHJvbWlzZTxudW1iZXI+IHsNCiAgdHJ5IHsNCiAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHBvb2wucXVlcnk8UmVzdWx0U2V0SGVhZGVyPigNCiAgICAgICJJTlNFUlQgSU5UTyBzY3JhcGluZ19sb2cgKHN0YXJ0ZWRfYXQsIHN0YXR1cykgVkFMVUVTIChOT1coKSwgJ3J1bm5pbmcnKSINCiAgICApOw0KICAgIHJldHVybiByZXN1bHQuaW5zZXJ0SWQ7DQogIH0gY2F0Y2ggKF9lKSB7IHJldHVybiAwOyB9DQp9DQoNCmFzeW5jIGZ1bmN0aW9uIGxvZ1NjcmFwaW5nRW5kKA0KICBsb2dJZDogbnVtYmVyLA0KICB0b3RhbDogbnVtYmVyLA0KICBuZXdTYXZlZDogbnVtYmVyLA0KICBlcnJvcnM6IHN0cmluZywNCiAgc3RhdHVzOiAic3VjY2VzcyIgfCAiZXJyb3IiDQopOiBQcm9taXNlPHZvaWQ+IHsNCiAgdHJ5IHsNCiAgICBhd2FpdCBwb29sLnF1ZXJ5KA0KICAgICAgYFVQREFURSBzY3JhcGluZ19sb2cgU0VUIGZpbmlzaGVkX2F0ID0gTk9XKCksIHRvdGFsX2ZvdW5kID0gPywgbmV3X3NhdmVkID0gPywgZXJyb3JzID0gPywgc3RhdHVzID0gPyBXSEVSRSBpZCA9ID9gLA0KICAgICAgW3RvdGFsLCBuZXdTYXZlZCwgZXJyb3JzIHx8IG51bGwsIHN0YXR1cywgbG9nSWRdDQogICAgKTsNCiAgfSBjYXRjaCAoX2UpIHsgLyogbm9uLWNyaXRpY2FsICovIH0NCn0NCg0KZXhwb3J0IGNvbnN0IHN0YXJ0U2NoZWR1bGVyID0gKCk6IHZvaWQgPT4gew0KICBjb25zdCBpbnRlcnZhbE1pbnV0ZXMgPSBwYXJzZUludChwcm9jZXNzLmVudi5TQ1JBUElOR19JTlRFUlZBTF9NSU5VVEVTIHx8ICI2MCIpOw0KICBjb25zdCBob3VycyA9IGludGVydmFsTWludXRlcyA+PSA2MCA/IE1hdGguZmxvb3IoaW50ZXJ2YWxNaW51dGVzIC8gNjApIDogMTsNCiAgY29uc3QgY3JvbkV4cHJlc3Npb24gPSBgMCAqLyR7aG91cnN9ICogKiAqYDsNCg0KICBjb25zb2xlLmxvZyhgU2NoZWR1bGVyIGluaWNpYWRvOiBzY3JhcGluZyBjYWRhICR7aW50ZXJ2YWxNaW51dGVzfSBtaW51dG9zIChjcm9uOiAke2Nyb25FeHByZXNzaW9ufSlgKTsNCg0KICAvLyBDYWxjdWxhciBwcsOzeGltYSBlamVjdWNpw7NuDQogIGNvbnN0IGNhbGNOZXh0UnVuID0gKCkgPT4gew0KICAgIGNvbnN0IG5leHQgPSBuZXcgRGF0ZSgpOw0KICAgIG5leHQuc2V0TWludXRlcygwLCAwLCAwKTsNCiAgICBuZXh0LnNldEhvdXJzKG5leHQuZ2V0SG91cnMoKSArIGhvdXJzKTsNCiAgICBuZXh0UnVuQXQgPSBuZXh0Ow0KICB9Ow0KICBjYWxjTmV4dFJ1bigpOw0KDQogIGNyb24uc2NoZWR1bGUoY3JvbkV4cHJlc3Npb24sIGFzeW5jICgpID0+IHsNCiAgICBpZiAoaXNSdW5uaW5nKSB7DQogICAgICBjb25zb2xlLmxvZygiU2NyYXBpbmcgeWEgZW4gZWplY3VjacOzbiwgc2FsdGFuZG8uLi4iKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgaXNSdW5uaW5nID0gdHJ1ZTsNCiAgICBjb25zdCBsb2dJZCA9IGF3YWl0IGxvZ1NjcmFwaW5nU3RhcnQoKTsNCiAgICBsZXQgZXJyb3JNc2cgPSAiIjsNCiAgICB0cnkgew0KICAgICAgY29uc3QgcHJvcGVydHlTZXJ2aWNlID0gbmV3IFByb3BlcnR5U2VydmljZSgpOwogICAgICBjb25zdCBlbWFpbFNlcnZpY2UgPSBuZXcgRW1haWxTZXJ2aWNlKCk7CiAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBnZXRTY2hlZHVsZWRPcGVyYXRpb25zKCk7CiAgICAgIGxhc3RSdW5Ub3RhbCA9IDA7CiAgICAgIGxhc3RSdW5OZXcgPSAwOwogICAgICBjb25zb2xlLmxvZyhgSW5pY2lhbmRvIHNjcmFwaW5nIHByb2dyYW1hZG86ICR7b3BlcmF0aW9ucy5qb2luKCIsICIpfS4uLmApOwogICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7CiAgICAgICAgY29uc29sZS5sb2coYEluaWNpYW5kbyBjaWNsbyBwcm9ncmFtYWRvICR7b3BlcmF0aW9ufS4uLmApOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3BlcnR5U2VydmljZS5zY3JhcGVBbGwob3BlcmF0aW9uKTsKICAgICAgICBsYXN0UnVuVG90YWwgKz0gcmVzdWx0LnRvdGFsOwogICAgICAgIGxhc3RSdW5OZXcgKz0gcmVzdWx0Lm5ld19jb3VudCB8fCAwOwogICAgICAgIGNvbnNvbGUubG9nKGBDaWNsbyAke29wZXJhdGlvbn0gY29tcGxldGFkbzogJHtyZXN1bHQudG90YWx9IHByb3BpZWRhZGVzLCAke3Jlc3VsdC5uZXdfY291bnQgfHwgMH0gbnVldmFzL2FjdHVhbGl6YWRhc2ApOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKGBTY3JhcGluZyBwcm9ncmFtYWRvIGNvbXBsZXRhZG86ICR7bGFzdFJ1blRvdGFsfSBwcm9waWVkYWRlcywgJHtsYXN0UnVuTmV3fSBudWV2YXMvYWN0dWFsaXphZGFzYCk7CiAgICAgIGF3YWl0IGVtYWlsU2VydmljZS5zZW5kRmlsdGVyZWRBbGVydHMoKTsNCiAgICAgIGxhc3RSdW5TdGF0dXMgPSAic3VjY2VzcyI7DQogICAgICBhd2FpdCBsb2dTY3JhcGluZ0VuZChsb2dJZCwgbGFzdFJ1blRvdGFsLCBsYXN0UnVuTmV3LCAiIiwgInN1Y2Nlc3MiKTsNCiAgICB9IGNhdGNoIChlcnI6IGFueSkgew0KICAgICAgZXJyb3JNc2cgPSBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycik7DQogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBlbiBzY3JhcGluZyBwcm9ncmFtYWRvOiIsIGVycm9yTXNnKTsNCiAgICAgIGxhc3RSdW5TdGF0dXMgPSAiZXJyb3IiOw0KICAgICAgYXdhaXQgbG9nU2NyYXBpbmdFbmQobG9nSWQsIGxhc3RSdW5Ub3RhbCwgbGFzdFJ1bk5ldywgZXJyb3JNc2csICJlcnJvciIpOw0KICAgIH0gZmluYWxseSB7DQogICAgICBpc1J1bm5pbmcgPSBmYWxzZTsNCiAgICAgIGxhc3RSdW5BdCA9IG5ldyBEYXRlKCk7DQogICAgICBjYWxjTmV4dFJ1bigpOw0KICAgIH0NCiAgfSk7DQoNCiAgLy8gUHVyZ2EgZGlhcmlhIGEgbGFzIDM6MDAg4oCUIGVsaW1pbmEgZGVsIGFyY2hpdm8gbG9zIGFudW5jaW9zIGNvbiBtw6FzIGRlIDMwIGTDrWFzDQogIGNyb24uc2NoZWR1bGUoIjAgMyAqICogKiIsIGFzeW5jICgpID0+IHsNCiAgICB0cnkgew0KICAgICAgY29uc3QgUE0gPSBhd2FpdCBpbXBvcnQoIi4uL21vZGVscy9wcm9wZXJ0eU1vZGVsIik7DQogICAgICBjb25zdCBQcm9wZXJ0eU1vZGVsID0gUE0uUHJvcGVydHlNb2RlbDsNCiAgICAgIGNvbnN0IG4gPSBhd2FpdCBQcm9wZXJ0eU1vZGVsLnB1cmdlT2xkRGVsZXRlZCgpOw0KICAgICAgaWYgKG4gPiAwKSB7DQogICAgICAgIGNvbnNvbGUubG9nKGBbUHVyZ2VdICR7bn0gcHJvcGllZGFkZXMgZWxpbWluYWRhcyBkZWZpbml0aXZhbWVudGUgZGVsIGFyY2hpdm8gKD4zMCBkw61hcylgKTsNCiAgICAgIH0NCiAgICB9IGNhdGNoIChlOiBhbnkpIHsNCiAgICAgIGNvbnNvbGUuZXJyb3IoIltQdXJnZV0gRXJyb3IgZW4gcHVyZ2EgZGlhcmlhOiIsIGU/Lm1lc3NhZ2UgfHwgU3RyaW5nKGUpKTsNCiAgICB9DQogIH0pOw0KfTsNCg0KZXhwb3J0IGNvbnN0IGdldFNjaGVkdWxlclN0YXR1cyA9ICgpOiB7DQogIHJ1bm5pbmc6IGJvb2xlYW47DQogIGxhc3RSdW5BdDogc3RyaW5nIHwgbnVsbDsNCiAgbGFzdFJ1blN0YXR1czogc3RyaW5nIHwgbnVsbDsNCiAgbGFzdFJ1blRvdGFsOiBudW1iZXI7DQogIGxhc3RSdW5OZXc6IG51bWJlcjsNCiAgbmV4dFJ1bkF0OiBzdHJpbmcgfCBudWxsOw0KfSA9PiAoew0KICBydW5uaW5nOiBpc1J1bm5pbmcsDQogIGxhc3RSdW5BdDogbGFzdFJ1bkF0ID8gbGFzdFJ1bkF0LnRvSVNPU3RyaW5nKCkgOiBudWxsLA0KICBsYXN0UnVuU3RhdHVzLA0KICBsYXN0UnVuVG90YWwsDQogIGxhc3RSdW5OZXcsDQogIG5leHRSdW5BdDogbmV4dFJ1bkF0ID8gbmV4dFJ1bkF0LnRvSVNPU3RyaW5nKCkgOiBudWxsLA0KfSk7DQoNCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZWNlbnRTY3JhcGluZ0xvZ3MobGltaXQgPSAxMCk6IFByb21pc2U8Um93RGF0YVBhY2tldFtdPiB7DQogIHRyeSB7DQogICAgY29uc3QgW3Jvd3NdID0gYXdhaXQgcG9vbC5xdWVyeTxSb3dEYXRhUGFja2V0W10+KA0KICAgICAgIlNFTEVDVCAqIEZST00gc2NyYXBpbmdfbG9nIE9SREVSIEJZIHN0YXJ0ZWRfYXQgREVTQyBMSU1JVCA/IiwNCiAgICAgIFtsaW1pdF0NCiAgICApOw0KICAgIHJldHVybiByb3dzOw0KICB9IGNhdGNoIChfZSkgeyByZXR1cm4gW107IH0NCn0NCg0K","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\src\\scrapers\\capabilities.ts","beforeExisted":false,"beforeHash":null,"beforeContent":null,"afterExisted":true,"afterHash":"4d4022dba42e70507ec4c2dc350f6437fbf62fd0094cc2e906a7eb7cffcbd71b","afterContent":"ZXhwb3J0IHR5cGUgU2NyYXBlck9wZXJhdGlvbiA9ICJzYWxlIiB8ICJyZW50IjsKCi8qKgogKiBTY3JhcGVycyBxdWUgY29uc3RydXllbiB1bmEgYsO6c3F1ZWRhIGVzcGVjw61maWNhIGRlIGFscXVpbGVyIHkgZXRpcXVldGFuCiAqIGV4cGzDrWNpdGFtZW50ZSBzdXMgcmVzdWx0YWRvcyBjb21vIGByZW50YC4KICoKICogRWwgcmVzdG8gc8OzbG8gaW1wbGVtZW50YSBVUkxzIGRlIHZlbnRhLiBMYSBsaXN0YSBleHBsw61jaXRhIGV2aXRhIGVqZWN1dGFyCiAqIHVuIHNjcmFwZXIgZGUgdmVudGEgeSBwcmVzZW50YXIgc3UgcmVzdWx0YWRvIGR1cmFudGUgdW4gY2ljbG8gZGUgYWxxdWlsZXIuCiAqLwpjb25zdCBSRU5UX0NBUEFCTEVfU0NSQVBFUlMgPSBuZXcgU2V0PHN0cmluZz4oWwogICJJZGVhbGlzdGFTY3JhcGVyIiwgLy8gYWxpYXMgbGVnYWN5IHJlc3VlbHRvIGEgUGxheXdyaWdodAogICJJZGVhbGlzdGFQbGF5d3JpZ2h0U2NyYXBlciIsCiAgIkZvdG9jYXNhU2NyYXBlciIsIC8vIGFsaWFzIGxlZ2FjeSByZXN1ZWx0byBhIFBsYXl3cmlnaHQKICAiRm90b2Nhc2FQbGF5d3JpZ2h0U2NyYXBlciIsCiAgIkdsb2JhbGl6YVNjcmFwZXIiLAogICJIYWJpdGFjbGlhU2NyYXBlciIsCiAgIlBpc29zU2NyYXBlciIsCiAgIlRoaW5rU3BhaW5TY3JhcGVyIiwKXSk7CgpleHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNTY3JhcGVyT3BlcmF0aW9uKAogIHNjcmFwZXJDbGFzczogc3RyaW5nLAogIG9wZXJhdGlvbjogU2NyYXBlck9wZXJhdGlvbgopOiBib29sZWFuIHsKICByZXR1cm4gb3BlcmF0aW9uID09PSAic2FsZSIgfHwgUkVOVF9DQVBBQkxFX1NDUkFQRVJTLmhhcyhzY3JhcGVyQ2xhc3MpOwp9CgpleHBvcnQgZnVuY3Rpb24gc3VwcG9ydGVkU2NyYXBlck9wZXJhdGlvbnMoc2NyYXBlckNsYXNzOiBzdHJpbmcpOiBTY3JhcGVyT3BlcmF0aW9uW10gewogIHJldHVybiBzdXBwb3J0c1NjcmFwZXJPcGVyYXRpb24oc2NyYXBlckNsYXNzLCAicmVudCIpCiAgICA/IFsic2FsZSIsICJyZW50Il0KICAgIDogWyJzYWxlIl07Cn0K","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"},{"relativePath":"lliria-properties-scraper\\test-rental-routing.js","beforeExisted":false,"beforeHash":null,"beforeContent":null,"afterExisted":true,"afterHash":"b84e374ed0feb69df597e9a25b84dae5335dedac137007673cf9257759db041f","afterContent":"Y29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgibm9kZTphc3NlcnQvc3RyaWN0Iik7CmNvbnN0IHBsYXl3cmlnaHQgPSByZXF1aXJlKCJwbGF5d3JpZ2h0Iik7CmNvbnN0IHsKICBGb3RvY2FzYVBsYXl3cmlnaHRTY3JhcGVyLAogIElkZWFsaXN0YVBsYXl3cmlnaHRTY3JhcGVyLAogIE1pbGFudW5jaW9zU2NyYXBlciwKICBQaXNvc1NjcmFwZXIsCiAgVGVjbm9jYXNhU2NyYXBlciwKICBZYWVuY29udHJlU2NyYXBlciwKfSA9IHJlcXVpcmUoIi4vZGlzdC9zY3JhcGVycyIpOwoKY29uc3QgdmFsZW5jaWEgPSB7IG5hbWU6ICJWYWxlbmNpYSIsIHNsdWc6ICJ2YWxlbmNpYSIgfTsKY29uc3QgZGlzdHJpY3QgPSB7IHNsdWc6ICJjaXV0YXQtdmVsbGEiLCB6b25lTGFiZWw6ICJDaXV0YXQgVmVsbGEsIFZhbGVuY2lhIiB9OwoKYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUZpcnN0VXJsKFNjcmFwZXIsIG1ldGhvZCwgc2V0dXAsIHVybEFyZ0luZGV4ID0gMCkgewogIGNvbnN0IHNjcmFwZXIgPSBuZXcgU2NyYXBlcigpLnNldE9wZXJhdGlvblR5cGUoInJlbnQiKTsKICBzY3JhcGVyLmdldEFjdGl2ZVpvbmVzID0gYXN5bmMgKCkgPT4gW3ZhbGVuY2lhXTsKICBjb25zdCB1cmxzID0gW107CiAgc2NyYXBlclttZXRob2RdID0gYXN5bmMgKC4uLmFyZ3MpID0+IHsgdXJscy5wdXNoKGFyZ3NbdXJsQXJnSW5kZXhdKTsgcmV0dXJuIG1ldGhvZCA9PT0gInNjcmFwZVpvbmUiID8gW10gOiAiIjsgfTsKICBpZiAoc2V0dXApIHNldHVwKHNjcmFwZXIpOwogIGF3YWl0IHNjcmFwZXIuc2NyYXBlKCk7CiAgYXNzZXJ0Lm9rKHVybHNbMF0sIGAke1NjcmFwZXIubmFtZX0gbm8gZ2VuZXLDsyBuaW5ndW5hIFVSTGApOwogIHJldHVybiB1cmxzWzBdOwp9Cgphc3luYyBmdW5jdGlvbiBtYWluKCkgewogIGNvbnN0IG9yaWdpbmFsTGF1bmNoTWlsYW4gPSBwbGF5d3JpZ2h0LmNocm9taXVtLmxhdW5jaDsKICBwbGF5d3JpZ2h0LmNocm9taXVtLmxhdW5jaCA9IGFzeW5jICgpID0+ICh7IGNsb3NlOiBhc3luYyAoKSA9PiB7fSB9KTsKICB0cnkgewogICAgY29uc3QgaWRlYWxpc3RhID0gYXdhaXQgY2FwdHVyZUZpcnN0VXJsKAogICAgICBJZGVhbGlzdGFQbGF5d3JpZ2h0U2NyYXBlciwKICAgICAgInNjcmFwZVpvbmUiLAogICAgICBzY3JhcGVyID0+IHsgc2NyYXBlci5nZXRWYWxlbmNpYURpc3RyaWN0VGFyZ2V0cyA9IGFzeW5jICgpID0+IFtkaXN0cmljdF07IH0sCiAgICAgIDEKICAgICk7CiAgICBhc3NlcnQuZXF1YWwoaWRlYWxpc3RhLCAiaHR0cHM6Ly93d3cuaWRlYWxpc3RhLmNvbS9hbHF1aWxlci12aXZpZW5kYXMvdmFsZW5jaWEvY2l1dGF0LXZlbGxhLyIpOwogIH0gZmluYWxseSB7CiAgICBwbGF5d3JpZ2h0LmNocm9taXVtLmxhdW5jaCA9IG9yaWdpbmFsTGF1bmNoTWlsYW47CiAgfQoKICBjb25zdCBmb3RvY2FzYSA9IGF3YWl0IGNhcHR1cmVGaXJzdFVybCgKICAgIEZvdG9jYXNhUGxheXdyaWdodFNjcmFwZXIsCiAgICAiZmV0Y2hGb3RvY2FzYVBhZ2UiLAogICAgc2NyYXBlciA9PiB7IHNjcmFwZXIuZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMgPSBhc3luYyAoKSA9PiBbZGlzdHJpY3RdOyB9CiAgKTsKICBhc3NlcnQuZXF1YWwoZm90b2Nhc2EsICJodHRwczovL3d3dy5mb3RvY2FzYS5lcy9lcy9hbHF1aWxlci92aXZpZW5kYXMvdmFsZW5jaWEtY2FwaXRhbC9jaXV0YXQtdmVsbGEvbCIpOwoKICBjb25zdCBwaXNvcyA9IGF3YWl0IGNhcHR1cmVGaXJzdFVybCgKICAgIFBpc29zU2NyYXBlciwKICAgICJmZXRjaEh0bWwiLAogICAgc2NyYXBlciA9PiB7CiAgICAgIHNjcmFwZXIuZ2V0VmFsZW5jaWFEaXN0cmljdFRhcmdldHMgPSBhc3luYyAoKSA9PiBbCiAgICAgICAgeyBzbHVnOiAicGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9jaXV0YXRfdmVsbGEiLCB6b25lTmFtZTogIkNpdXRhdCBWZWxsYSwgVmFsZW5jaWEiIH0sCiAgICAgIF07CiAgICB9CiAgKTsKICBhc3NlcnQuZXF1YWwocGlzb3MsICJodHRwczovL3d3dy5waXNvcy5jb20vYWxxdWlsZXIvcGlzb3MtdmFsZW5jaWFfY2FwaXRhbF9jaXV0YXRfdmVsbGEvIik7CgogIGNvbnN0IHlhZW5jb250cmUgPSBhd2FpdCBjYXB0dXJlRmlyc3RVcmwoWWFlbmNvbnRyZVNjcmFwZXIsICJmZXRjaEh0bWwiKTsKICBhc3NlcnQuZXF1YWwoeWFlbmNvbnRyZSwgImh0dHBzOi8vd3d3LnlhZW5jb250cmUuY29tL2FscXVpbGVyL3Bpc29zL3ZhbGVuY2lhIik7CgogIGNvbnN0IHRlY25vY2FzYSA9IGF3YWl0IGNhcHR1cmVGaXJzdFVybChUZWNub2Nhc2FTY3JhcGVyLCAiZmV0Y2hIdG1sUGxheXdyaWdodCIpOwogIGFzc2VydC5lcXVhbCh0ZWNub2Nhc2EsICJodHRwczovL3d3dy50ZWNub2Nhc2EuZXMvYWxxdWlsZXIvcGlzby9jb211bmlkYWQtdmFsZW5jaWFuYS92YWxlbmNpYS92YWxlbmNpYS5odG1sIik7CgogIGNvbnN0IG9yaWdpbmFsTGF1bmNoID0gcGxheXdyaWdodC5jaHJvbWl1bS5sYXVuY2g7CiAgcGxheXdyaWdodC5jaHJvbWl1bS5sYXVuY2ggPSBhc3luYyAoKSA9PiAoeyBjbG9zZTogYXN5bmMgKCkgPT4ge30gfSk7CiAgdHJ5IHsKICAgIGNvbnN0IG1pbGFudW5jaW9zID0gYXdhaXQgY2FwdHVyZUZpcnN0VXJsKE1pbGFudW5jaW9zU2NyYXBlciwgImxvYWRQYWdlIiwgdW5kZWZpbmVkLCAxKTsKICAgIGFzc2VydC5lcXVhbChtaWxhbnVuY2lvcywgImh0dHBzOi8vd3d3Lm1pbGFudW5jaW9zLmNvbS9hbHF1aWxlci1kZS1waXNvcy1lbi12YWxlbmNpYS12YWxlbmNpYS8iKTsKICB9IGZpbmFsbHkgewogICAgcGxheXdyaWdodC5jaHJvbWl1bS5sYXVuY2ggPSBvcmlnaW5hbExhdW5jaDsKICB9CgogIGNvbnNvbGUubG9nKCJPSzogcnV0YXMgZGUgYWxxdWlsZXIgeSBkaXN0cml0b3MgZGUgVmFsZW5jaWEgdmVyaWZpY2FkYXMiKTsKfQoKbWFpbigpLmNhdGNoKGVycm9yID0+IHsKICBjb25zb2xlLmVycm9yKGVycm9yKTsKICBwcm9jZXNzLmV4aXRDb2RlID0gMTsKfSk7Cg==","decision":"accepted","decidedAt":"2026-07-22T10:45:56.596Z"}]}]}
