[READ-ONLY] Mirror of https://github.com/probablykasper/v4.kasper.space. Personal website v4.kasper.space
personal-website website
0

Configure Feed

Select the types of activity you want to include in your feed.

Deploy

Kasper (Oct 21, 2018, 4:45 PM +0200) a92d12ef 950196d1

+13 -6
+3 -1
docs/global.css
··· 105 105 overflow: hidden; } 106 106 section.hidden { 107 107 opacity: 0; } 108 + section.removed { 109 + display: none; } 108 110 section .header { 109 111 width: 100%; } 110 112 section .header p { ··· 199 201 .canvas-container canvas { 200 202 display: block; } 201 203 202 - /*# sourceMappingURL=data:application/json;charset=utf8;base64,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QUEzQiw0QkFBMkIsRUErQjRYO0lBbkZuYTtNQXNEZ0Isd0JBQWU7TUFBZixnQkFBZSxFQUFHO0lBdERsQztNQXdEZ0IsYUFBWTtNQUNaLG9CQUFtQjtNQUNuQixnQkFBZSxFQUFHO0lBMURsQztNQTREZ0IsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsZUFBYyxFQUFHO0lBOURqQztNQWdFZ0IsY0FBYTtNQUNiLDBCQUF5QjtNQUN6QixpQkFBZ0IsRUFTWTtNQTNFNUM7UUFvRW9CLDZCQUE0QjtRQUM1Qiw0QkFBMkI7UUFDM0Isc0JBQXFCO1FBQ3JCLGNBQWE7UUFDYixnQkFBZTtRQUNmLGVBQWMsRUFFUTtRQTNFMUM7VUEyRXdCLGNBQWEsRUFBRztJQTNFeEM7TUE2RWdCLGFBQVk7TUFDWixZQUFXO01BQ1gsKytCQUE4K0IsRUFBRztJQS9FamdDO01BaUZnQixhQUFZO01BQ1osWUFBVztNQUNYLCtZQUE4WSxFQUFHOztBQUVqYTtFQUNJLG1CQUFrQjtFQUNsQixTQUFRO0VBQ1IsVUFBUztFQUNULFlBQVc7RUFDWCxZQUFXO0VBQ1gsa0NBQXlCO0VBQXpCLDBCQUF5QjtFQUN6QixvREFBbUMsRUFJWjtFQVgzQjtJQVNRLFdBQVUsRUFBRztFQVRyQjtJQVdRLGVBQWMsRUFBRyIsImZpbGUiOiJnbG9iYWwuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gJGRhcms6ICMxRDIxMkRcbiRkYXJrZXN0OiAjMTQxNjFEO1xuJHNlbGVjdGlvbi1jb2xvcjogI2ZmZmZmZjtcbiRzZWxlY3Rpb24tYmctY29sb3I6ICM2MjczRDg7XG5cbi8vIHRyYW5zaXRpb25zXG4kdHJhbnNpdGlvbi0xNTogICAgICAgICAgICAgLjE1cyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMS4wKTtcblxuJHRyYW5zaXRpb24tMTA6ICAgICAgICAgICAgIC4xMHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi0xMC1pbjogICAgICAgICAgLjEwcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTEwLW91dDogICAgICAgICAuMTBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMS4wLCAxLjApO1xuXG4kdHJhbnNpdGlvbi0yMDogICAgICAgICAgICAgLjIwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTIwLWluOiAgICAgICAgICAuMjBzIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tMjAtb3V0OiAgICAgICAgIC4yMHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLjAsIDEuMCk7XG5cbiR0cmFuc2l0aW9uLTMwOiAgICAgICAgICAgICAuMzBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tMzAtaW46ICAgICAgICAgIC4zMHMgY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi0zMC1vdXQ6ICAgICAgICAgLjMwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEuMCwgMS4wKTtcblxuJHRyYW5zaXRpb24tNDA6ICAgICAgICAgICAgIC40MHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi00MC1pbjogICAgICAgICAgLjQwcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTQwLW91dDogICAgICAgICAuNDBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMS4wLCAxLjApO1xuXG4kdHJhbnNpdGlvbi0xMDA6ICAgICAgICAgICAgIDFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxLjApO1xuXG5odG1sIHtcbiAgICA6OnNlbGVjdGlvbiB7XG4gICAgICAgIGNvbG9yOiAkc2VsZWN0aW9uLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0aW9uLWJnLWNvbG9yOyB9XG4gICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlJ1YmlrXCIsIHNhbnMtc2VyaWY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDBweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfSB9XG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICBkaXYuc29jaWFsLW1lZGlhIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgMWZyKTsgfSB9XG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICBzZWN0aW9uIHtcbiAgICAgICAgZGl2LnRodW1ibmFpbHMgLml0ZW0sIGRpdi5jYXJkcyAuaXRlbSB7XG4gICAgICAgICAgICB3aWR0aDogMzAwcHg7IH0gfVxuICAgIHNlY3Rpb24udmlkZW8sIHNlY3Rpb24uc3luY3RhbiB7XG4gICAgICAgIGRpdi50aHVtYm5haWxzIC5pdGVtIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygzMDBweC8xNio5IC0gNHB4KTsgfSB9XG4gICAgc2VjdGlvbi5naXRodWIgZGl2LmNhcmRzIHtcbiAgICAgICAgLml0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZzogMTBweDsgfSB9IH1cbnNlY3Rpb24ge1xuICAgIG1heC13aWR0aDogMTAwMHB4OyB9XG4uc29jaWFsLW1lZGlhIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICBncmlkLWdhcDogMjBweDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCAxZnIpO1xuICAgIG1hcmdpbjogMTBweCBhdXRvO1xuICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgd2lkdGg6IDEwMDBweDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgYSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiAyNnB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjJweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgYS50d2l0dGVyIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL3R3aXR0ZXIucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPVwiJTIzM2YzZjNmXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCI+PHBhdGggZD1cIk0zMiA3LjA3NWMtMS4xNzUgMC41MjUtMi40NDQgMC44NzUtMy43NjkgMS4wMzEgMS4zNTYtMC44MTMgMi4zOTQtMi4xIDIuODg3LTMuNjMxLTEuMjY5IDAuNzUtMi42NzUgMS4zLTQuMTY5IDEuNTk0LTEuMi0xLjI3NS0yLjkwNi0yLjA2OS00Ljc5NC0yLjA2OS0zLjYyNSAwLTYuNTYzIDIuOTM4LTYuNTYzIDYuNTYzIDAgMC41MTIgMC4wNTYgMS4wMTIgMC4xNjkgMS40OTQtNS40NTYtMC4yNzUtMTAuMjk0LTIuODg4LTEzLjUzMS02Ljg2Mi0wLjU2MyAwLjk2OS0wLjg4NyAyLjEtMC44ODcgMy4zIDAgMi4yNzUgMS4xNTYgNC4yODcgMi45MTkgNS40NjMtMS4wNzUtMC4wMzEtMi4wODctMC4zMzEtMi45NzUtMC44MTkgMCAwLjAyNSAwIDAuMDU2IDAgMC4wODEgMCAzLjE4MSAyLjI2MyA1LjgzOCA1LjI2OSA2LjQzNy0wLjU1IDAuMTUtMS4xMzEgMC4yMzEtMS43MzEgMC4yMzEtMC40MjUgMC0wLjgzMS0wLjA0NC0xLjIzNy0wLjExOSAwLjgzOCAyLjYwNiAzLjI2MyA0LjUwNiA2LjEzMSA0LjU2My0yLjI1IDEuNzYyLTUuMDc1IDIuODEzLTguMTU2IDIuODEzLTAuNTMxIDAtMS4wNTAtMC4wMzEtMS41NjktMC4wOTQgMi45MTMgMS44NjkgNi4zNjIgMi45NSAxMC4wNjkgMi45NSAxMi4wNzUgMCAxOC42ODEtMTAuMDA2IDE4LjY4MS0xOC42ODEgMC0wLjI4Ny0wLjAwNi0wLjU2OS0wLjAxOS0wLjg1IDEuMjgxLTAuOTE5IDIuMzk0LTIuMDc1IDMuMjc1LTMuMzk0elwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEuZGlzY29yZCB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9kaXNjb3JkLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMjYuOTYzIDBjMS44NzUgMCAzLjM4NyAxLjUxNiAzLjQ3NiAzLjN2MjguN2wtMy41NjktMy4wMzEtMS45Ni0xLjc4NC0yLjEzOS0xLjg2NCAwLjg5MyAyLjk0aC0xOC43MTdjLTEuODY5IDAtMy4zODctMS40Mi0zLjM4Ny0zLjMwMXYtMjEuNjUzYzAtMS43ODQgMS41Mi0zLjMwMyAzLjM5My0zLjMwM2wyMi4wMDktMC4wMDR6TTE4LjgwNSA3LjU3N2gtMC4wNDBsLTAuMjY5IDAuMjY3YzIuNzY0IDAuOCA0LjEwMSAyLjA0OSA0LjEwMSAyLjA0OS0xLjc4MS0wLjg5MS0zLjM4Ny0xLjMzNi00Ljk5Mi0xLjUxNi0xLjE2LTAuMTgtMi4zMi0wLjA4NS0zLjMgMGgtMC4yNjdjLTAuNjI3IDAtMS45NiAwLjI2Ny0zLjc0NyAwLjk4LTAuNjIzIDAuMjcxLTAuOTggMC40NDgtMC45OCAwLjQ0OHMxLjMzNi0xLjMzNiA0LjI4LTIuMDQ5bC0wLjE4LTAuMThzLTIuMjI5LTAuMDg1LTQuNjM2IDEuNjkzYzAgMC0yLjQwNyA0LjE5Mi0yLjQwNyA5LjM2IDAgMCAxLjMzMyAyLjMyIDQuOTkxIDIuNDA4IDAgMCAwLjUzMy0wLjcxMSAxLjA3My0xLjMzNi0yLjA1My0wLjYyNC0yLjg1My0xLjg3Mi0yLjg1My0xLjg3MnMwLjE3OSAwLjA4OCAwLjQ0NyAwLjI2N2gwLjA4MGMwLjA0MCAwIDAuMDU5IDAuMDIwIDAuMDgwIDAuMDQwdjAuMDA4YzAuMDIxIDAuMDIxIDAuMDQwIDAuMDQwIDAuMDgwIDAuMDQwIDAuNDQgMC4xODEgMC44OCAwLjM2IDEuMjQgMC41MzMgMC42MjEgMC4yNjkgMS40MiAwLjUzNyAyLjQgMC43MTUgMS4yNCAwLjE4IDIuNjYxIDAuMjY3IDQuMjggMCAwLjgtMC4xOCAxLjYtMC4zNTYgMi40LTAuNzEzIDAuNTItMC4yNjcgMS4xNi0wLjUzMyAxLjg2My0wLjk4MyAwIDAtMC44IDEuMjQ4LTIuOTQgMS44NzIgMC40NCAwLjYyMSAxLjA2MCAxLjMzMyAxLjA2MCAxLjMzMyAzLjY1OS0wLjA4MCA1LjA4MC0yLjQgNS4xNi0yLjMwMSAwLTUuMTYtMi40Mi05LjM2LTIuNDItOS4zNi0yLjE4LTEuNjE5LTQuMjItMS42OC00LjU4LTEuNjhsMC4wNzUtMC4wMjd6TTE5LjAyOSAxMy40NjFjMC45MzcgMCAxLjY5MyAwLjggMS42OTMgMS43OCAwIDAuOTg3LTAuNzYgMS43ODctMS42OTMgMS43ODdzLTEuNjkzLTAuOC0xLjY5My0xLjc3OWMwLjAwMy0wLjk4NyAwLjc2NC0xLjc4NCAxLjY5My0xLjc4NHpNMTIuOTcyIDEzLjQ2MWMwLjkzMyAwIDEuNjg4IDAuOCAxLjY4OCAxLjc4IDAgMC45ODctMC43NiAxLjc4Ny0xLjY5MyAxLjc4N3MtMS42OTMtMC44LTEuNjkzLTEuNzc5YzAtMC45ODcgMC43Ni0xLjc4NCAxLjY5My0xLjc4NHpcIj48L3BhdGg+PC9zdmc+Jyk7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIHdpZHRoOiA3MHB4OyB9IH1cbiAgICBhLmZhY2Vib29rIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL2ZhY2Vib29rLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMTkgNmg1di02aC01Yy0zLjg2IDAtNyAzLjE0LTcgN3YzaC00djZoNHYxNmg2di0xNmg1bDEtNmgtNnYtM2MwLTAuNTQyIDAuNDU4LTEgMS0xelwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEueW91dHViZSB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy95b3V0dWJlLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMzEuNjgxIDkuNmMwIDAtMC4zMTMtMi4yMDYtMS4yNzUtMy4xNzUtMS4yMTktMS4yNzUtMi41ODEtMS4yODEtMy4yMDYtMS4zNTYtNC40NzUtMC4zMjUtMTEuMTk0LTAuMzI1LTExLjE5NC0wLjMyNWgtMC4wMTJjMCAwLTYuNzE5IDAtMTEuMTk0IDAuMzI1LTAuNjI1IDAuMDc1LTEuOTg3IDAuMDgxLTMuMjA2IDEuMzU2LTAuOTYzIDAuOTY5LTEuMjY5IDMuMTc1LTEuMjY5IDMuMTc1cy0wLjMxOSAyLjU4OC0wLjMxOSA1LjE4MXYyLjQyNWMwIDIuNTg3IDAuMzE5IDUuMTgxIDAuMzE5IDUuMTgxczAuMzEzIDIuMjA2IDEuMjY5IDMuMTc1YzEuMjE5IDEuMjc1IDIuODE5IDEuMjMxIDMuNTMxIDEuMzY5IDIuNTYzIDAuMjQ0IDEwLjg4MSAwLjMxOSAxMC44ODEgMC4zMTlzNi43MjUtMC4wMTIgMTEuMi0wLjMzMWMwLjYyNS0wLjA3NSAxLjk4OC0wLjA4MSAzLjIwNi0xLjM1NiAwLjk2Mi0wLjk2OSAxLjI3NS0zLjE3NSAxLjI3NS0zLjE3NXMwLjMxOS0yLjU4NyAwLjMxOS01LjE4MXYtMi40MjVjLTAuMDA2LTIuNTg4LTAuMzI1LTUuMTgxLTAuMzI1LTUuMTgxek0xMi42OTQgMjAuMTV2LTguOTk0bDguNjQ0IDQuNTEzLTguNjQ0IDQuNDgxelwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEuc291bmRjbG91ZCB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9zb3VuZGNsb3VkLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMjcuODc0IDE2LjA2OWMtMC41NjUgMC0xLjEwNSAwLjExLTEuNTk2IDAuMzA4LTAuMzI4LTMuNTc0LTMuNDQ3LTYuMzc3LTcuMjUtNi4zNzctMC45MzEgMC0xLjgzNCAwLjE3Ni0yLjYzNSAwLjQ3NC0wLjMxMSAwLjExNi0wLjM5MyAwLjIzNS0wLjM5MyAwLjQ2NnYxMi41ODVjMCAwLjI0MyAwLjE5NSAwLjQ0NSAwLjQ0MSAwLjQ2OSAwLjAxMSAwLjAwMSAxMS4zNiAwLjAwNyAxMS40MzQgMC4wMDcgMi4yNzggMCA0LjEyNS0xLjc3NiA0LjEyNS0zLjk2NXMtMS44NDgtMy45NjYtNC4xMjYtMy45NjZ6TTEyLjUgMjRoMWwwLjUtNy4wMDctMC41LTYuOTkzaC0xbC0wLjUgNi45OTN6TTkuNSAyNGgtMWwtMC41LTUuMDg2IDAuNS00LjkxNGgxbDAuNSA1ek00LjUgMjRoMWwwLjUtNC0wLjUtNGgtMWwtMC41IDR6TTAuNSAyMmgxbDAuNS0yLTAuNS0yaC0xbC0wLjUgMnpcIj48L3BhdGg+PC9zdmc+Jyk7IH1cbiAgICBhLmdpdGh1YiB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9naXRodWIucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPVwiJTIzM2YzZjNmXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCI+PHBhdGggZD1cIk0xNiAwLjM5NWMtOC44MzYgMC0xNiA3LjE2My0xNiAxNiAwIDcuMDY5IDQuNTg1IDEzLjA2NyAxMC45NDIgMTUuMTgyIDAuOCAwLjE0OCAxLjA5NC0wLjM0NyAxLjA5NC0wLjc3IDAtMC4zODEtMC4wMTUtMS42NDItMC4wMjItMi45NzktNC40NTIgMC45NjgtNS4zOTEtMS44ODgtNS4zOTEtMS44ODgtMC43MjgtMS44NDktMS43NzYtMi4zNDEtMS43NzYtMi4zNDEtMS40NTItMC45OTMgMC4xMS0wLjk3MyAwLjExLTAuOTczIDEuNjA2IDAuMTEzIDIuNDUyIDEuNjQ5IDIuNDUyIDEuNjQ5IDEuNDI3IDIuNDQ2IDMuNzQzIDEuNzM5IDQuNjU2IDEuMzMgMC4xNDMtMS4wMzQgMC41NTgtMS43NCAxLjAxNi0yLjE0LTMuNTU0LTAuNDA0LTcuMjktMS43NzctNy4yOS03LjkwNyAwLTEuNzQ3IDAuNjI1LTMuMTc0IDEuNjQ5LTQuMjk1LTAuMTY2LTAuNDAzLTAuNzE0LTIuMDMwIDAuMTU1LTQuMjM0IDAgMCAxLjM0NC0wLjQzIDQuNDAxIDEuNjQgMS4yNzYtMC4zNTUgMi42NDUtMC41MzIgNC4wMDUtMC41MzkgMS4zNTkgMC4wMDYgMi43MjkgMC4xODQgNC4wMDggMC41MzkgMy4wNTQtMi4wNzAgNC4zOTUtMS42NCA0LjM5NS0xLjY0IDAuODcxIDIuMjA0IDAuMzIzIDMuODMxIDAuMTU3IDQuMjM0IDEuMDI2IDEuMTIgMS42NDcgMi41NDggMS42NDcgNC4yOTUgMCA2LjE0NS0zLjc0MyA3LjQ5OC03LjMwNiA3Ljg5NSAwLjU3NCAwLjQ5NyAxLjA4NSAxLjQ3IDEuMDg1IDIuOTYzIDAgMi4xNDEtMC4wMTkgMy44NjQtMC4wMTkgNC4zOTEgMCAwLjQyNiAwLjI4OCAwLjkyNSAxLjA5OSAwLjc2OCA2LjM1NC0yLjExOCAxMC45MzMtOC4xMTMgMTAuOTMzLTE1LjE4IDAtOC44MzctNy4xNjQtMTYtMTYtMTZ6XCI+PC9wYXRoPjwvc3ZnPicpOyB9XG4gICAgYS5pbnN0YWdyYW0ge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJzdGF0aWMvbG9nb3MvaW5zdGFncmFtLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMTYgMi44ODFjNC4yNzUgMCA0Ljc4MSAwLjAxOSA2LjQ2MiAwLjA5NCAxLjU2MyAwLjA2OSAyLjQwNiAwLjMzMSAyLjk2OSAwLjU1IDAuNzQ0IDAuMjg4IDEuMjgxIDAuNjM4IDEuODM3IDEuMTk0IDAuNTYzIDAuNTYzIDAuOTA2IDEuMDk0IDEuMiAxLjgzOCAwLjIxOSAwLjU2MyAwLjQ4MSAxLjQxMiAwLjU1IDIuOTY5IDAuMDc1IDEuNjg4IDAuMDk0IDIuMTk0IDAuMDk0IDYuNDYzcy0wLjAxOSA0Ljc4MS0wLjA5NCA2LjQ2M2MtMC4wNjkgMS41NjMtMC4zMzEgMi40MDYtMC41NSAyLjk2OS0wLjI4OCAwLjc0NC0wLjYzNyAxLjI4MS0xLjE5NCAxLjgzNy0wLjU2MyAwLjU2My0xLjA5NCAwLjkwNi0xLjgzNyAxLjItMC41NjMgMC4yMTktMS40MTMgMC40ODEtMi45NjkgMC41NS0xLjY4OCAwLjA3NS0yLjE5NCAwLjA5NC02LjQ2MyAwLjA5NHMtNC43ODEtMC4wMTktNi40NjMtMC4wOTRjLTEuNTYzLTAuMDY5LTIuNDA2LTAuMzMxLTIuOTY5LTAuNTUtMC43NDQtMC4yODgtMS4yODEtMC42MzctMS44MzgtMS4xOTQtMC41NjMtMC41NjMtMC45MDYtMS4wOTQtMS4yLTEuODM3LTAuMjE5LTAuNTYzLTAuNDgxLTEuNDEzLTAuNTUtMi45NjktMC4wNzUtMS42ODgtMC4wOTQtMi4xOTQtMC4wOTQtNi40NjNzMC4wMTktNC43ODEgMC4wOTQtNi40NjNjMC4wNjktMS41NjMgMC4zMzEtMi40MDYgMC41NS0yLjk2OSAwLjI4OC0wLjc0NCAwLjYzOC0xLjI4MSAxLjE5NC0xLjgzOCAwLjU2My0wLjU2MyAxLjA5NC0wLjkwNiAxLjgzOC0xLjIgMC41NjMtMC4yMTkgMS40MTItMC40ODEgMi45NjktMC41NSAxLjY4MS0wLjA3NSAyLjE4OC0wLjA5NCA2LjQ2My0wLjA5NHpNMTYgMGMtNC4zNDQgMC00Ljg4NyAwLjAxOS02LjU5NCAwLjA5NC0xLjcgMC4wNzUtMi44NjkgMC4zNS0zLjg4MSAwLjc0NC0xLjA1NiAwLjQxMi0xLjk1IDAuOTU2LTIuODM3IDEuODUtMC44OTQgMC44ODgtMS40MzggMS43ODEtMS44NSAyLjgzMS0wLjM5NCAxLjAxOS0wLjY2OSAyLjE4MS0wLjc0NCAzLjg4MS0wLjA3NSAxLjcxMy0wLjA5NCAyLjI1Ni0wLjA5NCA2LjZzMC4wMTkgNC44ODcgMC4wOTQgNi41OTRjMC4wNzUgMS43IDAuMzUgMi44NjkgMC43NDQgMy44ODEgMC40MTMgMS4wNTYgMC45NTYgMS45NSAxLjg1IDIuODM3IDAuODg3IDAuODg3IDEuNzgxIDEuNDM4IDIuODMxIDEuODQ0IDEuMDE5IDAuMzk0IDIuMTgxIDAuNjY5IDMuODgxIDAuNzQ0IDEuNzA2IDAuMDc1IDIuMjUgMC4wOTQgNi41OTQgMC4wOTRzNC44ODgtMC4wMTkgNi41OTQtMC4wOTRjMS43LTAuMDc1IDIuODY5LTAuMzUgMy44ODEtMC43NDQgMS4wNTAtMC40MDYgMS45NDQtMC45NTYgMi44MzEtMS44NDRzMS40MzgtMS43ODEgMS44NDQtMi44MzFjMC4zOTQtMS4wMTkgMC42NjktMi4xODEgMC43NDQtMy44ODEgMC4wNzUtMS43MDYgMC4wOTQtMi4yNSAwLjA5NC02LjU5NHMtMC4wMTktNC44ODctMC4wOTQtNi41OTRjLTAuMDc1LTEuNy0wLjM1LTIuODY5LTAuNzQ0LTMuODgxLTAuMzk0LTEuMDYzLTAuOTM4LTEuOTU2LTEuODMxLTIuODQ0LTAuODg3LTAuODg3LTEuNzgxLTEuNDM4LTIuODMxLTEuODQ0LTEuMDE5LTAuMzk0LTIuMTgxLTAuNjY5LTMuODgxLTAuNzQ0LTEuNzEyLTAuMDgxLTIuMjU2LTAuMS02LjYtMC4xdjB6XCI+PC9wYXRoPjxwYXRoIGQ9XCJNMTYgNy43ODFjLTQuNTM3IDAtOC4yMTkgMy42ODEtOC4yMTkgOC4yMTlzMy42ODEgOC4yMTkgOC4yMTkgOC4yMTkgOC4yMTktMy42ODEgOC4yMTktOC4yMTljMC00LjUzNy0zLjY4MS04LjIxOS04LjIxOS04LjIxOXpNMTYgMjEuMzMxYy0yLjk0NCAwLTUuMzMxLTIuMzg3LTUuMzMxLTUuMzMxczIuMzg3LTUuMzMxIDUuMzMxLTUuMzMxYzIuOTQ0IDAgNS4zMzEgMi4zODcgNS4zMzEgNS4zMzFzLTIuMzg3IDUuMzMxLTUuMzMxIDUuMzMxelwiPjwvcGF0aD48cGF0aCBkPVwiTTI2LjQ2MiA3LjQ1NmMwIDEuMDYwLTAuODU5IDEuOTE5LTEuOTE5IDEuOTE5cy0xLjkxOS0wLjg1OS0xLjkxOS0xLjkxOWMwLTEuMDYwIDAuODU5LTEuOTE5IDEuOTE5LTEuOTE5czEuOTE5IDAuODU5IDEuOTE5IDEuOTE5elwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEuZW1haWwge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJzdGF0aWMvbG9nb3MvZW1haWwucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPVwiJTIzM2YzZjNmXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+PHBhdGggZD1cIk0xOCAyYzEuMTA1IDAgMiAwLjg5NSAyIDJ2MCAxMmMwIDEuMTA1LTAuODk1IDItMiAydjBoLTE2Yy0xLjEwNSAwLTItMC44OTUtMi0ydjAtMTJjMC0xLjEgMC45LTIgMi0yaDE2ek0xMy42MyAxMS4xbDYuMzcgNC45di0ybC01LjEyLTMuOSA1LjEyLTQuMXYtMmwtMTAgOC0xMC04djJsNS4xMiA0LjEtNS4xMiAzLjl2Mmw2LjM3LTQuOSAzLjYzIDIuOSAzLjYzLTIuOXpcIj48L3BhdGg+PC9zdmc+Jyk7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIHdpZHRoOiAxNzBweDsgfSB9XG4gICAgYS5oYXMtcG9wdXAge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGlucHV0LnBvcHVwIHtcbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTBweCkgc2NhbGUoMC41KTtcbiAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcIlJ1YmlrXCIsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi0yMCBhbGw7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwcHgpO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiAkZGFya2VzdDtcbiAgICAgICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH0gfVxuLmxvZ28ge1xuICAgIG1hcmdpbjogNTBweDtcbiAgICB3aWR0aDogMTUwcHg7XG4gICAgaGVpZ2h0OiAxNTBweDsgfVxuc2VjdGlvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi00MCBhbGw7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAmLmhpZGRlbiB7XG4gICAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICAuaGVhZGVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHAge1xuICAgICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIHAudGl0bGUge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OyB9XG4gICAgICAgIHAuZGVzY3JpcHRpb24ge30gfVxuICAgIC50aHVtYm5haWxzLCAuY2FyZHMge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgICAgICAgLml0ZW0ge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgICAgIHdpZHRoOiAyMDBweDtcbiAgICAgICAgICAgIG1hcmdpbjogNTBweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDBweDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi0zMCB0cmFuc2Zvcm07XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpOyB9IH1cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tMTAwIGFsbDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgfSB9IH1cbiAgICAmLnZpZGVvLCAmLnN5bmN0YW4ge1xuICAgICAgICAuaXRlbSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygyMDBweC8xNio5IC0gNHB4KTsgfSB9XG4gICAgJi5sYWN1bmEge1xuICAgICAgICAuaXRlbSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87IH0gfVxuICAgICYuZ2l0aHViIHtcbiAgICAgICAgLml0ZW0ge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICB3aWR0aDogY2FsYygyMDBweCArIDIwcHgpO1xuICAgICAgICAgICAgbWFyZ2luOiBjYWxjKDUwcHggLSAyMHB4LzIpO1xuICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2VjZWNlYztcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7IH1cbiAgICAgICAgICAgIHAudGl0bGUge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMThweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsgfVxuICAgICAgICAgICAgcC5kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwcHggMThweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM1YTVhNWE7IH1cbiAgICAgICAgICAgIC51cmxzIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICAgICAgICAgICAgICBhLnJlcG8tdXJsLCBhLnJlcG8td2Vic2l0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOyB9IH0gfVxuICAgICAgICAgICAgLnJlcG8tdXJsIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI2cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9XCIlMjMzZjNmM2ZcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIj48cGF0aCBkPVwiTTE2IDAuMzk1Yy04LjgzNiAwLTE2IDcuMTYzLTE2IDE2IDAgNy4wNjkgNC41ODUgMTMuMDY3IDEwLjk0MiAxNS4xODIgMC44IDAuMTQ4IDEuMDk0LTAuMzQ3IDEuMDk0LTAuNzcgMC0wLjM4MS0wLjAxNS0xLjY0Mi0wLjAyMi0yLjk3OS00LjQ1MiAwLjk2OC01LjM5MS0xLjg4OC01LjM5MS0xLjg4OC0wLjcyOC0xLjg0OS0xLjc3Ni0yLjM0MS0xLjc3Ni0yLjM0MS0xLjQ1Mi0wLjk5MyAwLjExLTAuOTczIDAuMTEtMC45NzMgMS42MDYgMC4xMTMgMi40NTIgMS42NDkgMi40NTIgMS42NDkgMS40MjcgMi40NDYgMy43NDMgMS43MzkgNC42NTYgMS4zMyAwLjE0My0xLjAzNCAwLjU1OC0xLjc0IDEuMDE2LTIuMTQtMy41NTQtMC40MDQtNy4yOS0xLjc3Ny03LjI5LTcuOTA3IDAtMS43NDcgMC42MjUtMy4xNzQgMS42NDktNC4yOTUtMC4xNjYtMC40MDMtMC43MTQtMi4wMzAgMC4xNTUtNC4yMzQgMCAwIDEuMzQ0LTAuNDMgNC40MDEgMS42NCAxLjI3Ni0wLjM1NSAyLjY0NS0wLjUzMiA0LjAwNS0wLjUzOSAxLjM1OSAwLjAwNiAyLjcyOSAwLjE4NCA0LjAwOCAwLjUzOSAzLjA1NC0yLjA3MCA0LjM5NS0xLjY0IDQuMzk1LTEuNjQgMC44NzEgMi4yMDQgMC4zMjMgMy44MzEgMC4xNTcgNC4yMzQgMS4wMjYgMS4xMiAxLjY0NyAyLjU0OCAxLjY0NyA0LjI5NSAwIDYuMTQ1LTMuNzQzIDcuNDk4LTcuMzA2IDcuODk1IDAuNTc0IDAuNDk3IDEuMDg1IDEuNDcgMS4wODUgMi45NjMgMCAyLjE0MS0wLjAxOSAzLjg2NC0wLjAxOSA0LjM5MSAwIDAuNDI2IDAuMjg4IDAuOTI1IDEuMDk5IDAuNzY4IDYuMzU0LTIuMTE4IDEwLjkzMy04LjExMyAxMC45MzMtMTUuMTggMC04LjgzNy03LjE2NC0xNi0xNi0xNnpcIj48L3BhdGg+PC9zdmc+Jyk7IH1cbiAgICAgICAgICAgIC5yZXBvLXdlYnNpdGUge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMy45IDEyYzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xaDRWN0g3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1aDR2LTEuOUg3Yy0xLjcxIDAtMy4xLTEuMzktMy4xLTMuMXpNOCAxM2g4di0ySDh2MnptOS02aC00djEuOWg0YzEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xcy0xLjM5IDMuMS0zLjEgMy4xaC00VjE3aDRjMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTV6XCIvPjwvc3ZnPicpOyB9IH0gfSB9XG5cbi5jYW52YXMtY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwcHg7XG4gICAgbGVmdDogMHB4O1xuICAgIHotaW5kZXg6IC0xO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tMTAwIG9wYWNpdHk7XG4gICAgJi5oaWRkZW4ge1xuICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgY2FudmFzIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuIl19 */ 204 + /*# sourceMappingURL=global.css.map */
+1
docs/global.css.map
··· 1 + {"version":3,"sources":["global.sass"],"names":[],"mappings":"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","file":"global.css","sourcesContent":["// $dark: #1D212D\n$darkest: #14161D;\n$selection-color: #ffffff;\n$selection-bg-color: #6273D8;\n\n// transitions\n$transition-15: .15s cubic-bezier(0.4, 0.0, 0.2, 1.0);\n\n$transition-10: .10s cubic-bezier(0.4, 0.0, 0.2, 1.0);\n$transition-10-in: .10s cubic-bezier(0.0, 0.0, 0.2, 1.0);\n$transition-10-out: .10s cubic-bezier(0.4, 0.0, 1.0, 1.0);\n\n$transition-20: .20s cubic-bezier(0.4, 0.0, 0.2, 1.0);\n$transition-20-in: .20s cubic-bezier(0.0, 0.0, 0.2, 1.0);\n$transition-20-out: .20s cubic-bezier(0.4, 0.0, 1.0, 1.0);\n\n$transition-30: .30s cubic-bezier(0.4, 0.0, 0.2, 1.0);\n$transition-30-in: .30s cubic-bezier(0.0, 0.0, 0.2, 1.0);\n$transition-30-out: .30s cubic-bezier(0.4, 0.0, 1.0, 1.0);\n\n$transition-40: .40s cubic-bezier(0.4, 0.0, 0.2, 1.0);\n$transition-40-in: .40s cubic-bezier(0.0, 0.0, 0.2, 1.0);\n$transition-40-out: .40s cubic-bezier(0.4, 0.0, 1.0, 1.0);\n\n$transition-100: 1s cubic-bezier(0.4, 0.0, 0.2, 1.0);\n\nhtml {\n ::selection {\n color: $selection-color;\n background-color: $selection-bg-color; }\n body {\n font-family: \"Rubik\", sans-serif;\n background-color: #ffffff;\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0px;\n align-items: center; } }\n@media (max-width: 600px) {\n div.social-media {\n grid-template-columns: repeat(4, 1fr); } }\n@media (max-width: 600px) {\n section {\n div.thumbnails .item, div.cards .item {\n width: 300px; } }\n section.video, section.synctan {\n div.thumbnails .item {\n height: calc(300px/16*9 - 4px); } }\n section.github div.cards {\n .item {\n padding: 10px; } } }\nsection {\n max-width: 1000px; }\n.social-media {\n display: grid;\n justify-items: center;\n grid-gap: 20px;\n grid-template-columns: repeat(8, 1fr);\n margin: 10px auto;\n margin-bottom: 50px;\n width: 1000px;\n max-width: 100%;\n justify-content: space-around;\n a {\n display: block;\n width: 26px;\n height: 26px;\n padding: 10px;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 22px;\n cursor: pointer; }\n a.twitter {\n // background-image: url(\"static/logos/twitter.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M32 7.075c-1.175 0.525-2.444 0.875-3.769 1.031 1.356-0.813 2.394-2.1 2.887-3.631-1.269 0.75-2.675 1.3-4.169 1.594-1.2-1.275-2.906-2.069-4.794-2.069-3.625 0-6.563 2.938-6.563 6.563 0 0.512 0.056 1.012 0.169 1.494-5.456-0.275-10.294-2.888-13.531-6.862-0.563 0.969-0.887 2.1-0.887 3.3 0 2.275 1.156 4.287 2.919 5.463-1.075-0.031-2.087-0.331-2.975-0.819 0 0.025 0 0.056 0 0.081 0 3.181 2.263 5.838 5.269 6.437-0.55 0.15-1.131 0.231-1.731 0.231-0.425 0-0.831-0.044-1.237-0.119 0.838 2.606 3.263 4.506 6.131 4.563-2.25 1.762-5.075 2.813-8.156 2.813-0.531 0-1.050-0.031-1.569-0.094 2.913 1.869 6.362 2.95 10.069 2.95 12.075 0 18.681-10.006 18.681-18.681 0-0.287-0.006-0.569-0.019-0.85 1.281-0.919 2.394-2.075 3.275-3.394z\"></path></svg>'); }\n a.discord {\n // background-image: url(\"static/logos/discord.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M26.963 0c1.875 0 3.387 1.516 3.476 3.3v28.7l-3.569-3.031-1.96-1.784-2.139-1.864 0.893 2.94h-18.717c-1.869 0-3.387-1.42-3.387-3.301v-21.653c0-1.784 1.52-3.303 3.393-3.303l22.009-0.004zM18.805 7.577h-0.040l-0.269 0.267c2.764 0.8 4.101 2.049 4.101 2.049-1.781-0.891-3.387-1.336-4.992-1.516-1.16-0.18-2.32-0.085-3.3 0h-0.267c-0.627 0-1.96 0.267-3.747 0.98-0.623 0.271-0.98 0.448-0.98 0.448s1.336-1.336 4.28-2.049l-0.18-0.18s-2.229-0.085-4.636 1.693c0 0-2.407 4.192-2.407 9.36 0 0 1.333 2.32 4.991 2.408 0 0 0.533-0.711 1.073-1.336-2.053-0.624-2.853-1.872-2.853-1.872s0.179 0.088 0.447 0.267h0.080c0.040 0 0.059 0.020 0.080 0.040v0.008c0.021 0.021 0.040 0.040 0.080 0.040 0.44 0.181 0.88 0.36 1.24 0.533 0.621 0.269 1.42 0.537 2.4 0.715 1.24 0.18 2.661 0.267 4.28 0 0.8-0.18 1.6-0.356 2.4-0.713 0.52-0.267 1.16-0.533 1.863-0.983 0 0-0.8 1.248-2.94 1.872 0.44 0.621 1.060 1.333 1.060 1.333 3.659-0.080 5.080-2.4 5.16-2.301 0-5.16-2.42-9.36-2.42-9.36-2.18-1.619-4.22-1.68-4.58-1.68l0.075-0.027zM19.029 13.461c0.937 0 1.693 0.8 1.693 1.78 0 0.987-0.76 1.787-1.693 1.787s-1.693-0.8-1.693-1.779c0.003-0.987 0.764-1.784 1.693-1.784zM12.972 13.461c0.933 0 1.688 0.8 1.688 1.78 0 0.987-0.76 1.787-1.693 1.787s-1.693-0.8-1.693-1.779c0-0.987 0.76-1.784 1.693-1.784z\"></path></svg>');\n input {\n width: 70px; } }\n a.facebook {\n // background-image: url(\"static/logos/facebook.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M19 6h5v-6h-5c-3.86 0-7 3.14-7 7v3h-4v6h4v16h6v-16h5l1-6h-6v-3c0-0.542 0.458-1 1-1z\"></path></svg>'); }\n a.youtube {\n // background-image: url(\"static/logos/youtube.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M31.681 9.6c0 0-0.313-2.206-1.275-3.175-1.219-1.275-2.581-1.281-3.206-1.356-4.475-0.325-11.194-0.325-11.194-0.325h-0.012c0 0-6.719 0-11.194 0.325-0.625 0.075-1.987 0.081-3.206 1.356-0.963 0.969-1.269 3.175-1.269 3.175s-0.319 2.588-0.319 5.181v2.425c0 2.587 0.319 5.181 0.319 5.181s0.313 2.206 1.269 3.175c1.219 1.275 2.819 1.231 3.531 1.369 2.563 0.244 10.881 0.319 10.881 0.319s6.725-0.012 11.2-0.331c0.625-0.075 1.988-0.081 3.206-1.356 0.962-0.969 1.275-3.175 1.275-3.175s0.319-2.587 0.319-5.181v-2.425c-0.006-2.588-0.325-5.181-0.325-5.181zM12.694 20.15v-8.994l8.644 4.513-8.644 4.481z\"></path></svg>'); }\n a.soundcloud {\n // background-image: url(\"static/logos/soundcloud.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M27.874 16.069c-0.565 0-1.105 0.11-1.596 0.308-0.328-3.574-3.447-6.377-7.25-6.377-0.931 0-1.834 0.176-2.635 0.474-0.311 0.116-0.393 0.235-0.393 0.466v12.585c0 0.243 0.195 0.445 0.441 0.469 0.011 0.001 11.36 0.007 11.434 0.007 2.278 0 4.125-1.776 4.125-3.965s-1.848-3.966-4.126-3.966zM12.5 24h1l0.5-7.007-0.5-6.993h-1l-0.5 6.993zM9.5 24h-1l-0.5-5.086 0.5-4.914h1l0.5 5zM4.5 24h1l0.5-4-0.5-4h-1l-0.5 4zM0.5 22h1l0.5-2-0.5-2h-1l-0.5 2z\"></path></svg>'); }\n a.github {\n // background-image: url(\"static/logos/github.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M16 0.395c-8.836 0-16 7.163-16 16 0 7.069 4.585 13.067 10.942 15.182 0.8 0.148 1.094-0.347 1.094-0.77 0-0.381-0.015-1.642-0.022-2.979-4.452 0.968-5.391-1.888-5.391-1.888-0.728-1.849-1.776-2.341-1.776-2.341-1.452-0.993 0.11-0.973 0.11-0.973 1.606 0.113 2.452 1.649 2.452 1.649 1.427 2.446 3.743 1.739 4.656 1.33 0.143-1.034 0.558-1.74 1.016-2.14-3.554-0.404-7.29-1.777-7.29-7.907 0-1.747 0.625-3.174 1.649-4.295-0.166-0.403-0.714-2.030 0.155-4.234 0 0 1.344-0.43 4.401 1.64 1.276-0.355 2.645-0.532 4.005-0.539 1.359 0.006 2.729 0.184 4.008 0.539 3.054-2.070 4.395-1.64 4.395-1.64 0.871 2.204 0.323 3.831 0.157 4.234 1.026 1.12 1.647 2.548 1.647 4.295 0 6.145-3.743 7.498-7.306 7.895 0.574 0.497 1.085 1.47 1.085 2.963 0 2.141-0.019 3.864-0.019 4.391 0 0.426 0.288 0.925 1.099 0.768 6.354-2.118 10.933-8.113 10.933-15.18 0-8.837-7.164-16-16-16z\"></path></svg>'); }\n a.instagram {\n // background-image: url(\"static/logos/instagram.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M16 2.881c4.275 0 4.781 0.019 6.462 0.094 1.563 0.069 2.406 0.331 2.969 0.55 0.744 0.288 1.281 0.638 1.837 1.194 0.563 0.563 0.906 1.094 1.2 1.838 0.219 0.563 0.481 1.412 0.55 2.969 0.075 1.688 0.094 2.194 0.094 6.463s-0.019 4.781-0.094 6.463c-0.069 1.563-0.331 2.406-0.55 2.969-0.288 0.744-0.637 1.281-1.194 1.837-0.563 0.563-1.094 0.906-1.837 1.2-0.563 0.219-1.413 0.481-2.969 0.55-1.688 0.075-2.194 0.094-6.463 0.094s-4.781-0.019-6.463-0.094c-1.563-0.069-2.406-0.331-2.969-0.55-0.744-0.288-1.281-0.637-1.838-1.194-0.563-0.563-0.906-1.094-1.2-1.837-0.219-0.563-0.481-1.413-0.55-2.969-0.075-1.688-0.094-2.194-0.094-6.463s0.019-4.781 0.094-6.463c0.069-1.563 0.331-2.406 0.55-2.969 0.288-0.744 0.638-1.281 1.194-1.838 0.563-0.563 1.094-0.906 1.838-1.2 0.563-0.219 1.412-0.481 2.969-0.55 1.681-0.075 2.188-0.094 6.463-0.094zM16 0c-4.344 0-4.887 0.019-6.594 0.094-1.7 0.075-2.869 0.35-3.881 0.744-1.056 0.412-1.95 0.956-2.837 1.85-0.894 0.888-1.438 1.781-1.85 2.831-0.394 1.019-0.669 2.181-0.744 3.881-0.075 1.713-0.094 2.256-0.094 6.6s0.019 4.887 0.094 6.594c0.075 1.7 0.35 2.869 0.744 3.881 0.413 1.056 0.956 1.95 1.85 2.837 0.887 0.887 1.781 1.438 2.831 1.844 1.019 0.394 2.181 0.669 3.881 0.744 1.706 0.075 2.25 0.094 6.594 0.094s4.888-0.019 6.594-0.094c1.7-0.075 2.869-0.35 3.881-0.744 1.050-0.406 1.944-0.956 2.831-1.844s1.438-1.781 1.844-2.831c0.394-1.019 0.669-2.181 0.744-3.881 0.075-1.706 0.094-2.25 0.094-6.594s-0.019-4.887-0.094-6.594c-0.075-1.7-0.35-2.869-0.744-3.881-0.394-1.063-0.938-1.956-1.831-2.844-0.887-0.887-1.781-1.438-2.831-1.844-1.019-0.394-2.181-0.669-3.881-0.744-1.712-0.081-2.256-0.1-6.6-0.1v0z\"></path><path d=\"M16 7.781c-4.537 0-8.219 3.681-8.219 8.219s3.681 8.219 8.219 8.219 8.219-3.681 8.219-8.219c0-4.537-3.681-8.219-8.219-8.219zM16 21.331c-2.944 0-5.331-2.387-5.331-5.331s2.387-5.331 5.331-5.331c2.944 0 5.331 2.387 5.331 5.331s-2.387 5.331-5.331 5.331z\"></path><path d=\"M26.462 7.456c0 1.060-0.859 1.919-1.919 1.919s-1.919-0.859-1.919-1.919c0-1.060 0.859-1.919 1.919-1.919s1.919 0.859 1.919 1.919z\"></path></svg>'); }\n a.email {\n // background-image: url(\"static/logos/email.png\")\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path d=\"M18 2c1.105 0 2 0.895 2 2v0 12c0 1.105-0.895 2-2 2v0h-16c-1.105 0-2-0.895-2-2v0-12c0-1.1 0.9-2 2-2h16zM13.63 11.1l6.37 4.9v-2l-5.12-3.9 5.12-4.1v-2l-10 8-10-8v2l5.12 4.1-5.12 3.9v2l6.37-4.9 3.63 2.9 3.63-2.9z\"></path></svg>');\n input {\n width: 170px; } }\n a.has-popup {\n position: relative;\n input.popup {\n &.hidden {\n transform: translate(-50%, -10px) scale(0.5);\n pointer-events: none;\n opacity: 0; }\n display: block;\n text-align: center;\n font-family: \"Rubik\", sans-serif;\n position: absolute;\n transition: $transition-20 all;\n transform: translate(-50%, 0px);\n font-size: 14px;\n border: none;\n outline: none;\n color: $darkest;\n top: 100%;\n left: 50%;\n padding: 5px;\n background-color: transparent; } } }\n.logo {\n margin: 50px;\n width: 150px;\n height: 150px; }\nsection {\n width: 100%;\n margin-bottom: 50px;\n transition: $transition-40 all;\n overflow: hidden;\n &.hidden {\n opacity: 0; }\n &.removed {\n display: none; }\n .header {\n width: 100%;\n p {\n margin: auto;\n text-align: center; }\n p.title {\n font-size: 26px;\n margin-bottom: 4px; }\n p.description {} }\n .thumbnails, .cards {\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-evenly;\n .item {\n border-radius: 10px;\n width: 200px;\n margin: 50px;\n padding: 0px;\n overflow: hidden;\n transition: $transition-30 transform;\n &:hover {\n transform: scale(1.1);\n img {\n transform: scale(1.3); } }\n img {\n transition: $transition-100 all;\n width: 100%;\n display: block; } } }\n &.video, &.synctan {\n .item {\n display: flex;\n align-items: center;\n height: calc(200px/16*9 - 4px); } }\n &.lacuna {\n .item {\n height: auto; } }\n &.github {\n .item {\n display: flex;\n flex-direction: column;\n width: calc(200px + 20px);\n margin: calc(50px - 20px/2);\n border: 2px solid #ececec;\n box-sizing: border-box;\n backface-visibility: hidden;\n &:hover {\n transform: none; }\n p.title {\n margin: 18px;\n margin-bottom: 10px;\n font-size: 18px; }\n p.description {\n margin: 0px 18px;\n font-size: 14px;\n color: #5a5a5a; }\n .urls {\n display: flex;\n justify-content: flex-end;\n margin-top: auto;\n a.repo-url, a.repo-website {\n background-repeat: no-repeat;\n background-position: center;\n background-size: 22px;\n padding: 10px;\n cursor: pointer;\n display: block;\n &.hidden {\n display: none; } } }\n .repo-url {\n height: 26px;\n width: 26px;\n background-image: url('data:image/svg+xml;utf8,<svg fill=\"%233f3f3f\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path d=\"M16 0.395c-8.836 0-16 7.163-16 16 0 7.069 4.585 13.067 10.942 15.182 0.8 0.148 1.094-0.347 1.094-0.77 0-0.381-0.015-1.642-0.022-2.979-4.452 0.968-5.391-1.888-5.391-1.888-0.728-1.849-1.776-2.341-1.776-2.341-1.452-0.993 0.11-0.973 0.11-0.973 1.606 0.113 2.452 1.649 2.452 1.649 1.427 2.446 3.743 1.739 4.656 1.33 0.143-1.034 0.558-1.74 1.016-2.14-3.554-0.404-7.29-1.777-7.29-7.907 0-1.747 0.625-3.174 1.649-4.295-0.166-0.403-0.714-2.030 0.155-4.234 0 0 1.344-0.43 4.401 1.64 1.276-0.355 2.645-0.532 4.005-0.539 1.359 0.006 2.729 0.184 4.008 0.539 3.054-2.070 4.395-1.64 4.395-1.64 0.871 2.204 0.323 3.831 0.157 4.234 1.026 1.12 1.647 2.548 1.647 4.295 0 6.145-3.743 7.498-7.306 7.895 0.574 0.497 1.085 1.47 1.085 2.963 0 2.141-0.019 3.864-0.019 4.391 0 0.426 0.288 0.925 1.099 0.768 6.354-2.118 10.933-8.113 10.933-15.18 0-8.837-7.164-16-16-16z\"></path></svg>'); }\n .repo-website {\n height: 26px;\n width: 26px;\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"/></svg>'); } } } }\n\n.canvas-container {\n position: absolute;\n top: 0px;\n left: 0px;\n z-index: -1;\n width: 100%;\n transform: rotate(180deg);\n transition: $transition-100 opacity;\n &.hidden {\n opacity: 0; }\n canvas {\n display: block; } }\n"]}
+1 -1
docs/js/bg.js
··· 1 1 "use strict";var container,camera,scene,renderer,particles,particle,canvasHeight=400,SEPARATION=100,AMOUNTX=80,AMOUNTY=40,particleColor="#3f3f3f",count=0,mouseX=0,mouseY=0;function getCanvasContainerWidth(){return document.querySelector(".canvas-container").clientWidth}(container=document.createElement("div")).classList.add("canvas-container"),container.classList.add("hidden"),setTimeout(function(){container.classList.remove("hidden")},1e3),document.body.appendChild(container);var windowHalfX=getCanvasContainerWidth()/2,windowHalfY=canvasHeight/2;function init(){(camera=new THREE.PerspectiveCamera(75,getCanvasContainerWidth()/canvasHeight,1,1e4)).position.z=1e4,scene=new THREE.Scene,particles=new Array;for(var n=2*Math.PI,e=new THREE.SpriteCanvasMaterial({color:particleColor,program:function(e){e.beginPath(),e.arc(0,0,.5,0,n,!0),e.fill()}}),a=0,i=0;i<AMOUNTX;i++)for(var t=0;t<AMOUNTY;t++)(particle=particles[a++]=new THREE.Sprite(e)).position.x=i*SEPARATION-AMOUNTX*SEPARATION/2,particle.position.z=t*SEPARATION-AMOUNTY*SEPARATION/2,scene.add(particle);(renderer=new THREE.CanvasRenderer).setPixelRatio(window.devicePixelRatio),renderer.setSize(getCanvasContainerWidth(),canvasHeight),container.appendChild(renderer.domElement),window.addEventListener("resize",onWindowResize,!1)}function onWindowResize(){var e=getCanvasContainerWidth();windowHalfX=e/2,windowHalfY=canvasHeight/2,camera.aspect=e/canvasHeight,camera.updateProjectionMatrix(),renderer.setSize(e,canvasHeight)}function animate(){requestAnimationFrame(animate),render()}function render(){camera.position.set(0,355,122);for(var e=0,n=0;n<AMOUNTX;n++)for(var a=0;a<AMOUNTY;a++)(particle=particles[e++]).position.y=50*Math.sin(.3*(n+count))+50*Math.sin(.5*(a+count)),particle.scale.x=particle.scale.y=4*(Math.sin(.3*(n+count))+1)+4*(Math.sin(.5*(a+count))+1);renderer.render(scene,camera),count+=.1}init(),animate(); 2 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2JnLmpzIl0sIm5hbWVzIjpbInBhcnRpY2xlQ29sb3IiLCJjYW1lcmEiLCJzY2VuZSIsInJlbmRlcmVyIiwiY2FudmFzSGVpZ2h0IiwiU0VQQVJBVElPTiIsIkFNT1VOVFgiLCJwYXJ0aWNsZXMiLCJtb3VzZVkiLCJzZXRUaW1lb3V0IiwiY29udGFpbmVyIiwiY2xhc3NMaXN0IiwicXVlcnlTZWxlY3RvciIsImNsaWVudFdpZHRoIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYWRkIiwibW91c2VYIiwicmVtb3ZlIiwid2luZG93SGFsZlgiLCJnZXRDYW52YXNDb250YWluZXJXaWR0aCIsIndpbmRvd0hhbGZZIiwiaW5pdCIsImFuaW1hdGUiLCJUSFJFRSIsIlNjZW5lIiwiUEkyIiwiTWF0aCIsIlBJIiwiU3ByaXRlQ2FudmFzTWF0ZXJpYWwiLCJwcm9ncmFtIiwiY29udGV4dCIsIm1hdGVyaWFsIiwiYXJjIiwiY29sb3IiLCJpIiwiaXgiLCJpeSIsIkFNT1VOVFkiLCJwYXJ0aWNsZSIsIlNwcml0ZSIsInBvc2l0aW9uIiwieCIsIkNhbnZhc1JlbmRlcmVyIiwic2V0UGl4ZWxSYXRpbyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJhZGRFdmVudExpc3RlbmVyIiwib25XaW5kb3dSZXNpemUiLCJjYW52YXNDb250YWluZXJXaWR0aCIsInVwZGF0ZVByb2plY3Rpb25NYXRyaXgiLCJzZXRTaXplIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicmVuZGVyIiwic2V0Iiwic2NhbGUiLCJ5Iiwic2luIiwiY291bnQiXSwibWFwcGluZ3MiOiJhQUNBLElBSUlBLFVBR0FDLE9BQVFDLE1BQU9DLFNBQWZGLFVBQVFDLFNBUFJFLGFBQWUsSUFEbkJDLFdBQUEsSUFDSUQsUUFBQUEsR0FDQUMsUUFBQUEsR0FDQUMsY0FBSixVQUttQkgsTUFBbkIsRUFFSUksT0FBSixFQUFBQyxPQUFBLEVBT0FDLFNBQUFBLDBCQUNJQyxPQUFVQyxTQUFWQyxjQUEyQixxQkFBM0JDLGFBUkpILFVBQWlDSSxTQUFqQ0MsY0FBQSxRQUtVSixVQUFVSyxJQUFJLG9CQUh4Qk4sVUFBSU8sVUFBSkQsSUFBQSxVQUFBUCxXQUFnQkQsV0FNWkUsVUFBVUMsVUFBVU8sT0FBTyxXQUovQlIsS0FDQUEsU0FBQUEsS0FBVUMsWUFBY0QsV0FXeEIsSUFBSVMsWUFBY0MsMEJBQTRCLEVBSjlDQyxZQUFTRCxhQUFULEVBS0EsU0FBSUMsUUFFSkMsT0FBQUEsSUFBQUEsTUFBQUEsa0JBQUFBLEdBQUFBLDBCQUFBQSxhQUFBQSxFQUFBQSxNQUNBQyxTQUFBQSxFQUFBQSxJQUVBckIsTUFBU29CLElBQVRFLE1BQWdCQyxNQUVmeEIsVUFBUyxJQUFJdUIsTUFRa0MsSUFEL0MsSUFBSUUsRUFBZ0IsRUFBVkMsS0FBS0MsR0FKZjFCLEVBQVlzQixJQUFNQyxNQUFsQkkscUJBQUEsQ0FFQXRCLE1BQUFBLGNBTUN1QixRQUFTLFNBQVdDLEdBSHJCQSxFQUFJQyxZQU1GRCxFQUFRRSxJQUFLLEVBQUcsRUFBRyxHQUFLLEVBQUdQLEdBQUssR0FKakNRLEVBQU9sQyxVQU9ObUMsRUFBQSxFQVRGQyxFQUFBLEVBQUFBLEVBQUE5QixRQUFBOEIsSUFhQSxJQUFJRCxJQUFKRSxFQUFBLEVBQUFBLEVBQUFDLFFBQUFELEtBRUFFLFNBQVVILFVBQWE5QixLQUFTOEIsSUFBUVosTUFBQWdCLE9BQUFSLElBSzdCUyxTQUFTQyxFQUFJTixFQUFLL0IsV0FBaUJDLFFBQVVELFdBQWUsRUFIdEVrQyxTQUFVRixTQUFRQSxFQUFLQyxFQUFBQSxXQUFpQkEsUUFBQWpDLFdBQUEsRUFLdkNILE1BQU1jLElBQUt1QixXQUlacEMsU0FBQSxJQUFBcUIsTUFBQW1CLGdCQUdRQyxjQUFlQyxPQUFPQyxrQkFEL0IzQyxTQUFBQSxRQUFlcUIsMEJBQWZwQixjQUNBRCxVQUFTeUMsWUFBZUMsU0FBT0MsWUFRL0JELE9BQU9FLGlCQUFrQixTQUFVQyxnQkFBZ0IsR0FLbEQsU0FBSUMsaUJBQUosSUFBSUEsRUFBdUI3QiwwQkFHNUJDLFlBQWNqQixFQUFkLEVBQUFpQixZQUFjakIsYUFBZSxFQUc3QkgsT0FBT2lELE9BQUFBLEVBQVA5QyxhQUFBSCxPQUFPaUQseUJBSVAvQyxTQUFBZ0QsUUFBQUYsRUFBQTdDLGNBUUFnRCxTQUFBQSxVQUVBQyxzQkFBQUEsU0FBQUEsU0FJRCxTQUFTQSxTQU9ScEQsT0FBTXdDLFNBQU5hLElBQWtCbEIsRUFBSzlCLElBQUFBLEtBSXJCaUMsSUFGRCxJQUFBSixFQUFNLEVBRUxJLEVBQVdoQyxFQUFBQSxFQUFXNEIsUUFBdEJDLElBR0FHLElBQUFBLElBQVNnQixFQUFULEVBQUFsQixFQUFtQkUsUUFBU2dCLEtBSzdCaEIsU0FBQWhDLFVBQUE0QixNQVBVTSxTQUFTZSxFQUF5QyxHQUFuQzdCLEtBQUs4QixJQUFzQixJQUFmckIsRUFBS3NCLFFBUzNDLEdBQUF2RCxLQUFTa0QsSUFBVCxJQUFpQm5ELEVBQWpCd0QsUUFQRW5CLFNBQVNnQixNQUFNYixFQUFJSCxTQUFTZ0IsTUFBTUMsRUFBK0MsR0FBekM3QixLQUFLOEIsSUFBc0IsSUFBZnJCLEVBQUtzQixRQUFrQixHQVM3RSxHQUFBQSxLQUFTRCxJQUFULElBQUFwQixFQUFBcUIsUUFBQSxHQUZBdkQsU0FBU2tELE9BQVFuRCxNQUFPRCxRQUV4QnlELE9BQVMsR0EzR1RwQyxPQU1EQyIsImZpbGUiOiJqcy9iZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG1pbk9uU2F2ZTogdHJ1ZSwgbWluaWZpZXI6IHVnbGlmeS1qc1xudmFyIGNhbnZhc0hlaWdodCA9IDQwMDtcbnZhciBTRVBBUkFUSU9OID0gMTAwO1xudmFyIEFNT1VOVFggPSA4MDtcbnZhciBBTU9VTlRZID0gNDA7XG52YXIgcGFydGljbGVDb2xvciA9IFwiIzNmM2YzZlwiO1xuXG52YXIgY29udGFpbmVyO1xudmFyIGNhbWVyYSwgc2NlbmUsIHJlbmRlcmVyO1xuXG52YXIgcGFydGljbGVzLCBwYXJ0aWNsZSwgY291bnQgPSAwO1xuXG52YXIgbW91c2VYID0gMCwgbW91c2VZID0gMDtcblxuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcbmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiY2FudmFzLWNvbnRhaW5lclwiKTtcbmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbn0sIDEwMDApO1xuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7XG5cbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNhbnZhcy1jb250YWluZXJcIikuY2xpZW50V2lkdGg7XG59XG5cbnZhciB3aW5kb3dIYWxmWCA9IGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCkgLyAyO1xudmFyIHdpbmRvd0hhbGZZID0gY2FudmFzSGVpZ2h0IC8gMjtcblxuaW5pdCgpO1xuYW5pbWF0ZSgpO1xuXG5mdW5jdGlvbiBpbml0KCkge1xuXG5cdGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSggNzUsIGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCkgLyBjYW52YXNIZWlnaHQsIDEsIDEwMDAwICk7XG5cdGNhbWVyYS5wb3NpdGlvbi56ID0gMTAwMDA7XG5cblx0c2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKTtcblxuXHRwYXJ0aWNsZXMgPSBuZXcgQXJyYXkoKTtcblxuXHR2YXIgUEkyID0gTWF0aC5QSSAqIDI7XG5cdHZhciBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCgge1xuXG5cdFx0Y29sb3I6IHBhcnRpY2xlQ29sb3IsXG5cdFx0cHJvZ3JhbTogZnVuY3Rpb24gKCBjb250ZXh0ICkge1xuXG5cdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y29udGV4dC5hcmMoIDAsIDAsIDAuNSwgMCwgUEkyLCB0cnVlICk7XG5cdFx0XHRjb250ZXh0LmZpbGwoKTtcblxuXHRcdH1cblxuXHR9ICk7XG5cblx0dmFyIGkgPSAwO1xuXG5cdGZvciAoIHZhciBpeCA9IDA7IGl4IDwgQU1PVU5UWDsgaXggKysgKSB7XG5cblx0XHRmb3IgKCB2YXIgaXkgPSAwOyBpeSA8IEFNT1VOVFk7IGl5ICsrICkge1xuXG5cdFx0XHRwYXJ0aWNsZSA9IHBhcnRpY2xlc1sgaSArKyBdID0gbmV3IFRIUkVFLlNwcml0ZSggbWF0ZXJpYWwgKTtcblx0XHRcdHBhcnRpY2xlLnBvc2l0aW9uLnggPSBpeCAqIFNFUEFSQVRJT04gLSAoICggQU1PVU5UWCAqIFNFUEFSQVRJT04gKSAvIDIgKTtcblx0XHRcdHBhcnRpY2xlLnBvc2l0aW9uLnogPSBpeSAqIFNFUEFSQVRJT04gLSAoICggQU1PVU5UWSAqIFNFUEFSQVRJT04gKSAvIDIgKTtcblx0XHRcdHNjZW5lLmFkZCggcGFydGljbGUgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0cmVuZGVyZXIgPSBuZXcgVEhSRUUuQ2FudmFzUmVuZGVyZXIoKTtcblx0cmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyggd2luZG93LmRldmljZVBpeGVsUmF0aW8gKTtcblx0cmVuZGVyZXIuc2V0U2l6ZSggZ2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKSwgY2FudmFzSGVpZ2h0ICk7XG5cdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggcmVuZGVyZXIuZG9tRWxlbWVudCApO1xuXG5cblxuXHQvL1xuXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAncmVzaXplJywgb25XaW5kb3dSZXNpemUsIGZhbHNlICk7XG5cbn1cblxuZnVuY3Rpb24gb25XaW5kb3dSZXNpemUoKSB7XG4gIHZhciBjYW52YXNDb250YWluZXJXaWR0aCA9IGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCk7XG5cblx0d2luZG93SGFsZlggPSBjYW52YXNDb250YWluZXJXaWR0aCAvIDI7XG5cdHdpbmRvd0hhbGZZID0gY2FudmFzSGVpZ2h0IC8gMjtcblxuXHRjYW1lcmEuYXNwZWN0ID0gY2FudmFzQ29udGFpbmVyV2lkdGggLyBjYW52YXNIZWlnaHQ7XG5cdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0cmVuZGVyZXIuc2V0U2l6ZSggY2FudmFzQ29udGFpbmVyV2lkdGgsIGNhbnZhc0hlaWdodCApO1xuXG59XG5cbi8vXG5cbi8vXG5cbmZ1bmN0aW9uIGFuaW1hdGUoKSB7XG5cblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBhbmltYXRlICk7XG5cblx0cmVuZGVyKCk7XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVyKCkge1xuXG5cblx0Y2FtZXJhLnBvc2l0aW9uLnNldCgwLDM1NSwxMjIpO1xuXG5cdHZhciBpID0gMDtcblxuXHRmb3IgKCB2YXIgaXggPSAwOyBpeCA8IEFNT1VOVFg7IGl4ICsrICkge1xuXG5cdFx0Zm9yICggdmFyIGl5ID0gMDsgaXkgPCBBTU9VTlRZOyBpeSArKyApIHtcblxuXHRcdFx0cGFydGljbGUgPSBwYXJ0aWNsZXNbIGkrKyBdO1xuXHRcdFx0cGFydGljbGUucG9zaXRpb24ueSA9ICggTWF0aC5zaW4oICggaXggKyBjb3VudCApICogMC4zICkgKiA1MCApICtcblx0XHRcdFx0KCBNYXRoLnNpbiggKCBpeSArIGNvdW50ICkgKiAwLjUgKSAqIDUwICk7XG5cdFx0XHRwYXJ0aWNsZS5zY2FsZS54ID0gcGFydGljbGUuc2NhbGUueSA9ICggTWF0aC5zaW4oICggaXggKyBjb3VudCApICogMC4zICkgKyAxICkgKiA0ICtcblx0XHRcdFx0KCBNYXRoLnNpbiggKCBpeSArIGNvdW50ICkgKiAwLjUgKSArIDEgKSAqIDQ7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGNhbWVyYSApO1xuXG5cdGNvdW50ICs9IDAuMTtcblxufVxuIl19 2 + //# sourceMappingURL=bg.js.map
+1
docs/js/bg.js.map
··· 1 + {"version":3,"sources":["js/bg.js"],"names":["particleColor","camera","scene","renderer","canvasHeight","SEPARATION","AMOUNTX","particles","mouseY","setTimeout","container","classList","querySelector","clientWidth","document","createElement","add","mouseX","remove","windowHalfX","getCanvasContainerWidth","windowHalfY","init","animate","THREE","Scene","PI2","Math","PI","SpriteCanvasMaterial","program","context","material","arc","color","i","ix","iy","AMOUNTY","particle","Sprite","position","x","CanvasRenderer","setPixelRatio","window","devicePixelRatio","addEventListener","onWindowResize","canvasContainerWidth","updateProjectionMatrix","setSize","requestAnimationFrame","render","set","scale","y","sin","count"],"mappings":"aACA,IAIIA,UAGAC,OAAQC,MAAOC,SAAfF,UAAQC,SAPRE,aAAe,IADnBC,WAAA,IACID,QAAAA,GACAC,QAAAA,GACAC,cAAJ,UAKmBH,MAAnB,EAEII,OAAJ,EAAAC,OAAA,EAOAC,SAAAA,0BACIC,OAAUC,SAAVC,cAA2B,qBAA3BC,aARJH,UAAiCI,SAAjCC,cAAA,QAKUJ,UAAUK,IAAI,oBAHxBN,UAAIO,UAAJD,IAAA,UAAAP,WAAgBD,WAMZE,UAAUC,UAAUO,OAAO,WAJ/BR,KACAA,SAAAA,KAAUC,YAAcD,WAWxB,IAAIS,YAAcC,0BAA4B,EAJ9CC,YAASD,aAAT,EAKA,SAAIC,QAEJC,OAAAA,IAAAA,MAAAA,kBAAAA,GAAAA,0BAAAA,aAAAA,EAAAA,MACAC,SAAAA,EAAAA,IAEArB,MAASoB,IAATE,MAAgBC,MAEfxB,UAAS,IAAIuB,MAQkC,IAD/C,IAAIE,EAAgB,EAAVC,KAAKC,GAJf1B,EAAYsB,IAAMC,MAAlBI,qBAAA,CAEAtB,MAAAA,cAMCuB,QAAS,SAAWC,GAHrBA,EAAIC,YAMFD,EAAQE,IAAK,EAAG,EAAG,GAAK,EAAGP,GAAK,GAJjCQ,EAAOlC,UAONmC,EAAA,EATFC,EAAA,EAAAA,EAAA9B,QAAA8B,IAaA,IAAID,IAAJE,EAAA,EAAAA,EAAAC,QAAAD,KAEAE,SAAUH,UAAa9B,KAAS8B,IAAQZ,MAAAgB,OAAAR,IAK7BS,SAASC,EAAIN,EAAK/B,WAAiBC,QAAUD,WAAe,EAHtEkC,SAAUF,SAAQA,EAAKC,EAAAA,WAAiBA,QAAAjC,WAAA,EAKvCH,MAAMc,IAAKuB,WAIZpC,SAAA,IAAAqB,MAAAmB,gBAGQC,cAAeC,OAAOC,kBAD/B3C,SAAAA,QAAeqB,0BAAfpB,cACAD,UAASyC,YAAeC,SAAOC,YAQ/BD,OAAOE,iBAAkB,SAAUC,gBAAgB,GAKlD,SAAIC,iBAAJ,IAAIA,EAAuB7B,0BAG5BC,YAAcjB,EAAd,EAAAiB,YAAcjB,aAAe,EAG7BH,OAAOiD,OAAAA,EAAP9C,aAAAH,OAAOiD,yBAIP/C,SAAAgD,QAAAF,EAAA7C,cAQAgD,SAAAA,UAEAC,sBAAAA,SAAAA,SAID,SAASA,SAORpD,OAAMwC,SAANa,IAAkBlB,EAAK9B,IAAAA,KAIrBiC,IAFD,IAAAJ,EAAM,EAELI,EAAWhC,EAAAA,EAAW4B,QAAtBC,IAGAG,IAAAA,IAASgB,EAAT,EAAAlB,EAAmBE,QAASgB,KAK7BhB,SAAAhC,UAAA4B,MAPUM,SAASe,EAAyC,GAAnC7B,KAAK8B,IAAsB,IAAfrB,EAAKsB,QAS3C,GAAAvD,KAASkD,IAAT,IAAiBnD,EAAjBwD,QAPEnB,SAASgB,MAAMb,EAAIH,SAASgB,MAAMC,EAA+C,GAAzC7B,KAAK8B,IAAsB,IAAfrB,EAAKsB,QAAkB,GAS7E,GAAAA,KAASD,IAAT,IAAApB,EAAAqB,QAAA,GAFAvD,SAASkD,OAAQnD,MAAOD,QAExByD,OAAS,GA3GTpC,OAMDC","file":"bg.js","sourcesContent":["// minOnSave: true, minifier: uglify-js\nvar canvasHeight = 400;\nvar SEPARATION = 100;\nvar AMOUNTX = 80;\nvar AMOUNTY = 40;\nvar particleColor = \"#3f3f3f\";\n\nvar container;\nvar camera, scene, renderer;\n\nvar particles, particle, count = 0;\n\nvar mouseX = 0, mouseY = 0;\n\ncontainer = document.createElement( 'div' );\ncontainer.classList.add(\"canvas-container\");\ncontainer.classList.add(\"hidden\");\nsetTimeout(function() {\n container.classList.remove(\"hidden\");\n}, 1000);\ndocument.body.appendChild( container );\n\nfunction getCanvasContainerWidth() {\n return document.querySelector(\".canvas-container\").clientWidth;\n}\n\nvar windowHalfX = getCanvasContainerWidth() / 2;\nvar windowHalfY = canvasHeight / 2;\n\ninit();\nanimate();\n\nfunction init() {\n\n\tcamera = new THREE.PerspectiveCamera( 75, getCanvasContainerWidth() / canvasHeight, 1, 10000 );\n\tcamera.position.z = 10000;\n\n\tscene = new THREE.Scene();\n\n\tparticles = new Array();\n\n\tvar PI2 = Math.PI * 2;\n\tvar material = new THREE.SpriteCanvasMaterial( {\n\n\t\tcolor: particleColor,\n\t\tprogram: function ( context ) {\n\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc( 0, 0, 0.5, 0, PI2, true );\n\t\t\tcontext.fill();\n\n\t\t}\n\n\t} );\n\n\tvar i = 0;\n\n\tfor ( var ix = 0; ix < AMOUNTX; ix ++ ) {\n\n\t\tfor ( var iy = 0; iy < AMOUNTY; iy ++ ) {\n\n\t\t\tparticle = particles[ i ++ ] = new THREE.Sprite( material );\n\t\t\tparticle.position.x = ix * SEPARATION - ( ( AMOUNTX * SEPARATION ) / 2 );\n\t\t\tparticle.position.z = iy * SEPARATION - ( ( AMOUNTY * SEPARATION ) / 2 );\n\t\t\tscene.add( particle );\n\n\t\t}\n\n\t}\n\n\trenderer = new THREE.CanvasRenderer();\n\trenderer.setPixelRatio( window.devicePixelRatio );\n\trenderer.setSize( getCanvasContainerWidth(), canvasHeight );\n\tcontainer.appendChild( renderer.domElement );\n\n\n\n\t//\n\n\twindow.addEventListener( 'resize', onWindowResize, false );\n\n}\n\nfunction onWindowResize() {\n var canvasContainerWidth = getCanvasContainerWidth();\n\n\twindowHalfX = canvasContainerWidth / 2;\n\twindowHalfY = canvasHeight / 2;\n\n\tcamera.aspect = canvasContainerWidth / canvasHeight;\n\tcamera.updateProjectionMatrix();\n\n\trenderer.setSize( canvasContainerWidth, canvasHeight );\n\n}\n\n//\n\n//\n\nfunction animate() {\n\n\trequestAnimationFrame( animate );\n\n\trender();\n\n}\n\nfunction render() {\n\n\n\tcamera.position.set(0,355,122);\n\n\tvar i = 0;\n\n\tfor ( var ix = 0; ix < AMOUNTX; ix ++ ) {\n\n\t\tfor ( var iy = 0; iy < AMOUNTY; iy ++ ) {\n\n\t\t\tparticle = particles[ i++ ];\n\t\t\tparticle.position.y = ( Math.sin( ( ix + count ) * 0.3 ) * 50 ) +\n\t\t\t\t( Math.sin( ( iy + count ) * 0.5 ) * 50 );\n\t\t\tparticle.scale.x = particle.scale.y = ( Math.sin( ( ix + count ) * 0.3 ) + 1 ) * 4 +\n\t\t\t\t( Math.sin( ( iy + count ) * 0.5 ) + 1 ) * 4;\n\n\t\t}\n\n\t}\n\n\trenderer.render( scene, camera );\n\n\tcount += 0.1;\n\n}\n"]}
+1 -1
docs/js/canvas-renderer-and-projector.js
··· 1 1 "use strict";var bgColor=16777215;THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial=!0,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){console.log("THREE.CanvasRenderer",THREE.REVISION),e=e||{};var s,l,h,c,p,E,u,m,v,y,x,R,T,g,S,H,w,M,C,b=this,d=new THREE.Projector,i=void 0!==e.canvas?e.canvas:document.createElement("canvas"),f=i.width,z=i.height,V=Math.floor(f/2),j=Math.floor(z/2),L=0,O=0,B=f,P=z,o=1,W=i.getContext("2d",{alpha:!0===e.alpha}),t=new THREE.Color(bgColor),n=!0===e.alpha?0:1,a=1,N=0,k=null,A=null,F=null,D=null,G=null,r=[],I=new THREE.Color,U=new THREE.Color,q=new THREE.Color,J=new THREE.Color,K={},Q=new THREE.Box2,X=new THREE.Box2,Y=new THREE.Box2,Z=new THREE.Color,$=new THREE.Color,_=new THREE.Color,ee=new THREE.Vector3,re=new THREE.Vector3,te=new THREE.Vector3,ie=new THREE.Matrix3;function oe(e,r,t){de(t.opacity),fe(t.blending);var i=r.scale.x*V,o=r.scale.y*j,n=Math.sqrt(i*i+o*o);if(Y.min.set(e.x-n,e.y-n),Y.max.set(e.x+n,e.y+n),t.isSpriteMaterial){var a=t.map;if(null!==a){var s=K[a.id];if(void 0!==s&&s.version===a.version||(s=ce(a),K[a.id]=s),void 0!==s.canvas){ye(s.canvas);var l=a.image,c=l.width*a.offset.x,p=l.height*a.offset.y,E=l.width*a.repeat.x,d=l.height*a.repeat.y,f=i/E,h=o/d;W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.translate(-i/2,-o/2),W.scale(f,h),W.translate(-c,-p),W.fillRect(c,p,E,d),W.restore()}}else ye(t.color.getStyle()),W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.scale(i,-o),W.fillRect(-.5,-.5,1,1),W.restore()}else t.isSpriteCanvasMaterial?(ve(t.color.getStyle()),ye(t.color.getStyle()),W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.scale(i,o),t.program(W),W.restore()):t.isPointsMaterial&&(ye(t.color.getStyle()),W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.scale(i*t.size,-o*t.size),W.fillRect(-.5,-.5,1,1),W.restore())}function ne(e,r,t,i){if(de(i.opacity),fe(i.blending),W.beginPath(),W.moveTo(e.positionScreen.x,e.positionScreen.y),W.lineTo(r.positionScreen.x,r.positionScreen.y),i.isLineBasicMaterial){if(he(i.linewidth),ue(i.linecap),me(i.linejoin),i.vertexColors!==THREE.VertexColors)ve(i.color.getStyle());else{var o=t.vertexColors[0].getStyle(),n=t.vertexColors[1].getStyle();if(o===n)ve(o);else{try{var a=W.createLinearGradient(e.positionScreen.x,e.positionScreen.y,r.positionScreen.x,r.positionScreen.y);a.addColorStop(0,o),a.addColorStop(1,n)}catch(e){a=o}ve(a)}}i.isLineDashedMaterial&&xe([i.dashSize,i.gapSize]),W.stroke(),Y.expandByScalar(2*i.linewidth),i.isLineDashedMaterial&&xe([])}}function ae(e,r,t,i,o,n,a,s){var l,c,p,E,d,f;if(b.info.render.vertices+=3,b.info.render.faces++,de(s.opacity),fe(s.blending),u=e.positionScreen.x,m=e.positionScreen.y,v=r.positionScreen.x,y=r.positionScreen.y,x=t.positionScreen.x,R=t.positionScreen.y,l=u,c=m,p=v,E=y,d=x,f=R,W.beginPath(),W.moveTo(l,c),W.lineTo(p,E),W.lineTo(d,f),W.closePath(),(s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial)&&null===s.map)U.copy(s.color),q.copy(s.emissive),s.vertexColors===THREE.FaceColors&&U.multiply(a.color),I.copy(Z),re.copy(e.positionWorld).add(r.positionWorld).add(t.positionWorld).divideScalar(3),function(e,r,t){for(var i=0,o=h.length;i<o;i++){var n=h[i];if(J.copy(n.color),n.isDirectionalLight){var a=ee.setFromMatrixPosition(n.matrixWorld).normalize();if((s=r.dot(a))<=0)continue;s*=n.intensity,t.add(J.multiplyScalar(s))}else if(n.isPointLight){var s;if(a=ee.setFromMatrixPosition(n.matrixWorld),(s=r.dot(ee.subVectors(a,e).normalize()))<=0)continue;if(0==(s*=0==n.distance?1:1-Math.min(e.distanceTo(a)/n.distance,1)))continue;s*=n.intensity,t.add(J.multiplyScalar(s))}}}(re,a.normalModel,I),I.multiply(U).add(q),!0===s.wireframe?se(I,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):le(I);else if(s.isMeshBasicMaterial||s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial){if(null!==s.map)s.map.mapping===THREE.UVMapping&&(T=a.uvs,pe(u,m,v,y,x,R,T[i].x,T[i].y,T[o].x,T[o].y,T[n].x,T[n].y,s.map));else null!==s.envMap?s.envMap.mapping===THREE.SphericalReflectionMapping&&(te.copy(a.vertexNormalsModel[i]).applyMatrix3(ie),g=.5*te.x+.5,S=.5*te.y+.5,te.copy(a.vertexNormalsModel[o]).applyMatrix3(ie),H=.5*te.x+.5,w=.5*te.y+.5,te.copy(a.vertexNormalsModel[n]).applyMatrix3(ie),M=.5*te.x+.5,C=.5*te.y+.5,pe(u,m,v,y,x,R,g,S,H,w,M,C,s.envMap)):(I.copy(s.color),s.vertexColors===THREE.FaceColors&&I.multiply(a.color),!0===s.wireframe?se(I,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):le(I))}else s.isMeshNormalMaterial?(te.copy(a.normalModel).applyMatrix3(ie),I.setRGB(te.x,te.y,te.z).multiplyScalar(.5).addScalar(.5)):I.setRGB(1,1,1),!0===s.wireframe?se(I,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):le(I)}function se(e,r,t,i){he(r),ue(t),me(i),ve(e.getStyle()),W.stroke(),Y.expandByScalar(2*r)}function le(e){ye(e.getStyle()),W.fill()}function ce(e){if(0===e.version||e instanceof THREE.CompressedTexture||e instanceof THREE.DataTexture)return{canvas:void 0,version:e.version};var r=e.image;if(!1===r.complete)return{canvas:void 0,version:0};var t=e.wrapS===THREE.RepeatWrapping||e.wrapS===THREE.MirroredRepeatWrapping,i=e.wrapT===THREE.RepeatWrapping||e.wrapT===THREE.MirroredRepeatWrapping,o=e.wrapS===THREE.MirroredRepeatWrapping,n=e.wrapT===THREE.MirroredRepeatWrapping,a=document.createElement("canvas");a.width=r.width*(o?2:1),a.height=r.height*(n?2:1);var s=a.getContext("2d");s.setTransform(1,0,0,-1,0,r.height),s.drawImage(r,0,0),!0===o&&(s.setTransform(-1,0,0,-1,r.width,r.height),s.drawImage(r,-r.width,0)),!0===n&&(s.setTransform(1,0,0,1,0,0),s.drawImage(r,0,r.height)),!0===o&&!0===n&&(s.setTransform(-1,0,0,1,r.width,0),s.drawImage(r,-r.width,r.height));var l="no-repeat";!0===t&&!0===i?l="repeat":!0===t?l="repeat-x":!0===i&&(l="repeat-y");var c=W.createPattern(a,l);return e.onUpdate&&e.onUpdate(e),{canvas:c,version:e.version}}function pe(e,r,t,i,o,n,a,s,l,c,p,E,d){var f=K[d.id];if(void 0!==f&&f.version===d.version||(f=ce(d),K[d.id]=f),void 0===f.canvas)return ye("rgba( 0, 0, 0, 1)"),void W.fill();ye(f.canvas);var h,u,m,v,y,x,R,T,g=d.offset.x/d.repeat.x,S=d.offset.y/d.repeat.y,H=d.image.width*d.repeat.x,w=d.image.height*d.repeat.y;l=(l+g)*H,c=(c+S)*w,p=(p+g)*H,E=(E+S)*w,t-=e,i-=r,o-=e,n-=r,0!==(R=(l-=a=(a+g)*H)*(E-=s=(s+S)*w)-(p-=a)*(c-=s))&&(y=e-(h=(E*t-c*o)*(T=1/R))*a-(m=(l*o-p*t)*T)*s,x=r-(u=(E*i-c*n)*T)*a-(v=(l*n-p*i)*T)*s,W.save(),W.transform(h,u,m,v,y,x),W.fill(),W.restore())}function Ee(e,r,t){var i,o=r.x-e.x,n=r.y-e.y,a=o*o+n*n;0!==a&&(o*=i=t/Math.sqrt(a),n*=i,r.x+=o,r.y+=n,e.x-=o,e.y-=n)}function de(e){a!==e&&(W.globalAlpha=e,a=e)}function fe(e){N!==e&&(e===THREE.NormalBlending?W.globalCompositeOperation="source-over":e===THREE.AdditiveBlending?W.globalCompositeOperation="lighter":e===THREE.SubtractiveBlending?W.globalCompositeOperation="darker":e===THREE.MultiplyBlending&&(W.globalCompositeOperation="multiply"),N=e)}function he(e){F!==e&&(W.lineWidth=e,F=e)}function ue(e){D!==e&&(W.lineCap=e,D=e)}function me(e){G!==e&&(W.lineJoin=e,G=e)}function ve(e){k!==e&&(W.strokeStyle=e,k=e)}function ye(e){A!==e&&(W.fillStyle=e,A=e)}function xe(e){r.length!==e.length&&(W.setLineDash(e),r=e)}void 0===W.setLineDash&&(W.setLineDash=function(){}),this.domElement=i,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.getContext=function(){return W},this.getContextAttributes=function(){return W.getContextAttributes()},this.getPixelRatio=function(){return o},this.setPixelRatio=function(e){void 0!==e&&(o=e)},this.setSize=function(e,r,t){f=e*o,z=r*o,i.width=f,i.height=z,V=Math.floor(f/2),j=Math.floor(z/2),!1!==t&&(i.style.width=e+"px",i.style.height=r+"px"),Q.min.set(-V,-j),Q.max.set(V,j),X.min.set(-V,-j),X.max.set(V,j),a=1,N=0,G=D=F=A=k=null,this.setViewport(0,0,e,r)},this.setViewport=function(e,r,t,i){L=e*o,O=r*o,B=t*o,P=i*o},this.setScissor=function(){},this.setScissorTest=function(){},this.setClearColor=function(e,r){t.set(e),n=void 0!==r?r:1,X.min.set(-V,-j),X.max.set(V,j)},this.setClearColorHex=function(e,r){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(e,r)},this.getClearColor=function(){return t},this.getClearAlpha=function(){return n},this.getMaxAnisotropy=function(){return 0},this.clear=function(){!1===X.isEmpty()&&(X.intersect(Q),X.expandByScalar(2),X.min.x=X.min.x+V,X.min.y=-X.min.y+j,X.max.x=X.max.x+V,X.max.y=-X.max.y+j,n<1&&W.clearRect(0|X.min.x,0|X.max.y,X.max.x-X.min.x|0,X.min.y-X.max.y|0),0<n&&(de(1),fe(THREE.NormalBlending),ye("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+n+")"),W.fillRect(0|X.min.x,0|X.max.y,X.max.x-X.min.x|0,X.min.y-X.max.y|0)),X.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(e,r){if(void 0!==r.isCamera){var t=e.background;t&&t.isColor?(de(1),fe(THREE.NormalBlending),ye(t.getStyle()),W.fillRect(0,0,f,z)):!0===this.autoClear&&this.clear(),b.info.render.vertices=0,b.info.render.faces=0,W.setTransform(B/f,0,0,-P/z,L,z-O),W.translate(V,j),s=d.projectScene(e,r,this.sortObjects,this.sortElements),l=s.elements,h=s.lights,ie.getNormalMatrix(r.matrixWorldInverse),function(){Z.setRGB(0,0,0),$.setRGB(0,0,0),_.setRGB(0,0,0);for(var e=0,r=h.length;e<r;e++){var t=h[e],i=t.color;t.isAmbientLight?Z.add(i):t.isDirectionalLight?$.add(i):t.isPointLight&&_.add(i)}}();for(var i=0,o=l.length;i<o;i++){var n=l[i],a=n.material;if(void 0!==a&&0!==a.opacity){if(Y.makeEmpty(),n instanceof THREE.RenderableSprite)(c=n).x*=V,c.y*=j,oe(c,n,a);else if(n instanceof THREE.RenderableLine)c=n.v1,p=n.v2,c.positionScreen.x*=V,c.positionScreen.y*=j,p.positionScreen.x*=V,p.positionScreen.y*=j,Y.setFromPoints([c.positionScreen,p.positionScreen]),!0===Q.intersectsBox(Y)&&ne(c,p,n,a);else if(n instanceof THREE.RenderableFace){if(c=n.v1,p=n.v2,E=n.v3,c.positionScreen.z<-1||1<c.positionScreen.z)continue;if(p.positionScreen.z<-1||1<p.positionScreen.z)continue;if(E.positionScreen.z<-1||1<E.positionScreen.z)continue;c.positionScreen.x*=V,c.positionScreen.y*=j,p.positionScreen.x*=V,p.positionScreen.y*=j,E.positionScreen.x*=V,E.positionScreen.y*=j,0<a.overdraw&&(Ee(c.positionScreen,p.positionScreen,a.overdraw),Ee(p.positionScreen,E.positionScreen,a.overdraw),Ee(E.positionScreen,c.positionScreen,a.overdraw)),Y.setFromPoints([c.positionScreen,p.positionScreen,E.positionScreen]),!0===Q.intersectsBox(Y)&&ae(c,p,E,0,1,2,n,a)}X.union(Y)}}W.setTransform(1,0,0,1,0,0)}else console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.")}},THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0,this.renderOrder=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0,this.renderOrder=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(e){this.positionWorld.copy(e.positionWorld),this.positionScreen.copy(e.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0,this.renderOrder=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null,this.renderOrder=0},THREE.Projector=function(){var r,X,n,Y,Z,$,_,ee,o,re,te,t=[],i=0,ie=[],a=0,s=[],l=0,c=[],p=0,E=[],d=0,oe={objects:[],lights:[],elements:[]},ne=new THREE.Vector3,ae=new THREE.Vector4,u=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),m=new THREE.Box3,v=new Array(3),se=new THREE.Matrix4,le=new THREE.Matrix4,ce=new THREE.Matrix4,pe=new THREE.Matrix3,Ee=new THREE.Frustum,de=new THREE.Vector4,fe=new THREE.Vector4;this.projectVector=function(e,r){console.warn("THREE.Projector: .projectVector() is now vector.project()."),e.project(r)},this.unprojectVector=function(e,r){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),e.unproject(r)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var he=new function(){var l=[],o=[],c=[],p=null,E=null,d=new THREE.Matrix3;function i(e){var r=e.position,t=e.positionWorld,i=e.positionScreen;t.copy(r).applyMatrix4(te),i.copy(t).applyMatrix4(le);var o=1/i.w;i.x*=o,i.y*=o,i.z*=o,e.visible=-1<=i.x&&i.x<=1&&-1<=i.y&&i.y<=1&&-1<=i.z&&i.z<=1}function f(e,r,t){return!0===e.visible||!0===r.visible||!0===t.visible||(v[0]=e.positionScreen,v[1]=r.positionScreen,v[2]=t.positionScreen,u.intersectsBox(m.setFromPoints(v)))}function h(e,r,t){return(t.positionScreen.x-e.positionScreen.x)*(r.positionScreen.y-e.positionScreen.y)-(t.positionScreen.y-e.positionScreen.y)*(r.positionScreen.x-e.positionScreen.x)<0}return{setObject:function(e){E=(p=e).material,d.getNormalMatrix(p.matrixWorld),l.length=0,o.length=0,c.length=0},projectVertex:i,checkTriangleVisibility:f,checkBackfaceCulling:h,pushVertex:function(e,r,t){(n=ve()).position.set(e,r,t),i(n)},pushNormal:function(e,r,t){l.push(e,r,t)},pushColor:function(e,r,t){o.push(e,r,t)},pushUv:function(e,r){c.push(e,r)},pushLine:function(e,r){var t=ie[e],i=ie[r];t.positionScreen.copy(t.position).applyMatrix4(ce),i.positionScreen.copy(i.position).applyMatrix4(ce),!0===Te(t.positionScreen,i.positionScreen)&&(t.positionScreen.multiplyScalar(1/t.positionScreen.w),i.positionScreen.multiplyScalar(1/i.positionScreen.w),(_=xe()).id=p.id,_.v1.copy(t),_.v2.copy(i),_.z=Math.max(t.positionScreen.z,i.positionScreen.z),_.renderOrder=p.renderOrder,_.material=p.material,p.material.vertexColors===THREE.VertexColors&&(_.vertexColors[0].fromArray(o,3*e),_.vertexColors[1].fromArray(o,3*r)),oe.elements.push(_))},pushTriangle:function(e,r,t){var i=ie[e],o=ie[r],n=ie[t];if(!1!==f(i,o,n)&&(E.side===THREE.DoubleSide||!0===h(i,o,n))){(Z=ye()).id=p.id,Z.v1.copy(i),Z.v2.copy(o),Z.v3.copy(n),Z.z=(i.positionScreen.z+o.positionScreen.z+n.positionScreen.z)/3,Z.renderOrder=p.renderOrder,Z.normalModel.fromArray(l,3*e),Z.normalModel.applyMatrix3(d).normalize();for(var a=0;a<3;a++){var s=Z.vertexNormalsModel[a];s.fromArray(l,3*arguments[a]),s.applyMatrix3(d).normalize(),Z.uvs[a].fromArray(c,2*arguments[a])}Z.vertexNormalsLength=3,Z.material=p.material,oe.elements.push(Z)}}}};function ue(e){(r=function(){if(X!==i)return t[X++];var e=new THREE.RenderableObject;return t.push(e),i++,X++,e}()).id=e.id,r.object=e,ne.setFromMatrixPosition(e.matrixWorld),ne.applyMatrix4(le),r.z=ne.z,r.renderOrder=e.renderOrder,oe.objects.push(r)}function me(e,r,t){var i=1/e.w;e.z*=i,-1<=e.z&&e.z<=1&&((o=function(){if(re!==d)return E[re++];var e=new THREE.RenderableSprite;return E.push(e),d++,re++,e}()).id=r.id,o.x=e.x*i,o.y=e.y*i,o.z=e.z,o.renderOrder=r.renderOrder,o.object=r,o.rotation=r.rotation,o.scale.x=r.scale.x*Math.abs(o.x-(e.x+t.projectionMatrix.elements[0])/(e.w+t.projectionMatrix.elements[12])),o.scale.y=r.scale.y*Math.abs(o.y-(e.y+t.projectionMatrix.elements[5])/(e.w+t.projectionMatrix.elements[13])),o.material=r.material,oe.elements.push(o))}function ve(){if(Y!==a)return ie[Y++];var e=new THREE.RenderableVertex;return ie.push(e),a++,Y++,e}function ye(){if($!==l)return s[$++];var e=new THREE.RenderableFace;return s.push(e),l++,$++,e}function xe(){if(ee!==p)return c[ee++];var e=new THREE.RenderableLine;return c.push(e),p++,ee++,e}function Re(e,r){return e.renderOrder!==r.renderOrder?e.renderOrder-r.renderOrder:e.z!==r.z?r.z-e.z:e.id!==r.id?e.id-r.id:0}function Te(e,r){var t=0,i=1,o=e.z+e.w,n=r.z+r.w,a=-e.z+e.w,s=-r.z+r.w;return 0<=o&&0<=n&&0<=a&&0<=s||!(o<0&&n<0||a<0&&s<0)&&(o<0?t=Math.max(t,o/(o-n)):n<0&&(i=Math.min(i,o/(o-n))),a<0?t=Math.max(t,a/(a-s)):s<0&&(i=Math.min(i,a/(a-s))),!(i<t)&&(e.lerp(r,t),r.lerp(e,1-i),!0))}this.projectScene=function(e,r,t,i){re=ee=$=0,!(oe.elements.length=0)===e.autoUpdate&&e.updateMatrixWorld(),null===r.parent&&r.updateMatrixWorld(),se.copy(r.matrixWorldInverse),le.multiplyMatrices(r.projectionMatrix,se),Ee.setFromMatrix(le),X=0,oe.objects.length=0,oe.lights.length=0,function e(r){if(!1!==r.visible){if(r instanceof THREE.Light)oe.lights.push(r);else if(r instanceof THREE.Mesh||r instanceof THREE.Line||r instanceof THREE.Points){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===Ee.intersectsObject(r))return;ue(r)}else if(r instanceof THREE.Sprite){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===Ee.intersectsSprite(r))return;ue(r)}for(var t=r.children,i=0,o=t.length;i<o;i++)e(t[i])}}(e),!0===t&&oe.objects.sort(Re);for(var o=oe.objects,n=0,a=o.length;n<a;n++){var s=o[n].object,l=s.geometry;if(he.setObject(s),te=s.matrixWorld,Y=0,s instanceof THREE.Mesh){if(l instanceof THREE.BufferGeometry){var c=l.attributes,p=l.groups;if(void 0===c.position)continue;for(var E=0,d=(Q=c.position.array).length;E<d;E+=3)he.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.normal){var f=c.normal.array;for(E=0,d=f.length;E<d;E+=3)he.pushNormal(f[E],f[E+1],f[E+2])}if(void 0!==c.uv){var h=c.uv.array;for(E=0,d=h.length;E<d;E+=2)he.pushUv(h[E],h[E+1])}if(null!==l.index){var u=l.index.array;if(0<p.length)for(var m=0;m<p.length;m++){var v=p[m];for(E=v.start,d=v.start+v.count;E<d;E+=3)he.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=u.length;E<d;E+=3)he.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=Q.length/3;E<d;E+=3)he.pushTriangle(E,E+1,E+2)}else if(l instanceof THREE.Geometry){var y=l.vertices,x=l.faces,R=l.faceVertexUvs[0];pe.getNormalMatrix(te);for(var T=s.material,g=Array.isArray(T),S=0,H=y.length;S<H;S++){var w=y[S];if(ne.copy(w),!0===T.morphTargets)for(var M=l.morphTargets,C=s.morphTargetInfluences,b=0,z=M.length;b<z;b++){var V=C[b];if(0!==V){var j=M[b].vertices[S];ne.x+=(j.x-w.x)*V,ne.y+=(j.y-w.y)*V,ne.z+=(j.z-w.z)*V}}he.pushVertex(ne.x,ne.y,ne.z)}for(var L=0,O=x.length;L<O;L++){var B=x[L];if(void 0!==(T=!0===g?s.material[B.materialIndex]:s.material)){var P=T.side,W=ie[B.a],N=ie[B.b],k=ie[B.c];if(!1!==he.checkTriangleVisibility(W,N,k)){var A=he.checkBackfaceCulling(W,N,k);if(P!==THREE.DoubleSide){if(P===THREE.FrontSide&&!1===A)continue;if(P===THREE.BackSide&&!0===A)continue}(Z=ye()).id=s.id,Z.v1.copy(W),Z.v2.copy(N),Z.v3.copy(k),Z.normalModel.copy(B.normal),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||Z.normalModel.negate(),Z.normalModel.applyMatrix3(pe).normalize();for(var F=B.vertexNormals,D=0,G=Math.min(F.length,3);D<G;D++){var I=Z.vertexNormalsModel[D];I.copy(F[D]),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||I.negate(),I.applyMatrix3(pe).normalize()}Z.vertexNormalsLength=F.length;var U=R[L];if(void 0!==U)for(var q=0;q<3;q++)Z.uvs[q].copy(U[q]);Z.color=B.color,Z.material=T,Z.z=(W.positionScreen.z+N.positionScreen.z+k.positionScreen.z)/3,Z.renderOrder=s.renderOrder,oe.elements.push(Z)}}}}}else if(s instanceof THREE.Line){if(ce.multiplyMatrices(le,te),l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){for(E=0,d=(Q=c.position.array).length;E<d;E+=3)he.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.color){var J=c.color.array;for(E=0,d=J.length;E<d;E+=3)he.pushColor(J[E],J[E+1],J[E+2])}if(null!==l.index)for(E=0,d=(u=l.index.array).length;E<d;E+=2)he.pushLine(u[E],u[E+1]);else{var K=s instanceof THREE.LineSegments?2:1;for(E=0,d=Q.length/3-1;E<d;E+=K)he.pushLine(E,E+1)}}}else if(l instanceof THREE.Geometry){if(0===(y=s.geometry.vertices).length)continue;(W=ve()).positionScreen.copy(y[0]).applyMatrix4(ce);for(K=s instanceof THREE.LineSegments?2:1,S=1,H=y.length;S<H;S++)(W=ve()).positionScreen.copy(y[S]).applyMatrix4(ce),0<(S+1)%K||(N=ie[Y-2],de.copy(W.positionScreen),fe.copy(N.positionScreen),!0===Te(de,fe)&&(de.multiplyScalar(1/de.w),fe.multiplyScalar(1/fe.w),(_=xe()).id=s.id,_.v1.positionScreen.copy(de),_.v2.positionScreen.copy(fe),_.z=Math.max(de.z,fe.z),_.renderOrder=s.renderOrder,_.material=s.material,s.material.vertexColors===THREE.VertexColors&&(_.vertexColors[0].copy(s.geometry.colors[S]),_.vertexColors[1].copy(s.geometry.colors[S-1])),oe.elements.push(_)))}}else if(s instanceof THREE.Points){if(ce.multiplyMatrices(le,te),l instanceof THREE.Geometry)for(S=0,H=(y=s.geometry.vertices).length;S<H;S++){w=y[S];ae.set(w.x,w.y,w.z,1),ae.applyMatrix4(ce),me(ae,s,r)}else if(l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){var Q;for(E=0,d=(Q=c.position.array).length;E<d;E+=3)ae.set(Q[E],Q[E+1],Q[E+2],1),ae.applyMatrix4(ce),me(ae,s,r)}}}else s instanceof THREE.Sprite&&(ae.set(te.elements[12],te.elements[13],te.elements[14],1),ae.applyMatrix4(le),me(ae,s,r))}return!0===i&&oe.elements.sort(Re),oe}}; 2 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLmpzIl0sIm5hbWVzIjpbImJnQ29sb3IiLCJUSFJFRSIsIlNwcml0ZUNhbnZhc01hdGVyaWFsIiwicGFyYW1ldGVycyIsIk1hdGVyaWFsIiwidGhpcyIsInR5cGUiLCJDb2xvciIsInByb2dyYW0iLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImNsb25lIiwibWF0ZXJpYWwiLCJjb3B5IiwiY29sb3IiLCJDYW52YXNSZW5kZXJlciIsImNvbnNvbGUiLCJsb2ciLCJSRVZJU0lPTiIsIl9yZW5kZXJEYXRhIiwiX2xpZ2h0cyIsIl92MSIsIl92M3kiLCJfdjMiLCJfdjF4IiwiX2RpZmZ1c2VDb2xvciIsIl91dnMiLCJfdXYxeCIsIl9jbGVhckJveCIsIkJveDIiLCJfdXYzeSIsIl90aGlzIiwiX3Byb2plY3RvciIsIlByb2plY3RvciIsIl9jYW52YXMiLCJfY2FudmFzV2lkdGgiLCJ3aWR0aCIsIl9jYW52YXNXaWR0aEhhbGYiLCJNYXRoIiwiX2NhbnZhc0hlaWdodCIsIl9jYW52YXNIZWlnaHRIYWxmIiwiZmxvb3IiLCJfdmlld3BvcnRYIiwiX3ZpZXdwb3J0SGVpZ2h0IiwiX3ZpZXdwb3J0WSIsIl9waXhlbFJhdGlvIiwiX3ZpZXdwb3J0V2lkdGgiLCJhbHBoYSIsIl9jbGVhckNvbG9yIiwiX2NvbnRleHQiLCJfY29udGV4dEdsb2JhbEFscGhhIiwiX2NvbnRleHRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJfY29udGV4dExpbmVXaWR0aCIsIl9jbGVhckFscGhhIiwiX2NvbnRleHRMaW5lQ2FwIiwiX2NvbnRleHRTdHJva2VTdHlsZSIsIl9jb250ZXh0RmlsbFN0eWxlIiwiX2NvbnRleHRMaW5lSm9pbiIsIl9jb250ZXh0TGluZURhc2giLCJfY29sb3IiLCJfbGlnaHRDb2xvciIsIl9lbWlzc2l2ZUNvbG9yIiwiX3BhdHRlcm5zIiwiX2NsaXBCb3giLCJfYW1iaWVudExpZ2h0IiwiX2RpcmVjdGlvbmFsTGlnaHRzIiwiX2VsZW1Cb3giLCJfcG9pbnRMaWdodHMiLCJfY2VudHJvaWQiLCJWZWN0b3IzIiwiX3ZlY3RvcjMiLCJfbm9ybWFsIiwiX25vcm1hbFZpZXdNYXRyaXgiLCJNYXRyaXgzIiwicm90YXRpb24iLCJlbGVtZW50IiwiZmlsbFJlY3QiLCJvcGFjaXR5IiwicmVzdG9yZSIsImJsZW5kaW5nIiwic2NhbGVYIiwiaXNTcHJpdGVDYW52YXNNYXRlcmlhbCIsInNjYWxlWSIsInNjYWxlIiwieSIsInNldEZpbGxTdHlsZSIsImdldFN0eWxlIiwibWluIiwic2V0IiwidjEiLCJ4IiwiZGlzdCIsInNhdmUiLCJ0ZXh0dXJlIiwibWFwIiwicGF0dGVybiIsImlzUG9pbnRzTWF0ZXJpYWwiLCJ2ZXJzaW9uIiwidHJhbnNsYXRlIiwidW5kZWZpbmVkIiwiY2FudmFzIiwiYml0bWFwIiwiaW1hZ2UiLCJveCIsIm9mZnNldCIsIm95IiwiaGVpZ2h0Iiwic3giLCJyZXBlYXQiLCJzeSIsImN4IiwiY3kiLCJzZXRPcGFjaXR5Iiwic2V0QmxlbmRpbmciLCJyb3RhdGUiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJwb3NpdGlvblNjcmVlbiIsImxpbmVUbyIsInZlcnRleENvbG9ycyIsImNvbG9yU3R5bGUxIiwiY29sb3JTdHlsZTIiLCJzZXRTdHJva2VTdHlsZSIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiZ3JhZCIsImFkZENvbG9yU3RvcCIsInN0cm9rZSIsImV4cGFuZEJ5U2NhbGFyIiwibGluZXdpZHRoIiwic2l6ZSIsIl92MngiLCJ2MiIsIl92MnkiLCJkcmF3VHJpYW5nbGUiLCJfdjF5IiwiaXNMaW5lQmFzaWNNYXRlcmlhbCIsInNldExpbmVXaWR0aCIsIm11bHRpcGx5Iiwic2V0TGluZUpvaW4iLCJsaW5lam9pbiIsIlZlcnRleENvbG9ycyIsInBvc2l0aW9uV29ybGQiLCJjYWxjdWxhdGVMaWdodCIsImlzTWVzaEJhc2ljTWF0ZXJpYWwiLCJtYXBwaW5nIiwicGF0dGVyblBhdGgiLCJlbnZNYXAiLCJ2ZXJ0ZXhOb3JtYWxzTW9kZWwiLCJfdXYxeSIsImV4Y2VwdGlvbiIsImlzTGluZURhc2hlZE1hdGVyaWFsIiwiZ2FwU2l6ZSIsIndpcmVmcmFtZSIsInNldExpbmVEYXNoIiwicmVuZGVyRmFjZTMiLCJ2MyIsInV2MSIsInV2MiIsInV2MyIsIngwIiwieTAiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImluZm8iLCJyZW5kZXIiLCJ2ZXJ0aWNlcyIsIl92M3giLCJjbG9zZVBhdGgiLCJpc01lc2hQaG9uZ01hdGVyaWFsIiwiaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCIsImVtaXNzaXZlIiwiRmFjZUNvbG9ycyIsInNldExpbmVDYXAiLCJsaW5lY2FwIiwiYWRkIiwiZGl2aWRlU2NhbGFyIiwicG9zaXRpb24iLCJub3JtYWwiLCJsIiwibGwiLCJsaWdodCIsInRleHR1cmVUb1BhdHRlcm4iLCJpc0RpcmVjdGlvbmFsTGlnaHQiLCJtYXRyaXhXb3JsZCIsIm5vcm1hbGl6ZSIsImFtb3VudCIsIm11bHRpcGx5U2NhbGFyIiwibGlnaHRQb3NpdGlvbiIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsImRvdCIsInN1YlZlY3RvcnMiLCJkaXN0YW5jZVRvIiwiZGlzdGFuY2UiLCJub3JtYWxNb2RlbCIsImZpbGwiLCJzdHJva2VQYXRoIiwid2lyZWZyYW1lTGluZXdpZHRoIiwid2lyZWZyYW1lTGluZWNhcCIsIndpcmVmcmFtZUxpbmVqb2luIiwiZmlsbFBhdGgiLCJpc01lc2hMYW1iZXJ0TWF0ZXJpYWwiLCJVVk1hcHBpbmciLCJ1dnMiLCJTcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZyIsImFwcGx5TWF0cml4MyIsInJlcGVhdFgiLCJ3cmFwUyIsIl91djJ4IiwibWlycm9yWCIsIl91djJ5IiwibWlycm9yWSIsIndyYXBUIiwiX3V2M3giLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjb250ZXh0Iiwic2V0VHJhbnNmb3JtIiwiaXNNZXNoTm9ybWFsTWF0ZXJpYWwiLCJ6IiwiYWRkU2NhbGFyIiwic2V0UkdCIiwicmVwZWF0WSIsImlkIiwiaWRldCIsInUwIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJSZXBlYXRXcmFwcGluZyIsIk1pcnJvcmVkUmVwZWF0V3JhcHBpbmciLCJkZXQiLCJlIiwidjAiLCJnZXRDb250ZXh0IiwiYSIsImRyYXdJbWFnZSIsImNyZWF0ZVBhdHRlcm4iLCJvblVwZGF0ZSIsInBpeGVscyIsInUxIiwidTIiLCJ2YWx1ZSIsImIiLCJjIiwiZCIsImYiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJNdWx0aXBseUJsZW5kaW5nIiwibGluZVdpZHRoIiwidHJhbnNmb3JtIiwiZXhwYW5kIiwiUmVuZGVyYWJsZUZhY2UiLCJSZW5kZXJhYmxlVmVydGV4IiwiZ2xvYmFsQWxwaGEiLCJOb3JtYWxCbGVuZGluZyIsInZlcnRleCIsIlN1YnRyYWN0aXZlQmxlbmRpbmciLCJSZW5kZXJhYmxlTGluZSIsIlJlbmRlcmFibGVTcHJpdGUiLCJsaW5lQ2FwIiwiX29iamVjdENvdW50IiwiX3ZlcnRleENvdW50IiwiX3ZlcnRleFBvb2xMZW5ndGgiLCJfbGluZVBvb2wiLCJfc3ByaXRlIiwiX3Nwcml0ZVBvb2wiLCJfcG9pbnRzMyIsIkFycmF5IiwiX3ZpZXdQcm9qZWN0aW9uTWF0cml4IiwiX21vZGVsVmlld1Byb2plY3Rpb25NYXRyaXgiLCJsZW5ndGgiLCJ2ZWN0b3IiLCJwcm9qZWN0IiwiZG9tRWxlbWVudCIsImF1dG9DbGVhciIsInNvcnRFbGVtZW50cyIsImZhY2VzIiwiZ2V0Q29udGV4dEF0dHJpYnV0ZXMiLCJ1cGRhdGVTdHlsZSIsInN0eWxlIiwic2V0Vmlld3BvcnQiLCJzZXRDbGVhckNvbG9ySGV4Iiwic2V0U2Npc3NvclRlc3QiLCJzZXRDbGVhckNvbG9yIiwiaGV4IiwiZ2V0Q2xlYXJDb2xvciIsIm1heCIsIndhcm4iLCJnZXRNYXhBbmlzb3Ryb3B5IiwiY2xlYXIiLCJpc0VtcHR5IiwiaW50ZXJzZWN0IiwibWFrZUVtcHR5IiwiY2xlYXJSZWN0IiwiY2xlYXJDb2xvciIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJiYWNrZ3JvdW5kIiwiciIsImciLCJfZWxlbWVudHMiLCJzY2VuZSIsImNhbWVyYSIsImlzQ2FtZXJhIiwiaXNDb2xvciIsInJlbmRlclNwcml0ZSIsIl92MiIsInByb2plY3RTY2VuZSIsImVsZW1lbnRzIiwic2V0RnJvbVBvaW50cyIsImludGVyc2VjdHNCb3giLCJtYXRyaXhXb3JsZEludmVyc2UiLCJsaWdodENvbG9yIiwiaXNBbWJpZW50TGlnaHQiLCJpc1BvaW50TGlnaHQiLCJjYWxjdWxhdGVMaWdodHMiLCJyZW5kZXJMaW5lIiwib3ZlcmRyYXciLCJ1bmlvbiIsImVycm9yIiwiUmVuZGVyYWJsZU9iamVjdCIsIl92ZXJ0ZXgiLCJvYmplY3QiLCJwcm9qZWN0VmVydGV4IiwicmVuZGVyT3JkZXIiLCJwdXNoVXYiLCJ2ZXJ0ZXhOb3JtYWxzTGVuZ3RoIiwiY2hlY2tUcmlhbmdsZVZpc2liaWxpdHkiLCJ2aXNpYmxlIiwiVmVjdG9yMiIsIlZlY3RvcjQiLCJfdmVydGV4UG9vbCIsImFwcGx5TWF0cml4NCIsIl9saW5lIiwiZ2V0TmV4dExpbmVJblBvb2wiLCJwdXNoVHJpYW5nbGUiLCJzaWRlIiwiX2ZhY2UiLCJfb2JqZWN0IiwiX2xpbmVDb3VudCIsIl9zcHJpdGVDb3VudCIsIl9vYmplY3RQb29sIiwiX29iamVjdFBvb2xMZW5ndGgiLCJmcm9tQXJyYXkiLCJfZmFjZVBvb2wiLCJub3JtYWxNYXRyaXgiLCJfbGluZVBvb2xMZW5ndGgiLCJfc3ByaXRlUG9vbExlbmd0aCIsImkiLCJfdmVjdG9yNCIsInV2IiwiYXJndW1lbnRzIiwiX2JvdW5kaW5nQm94IiwiQm94MyIsIl92aWV3TWF0cml4IiwiTWF0cml4NCIsIl9ub3JtYWxNYXRyaXgiLCJzZXRPYmplY3QiLCJGcnVzdHVtIiwiY2hlY2tCYWNrZmFjZUN1bGxpbmciLCJ1bnByb2plY3RWZWN0b3IiLCJsaWdodHMiLCJyZW5kZXJMaXN0Iiwibm9ybWFscyIsImZydXN0dW1DdWxsZWQiLCJjb2xvcnMiLCJhZGRPYmplY3QiLCJjaGlsZHJlbiIsIm9iamVjdHMiLCJwdXNoIiwiX21vZGVsTWF0cml4IiwiX2ZhY2VDb3VudCIsInciLCJpbnZXIiwiYXV0b1VwZGF0ZSIsIm11bHRpcGx5TWF0cmljZXMiLCJwcm9qZWN0aW9uTWF0cml4IiwiTWVzaCIsImdlb21ldHJ5IiwiYXR0cmlidXRlcyIsInBvc2l0aW9ucyIsInByb2plY3RPYmplY3QiLCJnZXROb3JtYWxNYXRyaXgiLCJmbCIsInB1c2hWZXJ0ZXgiLCJwdXNoTm9ybWFsIiwic29ydCIsInB1c2hDb2xvciIsInB1c2hMaW5lIiwiY2xpcExpbmUiLCJpbmRleCIsImluZGljZXMiLCJncm91cHMiLCJncm91cCIsInN0YXJ0IiwiR2VvbWV0cnkiLCJmYWNlVmVydGV4VXZzIiwibW9ycGhUYXJnZXRzIiwidCIsInRsIiwicHVzaFBvaW50Iiwic3ByaXRlIiwiZ2V0TmV4dFNwcml0ZUluUG9vbCIsImFicyIsImdldE5leHRWZXJ0ZXhJblBvb2wiLCJnZXROZXh0RmFjZUluUG9vbCIsIl9mYWNlUG9vbExlbmd0aCIsImZhY2UiLCJsaW5lIiwicGFpbnRlclNvcnQiLCJzMSIsInMyIiwiYWxwaGExIiwiYWxwaGEyIiwiYmMxbmVhciIsImJjMm5lYXIiLCJiYzFmYXIiLCJiYzJmYXIiLCJsZXJwIiwic29ydE9iamVjdHMiLCJfZnJ1c3R1bSIsInNldEZyb21NYXRyaXgiLCJMaWdodCIsIkJhY2tTaWRlIiwiTGluZSIsIlBvaW50cyIsImludGVyc2VjdHNPYmplY3QiLCJTcHJpdGUiLCJpbnRlcnNlY3RzU3ByaXRlIiwibyIsIkJ1ZmZlckdlb21ldHJ5IiwiYXJyYXkiLCJzdGVwIiwiX2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4iLCJjb3VudCIsInYiLCJ2bCIsImlzTXVsdGlNYXRlcmlhbCIsImlzQXJyYXkiLCJpbmZsdWVuY2UiLCJtb3JwaEluZmx1ZW5jZXMiLCJ0YXJnZXRWZXJ0ZXgiLCJtYXRlcmlhbEluZGV4IiwiZ2V0TmV4dE9iamVjdEluUG9vbCIsIkRvdWJsZVNpZGUiLCJmYWNlVmVydGV4Tm9ybWFscyIsInZlcnRleE5vcm1hbHMiLCJuIiwibmwiLCJ2ZXJ0ZXhVdnMiLCJ1IiwiTGluZVNlZ21lbnRzIiwiX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4iXSwibWFwcGluZ3MiOiJhQUNBLElBQUlBLFFBQVUsU0FLZEMsTUFBTUMscUJBQXVCLFNBQVdDLEdBQXhDRixNQUFNQyxTQUFBQSxLQUFBQSxNQUVMRCxLQUFBQSxLQUFNRyx1QkFFTkMsS0FBS0MsTUFBTyxJQUFBTCxNQUFBTSxNQUFBLFVBR1pGLEtBQUtHLFFBQVUsYUFBZkgsS0FBS0csVUFBVUwsSUFNaEJGLE1BQU1DLHFCQUFxQk8sVUFBWUMsT0FBT0MsT0FBUVYsTUFBTUcsU0FBU0ssV0FBckVSLE1BQU1DLHFCQUFxQk8sVUFBM0JHLFlBQThDRCxNQUFRVixxQkFDdERBLE1BQU1DLHFCQUFxQk8sVUFBVUcsd0JBQW9CVixFQUd6REQsTUFBTUMscUJBQXFCTyxVQUFVSSxNQUFRLFdBRTVDLElBQUlDLEVBQVcsSUFBSWIsTUFBTUMscUJBTXpCLE9BSkFZLEVBQVNDLEtBQU1WLE1BQWZTLEVBQVNDLE1BQU1BLEtBQWZWLEtBQUFXLE9BQ0FGLEVBQVNFLFFBQVRYLEtBQXFCRyxRQUdkTSxHQU1SYixNQUFNZ0IsZUFBaUIsU0FBV2QsR0FFakNlLFFBQVFDLElBQUssdUJBQXdCbEIsTUFBTW1CLFVBRTNDakIsRUFBYUEsR0FBYyxHQUUzQixJQUFBa0IsRUFDQ0EsRUFEREMsRUFBQUMsRUFzQytCQyxFQXRDL0JDLEVBQUFDLEVBMENDQyxFQUFBQSxFQUFBQSxFQUFvQjFCLEVBQU1NLEVBMUMzQnFCLEVBQUFDLEVBcURDQyxFQUFBQSxFQUFnQjdCLEVBQU04QixFQXJEdkJDLEVBQUlDLEVBQVE1QixLQUFaNkIsRUFBQSxJQUFBakMsTUFBQWtDLFVBQUFDLE9BRXdCRCxJQUF2QkQsRUFBaUJqQyxPQUVqQm1DLEVBQVVqQyxPQUlWa0MsU0FBQUEsY0FB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RCxJQUV2Qm1JLEdBQVduRCxHQUFVM0IsRUFBUXBCLFVBUXJCb0IsYUFBa0JwVSxNQUFNNmEsU0FFbkM5RSxHQUFTdFEsSUFBSzJSLEdBQWE5RCxTQUFVLElBQU04RCxHQUFhOUQsU0FBVSxJQUFNOEQsR0FBYTlELFNBQVUsSUFBTSxHQUNyR3lDLEdBQVNqQixhQUFjaEUsSUFFdkJvSSxHQUFXbkQsR0FBVTNCLEVBQVFwQixJQVkvQixPQU5zQixJQUFqQjNCLEdBRUpqUSxHQUFZa1MsU0FBUzhFLEtBQU11QixJQUlyQnZZIiwiZmlsZSI6ImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWluT25TYXZlOiB0cnVlLCBtaW5pZmllcjogdWdsaWZ5LWpzXG52YXIgYmdDb2xvciA9IDB4ZmZmZmZmXG4vKipcbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKi9cblxuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7XG5cblx0VEhSRUUuTWF0ZXJpYWwuY2FsbCggdGhpcyApO1xuXG5cdHRoaXMudHlwZSA9ICdTcHJpdGVDYW52YXNNYXRlcmlhbCc7XG5cblx0dGhpcy5jb2xvciA9IG5ldyBUSFJFRS5Db2xvciggMHhmZmZmZmYgKTtcblx0dGhpcy5wcm9ncmFtID0gZnVuY3Rpb24gKCkge307XG5cblx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxufTtcblxuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggVEhSRUUuTWF0ZXJpYWwucHJvdG90eXBlICk7XG5USFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbDtcblRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5pc1Nwcml0ZUNhbnZhc01hdGVyaWFsID0gdHJ1ZTtcblxuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCgpO1xuXG5cdG1hdGVyaWFsLmNvcHkoIHRoaXMgKTtcblx0bWF0ZXJpYWwuY29sb3IuY29weSggdGhpcy5jb2xvciApO1xuXHRtYXRlcmlhbC5wcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xuXG5cdHJldHVybiBtYXRlcmlhbDtcblxufTtcblxuLy9cblxuVEhSRUUuQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7XG5cblx0Y29uc29sZS5sb2coICdUSFJFRS5DYW52YXNSZW5kZXJlcicsIFRIUkVFLlJFVklTSU9OICk7XG5cblx0cGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307XG5cblx0dmFyIF90aGlzID0gdGhpcyxcblx0XHRfcmVuZGVyRGF0YSwgX2VsZW1lbnRzLCBfbGlnaHRzLFxuXHRcdF9wcm9qZWN0b3IgPSBuZXcgVEhSRUUuUHJvamVjdG9yKCksXG5cblx0XHRfY2FudmFzID0gcGFyYW1ldGVycy5jYW52YXMgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQgPyBwYXJhbWV0ZXJzLmNhbnZhc1xuXHRcdFx0XHQgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnY2FudmFzJyApLFxuXG5cdFx0X2NhbnZhc1dpZHRoID0gX2NhbnZhcy53aWR0aCxcblx0XHRfY2FudmFzSGVpZ2h0ID0gX2NhbnZhcy5oZWlnaHQsXG5cdFx0X2NhbnZhc1dpZHRoSGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNXaWR0aCAvIDIgKSxcblx0XHRfY2FudmFzSGVpZ2h0SGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNIZWlnaHQgLyAyICksXG5cblx0XHRfdmlld3BvcnRYID0gMCxcblx0XHRfdmlld3BvcnRZID0gMCxcblx0XHRfdmlld3BvcnRXaWR0aCA9IF9jYW52YXNXaWR0aCxcblx0XHRfdmlld3BvcnRIZWlnaHQgPSBfY2FudmFzSGVpZ2h0LFxuXG5cdFx0X3BpeGVsUmF0aW8gPSAxLFxuXG5cdFx0X2NvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoICcyZCcsIHtcblx0XHRcdGFscGhhOiBwYXJhbWV0ZXJzLmFscGhhID09PSB0cnVlXG5cdFx0fSApLFxuXG5cdFx0X2NsZWFyQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoIGJnQ29sb3IgKSxcblx0XHRfY2xlYXJBbHBoYSA9IHBhcmFtZXRlcnMuYWxwaGEgPT09IHRydWUgPyAwIDogMSxcblxuXHRcdF9jb250ZXh0R2xvYmFsQWxwaGEgPSAxLFxuXHRcdF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gMCxcblx0XHRfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbCxcblx0XHRfY29udGV4dEZpbGxTdHlsZSA9IG51bGwsXG5cdFx0X2NvbnRleHRMaW5lV2lkdGggPSBudWxsLFxuXHRcdF9jb250ZXh0TGluZUNhcCA9IG51bGwsXG5cdFx0X2NvbnRleHRMaW5lSm9pbiA9IG51bGwsXG5cdFx0X2NvbnRleHRMaW5lRGFzaCA9IFtdLFxuXG5cdFx0X3YxLCBfdjIsIF92MyxcblxuXHRcdF92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3ksXG5cblx0XHRfY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblxuXHRcdF9kaWZmdXNlQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblx0XHRfZW1pc3NpdmVDb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXG5cdFx0X2xpZ2h0Q29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblxuXHRcdF9wYXR0ZXJucyA9IHt9LFxuXG5cdFx0X3V2cyxcblx0XHRfdXYxeCwgX3V2MXksIF91djJ4LCBfdXYyeSwgX3V2M3gsIF91djN5LFxuXG5cdFx0X2NsaXBCb3ggPSBuZXcgVEhSRUUuQm94MigpLFxuXHRcdF9jbGVhckJveCA9IG5ldyBUSFJFRS5Cb3gyKCksXG5cdFx0X2VsZW1Cb3ggPSBuZXcgVEhSRUUuQm94MigpLFxuXG5cdFx0X2FtYmllbnRMaWdodCA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdF9kaXJlY3Rpb25hbExpZ2h0cyA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdF9wb2ludExpZ2h0cyA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXG5cdFx0X3ZlY3RvcjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLCAvLyBOZWVkZWQgZm9yIFBvaW50TGlnaHRcblx0XHRfY2VudHJvaWQgPSBuZXcgVEhSRUUuVmVjdG9yMygpLFxuXHRcdF9ub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpLFxuXHRcdF9ub3JtYWxWaWV3TWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDMoKTtcblxuXHQvKiBUT0RPXG5cdF9jYW52YXMubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cdF9jYW52YXMud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cdF9jYW52YXMubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0X2NhbnZhcy5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0Ki9cblxuXHQvLyBkYXNoK2dhcCBmYWxsYmFja3MgZm9yIEZpcmVmb3ggYW5kIGV2ZXJ5dGhpbmcgZWxzZVxuXG5cdGlmICggX2NvbnRleHQuc2V0TGluZURhc2ggPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdF9jb250ZXh0LnNldExpbmVEYXNoID0gZnVuY3Rpb24gKCkge307XG5cblx0fVxuXG5cdHRoaXMuZG9tRWxlbWVudCA9IF9jYW52YXM7XG5cblx0dGhpcy5hdXRvQ2xlYXIgPSB0cnVlO1xuXHR0aGlzLnNvcnRPYmplY3RzID0gdHJ1ZTtcblx0dGhpcy5zb3J0RWxlbWVudHMgPSB0cnVlO1xuXG5cdHRoaXMuaW5mbyA9IHtcblxuXHRcdHJlbmRlcjoge1xuXG5cdFx0XHR2ZXJ0aWNlczogMCxcblx0XHRcdGZhY2VzOiAwXG5cblx0XHR9XG5cblx0fTtcblxuXHQvLyBBUElcblxuXHR0aGlzLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2NvbnRleHQ7XG5cblx0fTtcblxuXHR0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCk7XG5cblx0fTtcblxuXHR0aGlzLmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX3BpeGVsUmF0aW87XG5cblx0fTtcblxuXHR0aGlzLnNldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgX3BpeGVsUmF0aW8gPSB2YWx1ZTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0U2l6ZSA9IGZ1bmN0aW9uICggd2lkdGgsIGhlaWdodCwgdXBkYXRlU3R5bGUgKSB7XG5cblx0XHRfY2FudmFzV2lkdGggPSB3aWR0aCAqIF9waXhlbFJhdGlvO1xuXHRcdF9jYW52YXNIZWlnaHQgPSBoZWlnaHQgKiBfcGl4ZWxSYXRpbztcblxuXHRcdF9jYW52YXMud2lkdGggPSBfY2FudmFzV2lkdGg7XG5cdFx0X2NhbnZhcy5oZWlnaHQgPSBfY2FudmFzSGVpZ2h0O1xuXG5cdFx0X2NhbnZhc1dpZHRoSGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNXaWR0aCAvIDIgKTtcblx0XHRfY2FudmFzSGVpZ2h0SGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNIZWlnaHQgLyAyICk7XG5cblx0XHRpZiAoIHVwZGF0ZVN0eWxlICE9PSBmYWxzZSApIHtcblxuXHRcdFx0X2NhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4Jztcblx0XHRcdF9jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcblxuXHRcdH1cblxuXHRcdF9jbGlwQm94Lm1pbi5zZXQoIC0gX2NhbnZhc1dpZHRoSGFsZiwgLSBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXHRcdF9jbGlwQm94Lm1heC5zZXQoICAgX2NhbnZhc1dpZHRoSGFsZiwgICBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXG5cdFx0X2NsZWFyQm94Lm1pbi5zZXQoIC0gX2NhbnZhc1dpZHRoSGFsZiwgLSBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXHRcdF9jbGVhckJveC5tYXguc2V0KCAgIF9jYW52YXNXaWR0aEhhbGYsICAgX2NhbnZhc0hlaWdodEhhbGYgKTtcblxuXHRcdF9jb250ZXh0R2xvYmFsQWxwaGEgPSAxO1xuXHRcdF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gMDtcblx0XHRfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbDtcblx0XHRfY29udGV4dEZpbGxTdHlsZSA9IG51bGw7XG5cdFx0X2NvbnRleHRMaW5lV2lkdGggPSBudWxsO1xuXHRcdF9jb250ZXh0TGluZUNhcCA9IG51bGw7XG5cdFx0X2NvbnRleHRMaW5lSm9pbiA9IG51bGw7XG5cblx0XHR0aGlzLnNldFZpZXdwb3J0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0fTtcblxuXHR0aGlzLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0X3ZpZXdwb3J0WCA9IHggKiBfcGl4ZWxSYXRpbztcblx0XHRfdmlld3BvcnRZID0geSAqIF9waXhlbFJhdGlvO1xuXG5cdFx0X3ZpZXdwb3J0V2lkdGggPSB3aWR0aCAqIF9waXhlbFJhdGlvO1xuXHRcdF92aWV3cG9ydEhlaWdodCA9IGhlaWdodCAqIF9waXhlbFJhdGlvO1xuXG5cdH07XG5cblx0dGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKCkge307XG5cdHRoaXMuc2V0U2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoKSB7fTtcblxuXHR0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoIGNvbG9yLCBhbHBoYSApIHtcblxuXHRcdF9jbGVhckNvbG9yLnNldCggY29sb3IgKTtcblx0XHRfY2xlYXJBbHBoYSA9IGFscGhhICE9PSB1bmRlZmluZWQgPyBhbHBoYSA6IDE7XG5cblx0XHRfY2xlYXJCb3gubWluLnNldCggLSBfY2FudmFzV2lkdGhIYWxmLCAtIF9jYW52YXNIZWlnaHRIYWxmICk7XG5cdFx0X2NsZWFyQm94Lm1heC5zZXQoICAgX2NhbnZhc1dpZHRoSGFsZiwgICBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXG5cdH07XG5cblx0dGhpcy5zZXRDbGVhckNvbG9ySGV4ID0gZnVuY3Rpb24gKCBoZXgsIGFscGhhICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXI6IC5zZXRDbGVhckNvbG9ySGV4KCkgaXMgYmVpbmcgcmVtb3ZlZC4gVXNlIC5zZXRDbGVhckNvbG9yKCkgaW5zdGVhZC4nICk7XG5cdFx0dGhpcy5zZXRDbGVhckNvbG9yKCBoZXgsIGFscGhhICk7XG5cblx0fTtcblxuXHR0aGlzLmdldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2NsZWFyQ29sb3I7XG5cblx0fTtcblxuXHR0aGlzLmdldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2NsZWFyQWxwaGE7XG5cblx0fTtcblxuXHR0aGlzLmdldE1heEFuaXNvdHJvcHkgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gMDtcblxuXHR9O1xuXG5cdHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRpZiAoIF9jbGVhckJveC5pc0VtcHR5KCkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRfY2xlYXJCb3guaW50ZXJzZWN0KCBfY2xpcEJveCApO1xuXHRcdFx0X2NsZWFyQm94LmV4cGFuZEJ5U2NhbGFyKCAyICk7XG5cblx0XHRcdF9jbGVhckJveC5taW4ueCA9ICAgX2NsZWFyQm94Lm1pbi54ICsgX2NhbnZhc1dpZHRoSGFsZjtcblx0XHRcdF9jbGVhckJveC5taW4ueSA9IC0gX2NsZWFyQm94Lm1pbi55ICsgX2NhbnZhc0hlaWdodEhhbGY7XHRcdC8vIGhpZ2hlciB5IHZhbHVlICFcblx0XHRcdF9jbGVhckJveC5tYXgueCA9ICAgX2NsZWFyQm94Lm1heC54ICsgX2NhbnZhc1dpZHRoSGFsZjtcblx0XHRcdF9jbGVhckJveC5tYXgueSA9IC0gX2NsZWFyQm94Lm1heC55ICsgX2NhbnZhc0hlaWdodEhhbGY7XHRcdC8vIGxvd2VyIHkgdmFsdWUgIVxuXG5cdFx0XHRpZiAoIF9jbGVhckFscGhhIDwgMSApIHtcblxuXHRcdFx0XHRfY29udGV4dC5jbGVhclJlY3QoXG5cdFx0XHRcdFx0X2NsZWFyQm94Lm1pbi54IHwgMCxcblx0XHRcdFx0XHRfY2xlYXJCb3gubWF4LnkgfCAwLFxuXHRcdFx0XHRcdCggX2NsZWFyQm94Lm1heC54IC0gX2NsZWFyQm94Lm1pbi54ICkgfCAwLFxuXHRcdFx0XHRcdCggX2NsZWFyQm94Lm1pbi55IC0gX2NsZWFyQm94Lm1heC55ICkgfCAwXG5cdFx0XHRcdCk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBfY2xlYXJBbHBoYSA+IDAgKSB7XG5cblx0XHRcdFx0c2V0T3BhY2l0eSggMSApO1xuXHRcdFx0XHRzZXRCbGVuZGluZyggVEhSRUUuTm9ybWFsQmxlbmRpbmcgKTtcblxuXHRcdFx0XHRzZXRGaWxsU3R5bGUoICdyZ2JhKCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5yICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5nICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5iICogMjU1ICkgKyAnLCcgKyBfY2xlYXJBbHBoYSArICcpJyApO1xuXG5cdFx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KFxuXHRcdFx0XHRcdF9jbGVhckJveC5taW4ueCB8IDAsXG5cdFx0XHRcdFx0X2NsZWFyQm94Lm1heC55IHwgMCxcblx0XHRcdFx0XHQoIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCApIHwgMCxcblx0XHRcdFx0XHQoIF9jbGVhckJveC5taW4ueSAtIF9jbGVhckJveC5tYXgueSApIHwgMFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jbGVhckJveC5tYWtlRW1wdHkoKTtcblxuXHRcdH1cblxuXHR9O1xuXG5cdC8vIGNvbXBhdGliaWxpdHlcblxuXHR0aGlzLmNsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7fTtcblx0dGhpcy5jbGVhckRlcHRoID0gZnVuY3Rpb24gKCkge307XG5cdHRoaXMuY2xlYXJTdGVuY2lsID0gZnVuY3Rpb24gKCkge307XG5cblx0dGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoIHNjZW5lLCBjYW1lcmEgKSB7XG5cblx0XHRpZiAoIGNhbWVyYS5pc0NhbWVyYSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHR2YXIgYmFja2dyb3VuZCA9IHNjZW5lLmJhY2tncm91bmQ7XG5cblx0XHRpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc0NvbG9yICkge1xuXG5cdFx0XHRzZXRPcGFjaXR5KCAxICk7XG5cdFx0XHRzZXRCbGVuZGluZyggVEhSRUUuTm9ybWFsQmxlbmRpbmcgKTtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCBiYWNrZ3JvdW5kLmdldFN0eWxlKCkgKTtcblx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCAwLCAwLCBfY2FudmFzV2lkdGgsIF9jYW52YXNIZWlnaHQgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuYXV0b0NsZWFyID09PSB0cnVlICkge1xuXG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cblx0XHR9XG5cblx0XHRfdGhpcy5pbmZvLnJlbmRlci52ZXJ0aWNlcyA9IDA7XG5cdFx0X3RoaXMuaW5mby5yZW5kZXIuZmFjZXMgPSAwO1xuXG5cdFx0X2NvbnRleHQuc2V0VHJhbnNmb3JtKCBfdmlld3BvcnRXaWR0aCAvIF9jYW52YXNXaWR0aCwgMCwgMCwgLSBfdmlld3BvcnRIZWlnaHQgLyBfY2FudmFzSGVpZ2h0LCBfdmlld3BvcnRYLCBfY2FudmFzSGVpZ2h0IC0gX3ZpZXdwb3J0WSApO1xuXHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggX2NhbnZhc1dpZHRoSGFsZiwgX2NhbnZhc0hlaWdodEhhbGYgKTtcblxuXHRcdF9yZW5kZXJEYXRhID0gX3Byb2plY3Rvci5wcm9qZWN0U2NlbmUoIHNjZW5lLCBjYW1lcmEsIHRoaXMuc29ydE9iamVjdHMsIHRoaXMuc29ydEVsZW1lbnRzICk7XG5cdFx0X2VsZW1lbnRzID0gX3JlbmRlckRhdGEuZWxlbWVudHM7XG5cdFx0X2xpZ2h0cyA9IF9yZW5kZXJEYXRhLmxpZ2h0cztcblxuXHRcdF9ub3JtYWxWaWV3TWF0cml4LmdldE5vcm1hbE1hdHJpeCggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXG5cdFx0LyogREVCVUdcblx0XHRzZXRGaWxsU3R5bGUoICdyZ2JhKCAwLCAyNTUsIDI1NSwgMC41ICknICk7XG5cdFx0X2NvbnRleHQuZmlsbFJlY3QoIF9jbGlwQm94Lm1pbi54LCBfY2xpcEJveC5taW4ueSwgX2NsaXBCb3gubWF4LnggLSBfY2xpcEJveC5taW4ueCwgX2NsaXBCb3gubWF4LnkgLSBfY2xpcEJveC5taW4ueSApO1xuXHRcdCovXG5cblx0XHRjYWxjdWxhdGVMaWdodHMoKTtcblxuXHRcdGZvciAoIHZhciBlID0gMCwgZWwgPSBfZWxlbWVudHMubGVuZ3RoOyBlIDwgZWw7IGUgKysgKSB7XG5cblx0XHRcdHZhciBlbGVtZW50ID0gX2VsZW1lbnRzWyBlIF07XG5cblx0XHRcdHZhciBtYXRlcmlhbCA9IGVsZW1lbnQubWF0ZXJpYWw7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCB8fCBtYXRlcmlhbC5vcGFjaXR5ID09PSAwICkgY29udGludWU7XG5cblx0XHRcdF9lbGVtQm94Lm1ha2VFbXB0eSgpO1xuXG5cdFx0XHRpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlICkge1xuXG5cdFx0XHRcdF92MSA9IGVsZW1lbnQ7XG5cdFx0XHRcdF92MS54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92MS55ICo9IF9jYW52YXNIZWlnaHRIYWxmO1xuXG5cdFx0XHRcdHJlbmRlclNwcml0ZSggX3YxLCBlbGVtZW50LCBtYXRlcmlhbCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtZW50IGluc3RhbmNlb2YgVEhSRUUuUmVuZGVyYWJsZUxpbmUgKSB7XG5cblx0XHRcdFx0X3YxID0gZWxlbWVudC52MTsgX3YyID0gZWxlbWVudC52MjtcblxuXHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjtcblx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YyLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7XG5cblx0XHRcdFx0X2VsZW1Cb3guc2V0RnJvbVBvaW50cyggW1xuXHRcdFx0XHRcdF92MS5wb3NpdGlvblNjcmVlbixcblx0XHRcdFx0XHRfdjIucG9zaXRpb25TY3JlZW5cblx0XHRcdFx0XSApO1xuXG5cdFx0XHRcdGlmICggX2NsaXBCb3guaW50ZXJzZWN0c0JveCggX2VsZW1Cb3ggKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHJlbmRlckxpbmUoIF92MSwgX3YyLCBlbGVtZW50LCBtYXRlcmlhbCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggZWxlbWVudCBpbnN0YW5jZW9mIFRIUkVFLlJlbmRlcmFibGVGYWNlICkge1xuXG5cdFx0XHRcdF92MSA9IGVsZW1lbnQudjE7IF92MiA9IGVsZW1lbnQudjI7IF92MyA9IGVsZW1lbnQudjM7XG5cblx0XHRcdFx0aWYgKCBfdjEucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjEucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKCBfdjIucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjIucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKCBfdjMucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjMucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTtcblxuXHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjtcblx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YyLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7XG5cdFx0XHRcdF92My5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92My5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmO1xuXG5cdFx0XHRcdGlmICggbWF0ZXJpYWwub3ZlcmRyYXcgPiAwICkge1xuXG5cdFx0XHRcdFx0ZXhwYW5kKCBfdjEucG9zaXRpb25TY3JlZW4sIF92Mi5wb3NpdGlvblNjcmVlbiwgbWF0ZXJpYWwub3ZlcmRyYXcgKTtcblx0XHRcdFx0XHRleHBhbmQoIF92Mi5wb3NpdGlvblNjcmVlbiwgX3YzLnBvc2l0aW9uU2NyZWVuLCBtYXRlcmlhbC5vdmVyZHJhdyApO1xuXHRcdFx0XHRcdGV4cGFuZCggX3YzLnBvc2l0aW9uU2NyZWVuLCBfdjEucG9zaXRpb25TY3JlZW4sIG1hdGVyaWFsLm92ZXJkcmF3ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9lbGVtQm94LnNldEZyb21Qb2ludHMoIFtcblx0XHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4sXG5cdFx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuLFxuXHRcdFx0XHRcdF92My5wb3NpdGlvblNjcmVlblxuXHRcdFx0XHRdICk7XG5cblx0XHRcdFx0aWYgKCBfY2xpcEJveC5pbnRlcnNlY3RzQm94KCBfZWxlbUJveCApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0cmVuZGVyRmFjZTMoIF92MSwgX3YyLCBfdjMsIDAsIDEsIDIsIGVsZW1lbnQsIG1hdGVyaWFsICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8qIERFQlVHXG5cdFx0XHRzZXRMaW5lV2lkdGgoIDEgKTtcblx0XHRcdHNldFN0cm9rZVN0eWxlKCAncmdiYSggMCwgMjU1LCAwLCAwLjUgKScgKTtcblx0XHRcdF9jb250ZXh0LnN0cm9rZVJlY3QoIF9lbGVtQm94Lm1pbi54LCBfZWxlbUJveC5taW4ueSwgX2VsZW1Cb3gubWF4LnggLSBfZWxlbUJveC5taW4ueCwgX2VsZW1Cb3gubWF4LnkgLSBfZWxlbUJveC5taW4ueSApO1xuXHRcdFx0Ki9cblxuXHRcdFx0X2NsZWFyQm94LnVuaW9uKCBfZWxlbUJveCApO1xuXG5cdFx0fVxuXG5cdFx0LyogREVCVUdcblx0XHRzZXRMaW5lV2lkdGgoIDEgKTtcblx0XHRzZXRTdHJva2VTdHlsZSggJ3JnYmEoIDI1NSwgMCwgMCwgMC41ICknICk7XG5cdFx0X2NvbnRleHQuc3Ryb2tlUmVjdCggX2NsZWFyQm94Lm1pbi54LCBfY2xlYXJCb3gubWluLnksIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCwgX2NsZWFyQm94Lm1heC55IC0gX2NsZWFyQm94Lm1pbi55ICk7XG5cdFx0Ki9cblxuXHRcdF9jb250ZXh0LnNldFRyYW5zZm9ybSggMSwgMCwgMCwgMSwgMCwgMCApO1xuXG5cdH07XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBjYWxjdWxhdGVMaWdodHMoKSB7XG5cblx0XHRfYW1iaWVudExpZ2h0LnNldFJHQiggMCwgMCwgMCApO1xuXHRcdF9kaXJlY3Rpb25hbExpZ2h0cy5zZXRSR0IoIDAsIDAsIDAgKTtcblx0XHRfcG9pbnRMaWdodHMuc2V0UkdCKCAwLCAwLCAwICk7XG5cblx0XHRmb3IgKCB2YXIgbCA9IDAsIGxsID0gX2xpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHtcblxuXHRcdFx0dmFyIGxpZ2h0ID0gX2xpZ2h0c1sgbCBdO1xuXHRcdFx0dmFyIGxpZ2h0Q29sb3IgPSBsaWdodC5jb2xvcjtcblxuXHRcdFx0aWYgKCBsaWdodC5pc0FtYmllbnRMaWdodCApIHtcblxuXHRcdFx0XHRfYW1iaWVudExpZ2h0LmFkZCggbGlnaHRDb2xvciApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc0RpcmVjdGlvbmFsTGlnaHQgKSB7XG5cblx0XHRcdFx0Ly8gZm9yIHNwcml0ZXNcblxuXHRcdFx0XHRfZGlyZWN0aW9uYWxMaWdodHMuYWRkKCBsaWdodENvbG9yICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHtcblxuXHRcdFx0XHQvLyBmb3Igc3ByaXRlc1xuXG5cdFx0XHRcdF9wb2ludExpZ2h0cy5hZGQoIGxpZ2h0Q29sb3IgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjdWxhdGVMaWdodCggcG9zaXRpb24sIG5vcm1hbCwgY29sb3IgKSB7XG5cblx0XHRmb3IgKCB2YXIgbCA9IDAsIGxsID0gX2xpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHtcblxuXHRcdFx0dmFyIGxpZ2h0ID0gX2xpZ2h0c1sgbCBdO1xuXG5cdFx0XHRfbGlnaHRDb2xvci5jb3B5KCBsaWdodC5jb2xvciApO1xuXG5cdFx0XHRpZiAoIGxpZ2h0LmlzRGlyZWN0aW9uYWxMaWdodCApIHtcblxuXHRcdFx0XHR2YXIgbGlnaHRQb3NpdGlvbiA9IF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHR2YXIgYW1vdW50ID0gbm9ybWFsLmRvdCggbGlnaHRQb3NpdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYW1vdW50IDw9IDAgKSBjb250aW51ZTtcblxuXHRcdFx0XHRhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5O1xuXG5cdFx0XHRcdGNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHtcblxuXHRcdFx0XHR2YXIgbGlnaHRQb3NpdGlvbiA9IF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblxuXHRcdFx0XHR2YXIgYW1vdW50ID0gbm9ybWFsLmRvdCggX3ZlY3RvcjMuc3ViVmVjdG9ycyggbGlnaHRQb3NpdGlvbiwgcG9zaXRpb24gKS5ub3JtYWxpemUoKSApO1xuXG5cdFx0XHRcdGlmICggYW1vdW50IDw9IDAgKSBjb250aW51ZTtcblxuXHRcdFx0XHRhbW91bnQgKj0gbGlnaHQuZGlzdGFuY2UgPT0gMCA/IDEgOiAxIC0gTWF0aC5taW4oIHBvc2l0aW9uLmRpc3RhbmNlVG8oIGxpZ2h0UG9zaXRpb24gKSAvIGxpZ2h0LmRpc3RhbmNlLCAxICk7XG5cblx0XHRcdFx0aWYgKCBhbW91bnQgPT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGFtb3VudCAqPSBsaWdodC5pbnRlbnNpdHk7XG5cblx0XHRcdFx0Y29sb3IuYWRkKCBfbGlnaHRDb2xvci5tdWx0aXBseVNjYWxhciggYW1vdW50ICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJTcHJpdGUoIHYxLCBlbGVtZW50LCBtYXRlcmlhbCApIHtcblxuXHRcdHNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTtcblx0XHRzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTtcblxuXHRcdHZhciBzY2FsZVggPSBlbGVtZW50LnNjYWxlLnggKiBfY2FudmFzV2lkdGhIYWxmO1xuXHRcdHZhciBzY2FsZVkgPSBlbGVtZW50LnNjYWxlLnkgKiBfY2FudmFzSGVpZ2h0SGFsZjtcblxuXHRcdHZhciBkaXN0ID0gTWF0aC5zcXJ0KCBzY2FsZVggKiBzY2FsZVggKyBzY2FsZVkgKiBzY2FsZVkgKTsgLy8gYWxsb3cgZm9yIHJvdGF0ZWQgc3ByaXRlXG5cdFx0X2VsZW1Cb3gubWluLnNldCggdjEueCAtIGRpc3QsIHYxLnkgLSBkaXN0ICk7XG5cdFx0X2VsZW1Cb3gubWF4LnNldCggdjEueCArIGRpc3QsIHYxLnkgKyBkaXN0ICk7XG5cblx0XHRpZiAoIG1hdGVyaWFsLmlzU3ByaXRlTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHZhciB0ZXh0dXJlID0gbWF0ZXJpYWwubWFwO1xuXG5cdFx0XHRpZiAoIHRleHR1cmUgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0dmFyIHBhdHRlcm4gPSBfcGF0dGVybnNbIHRleHR1cmUuaWQgXTtcblxuXHRcdFx0XHRpZiAoIHBhdHRlcm4gPT09IHVuZGVmaW5lZCB8fCBwYXR0ZXJuLnZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0XHRcdHBhdHRlcm4gPSB0ZXh0dXJlVG9QYXR0ZXJuKCB0ZXh0dXJlICk7XG5cdFx0XHRcdFx0X3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF0gPSBwYXR0ZXJuO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHBhdHRlcm4uY2FudmFzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRzZXRGaWxsU3R5bGUoIHBhdHRlcm4uY2FudmFzICk7XG5cblx0XHRcdFx0XHR2YXIgYml0bWFwID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0XHRcdHZhciBveCA9IGJpdG1hcC53aWR0aCAqIHRleHR1cmUub2Zmc2V0Lng7XG5cdFx0XHRcdFx0dmFyIG95ID0gYml0bWFwLmhlaWdodCAqIHRleHR1cmUub2Zmc2V0Lnk7XG5cblx0XHRcdFx0XHR2YXIgc3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLnJlcGVhdC54O1xuXHRcdFx0XHRcdHZhciBzeSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55O1xuXG5cdFx0XHRcdFx0dmFyIGN4ID0gc2NhbGVYIC8gc3g7XG5cdFx0XHRcdFx0dmFyIGN5ID0gc2NhbGVZIC8gc3k7XG5cblx0XHRcdFx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0XHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7XG5cdFx0XHRcdFx0aWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTtcblx0XHRcdFx0XHRfY29udGV4dC50cmFuc2xhdGUoIC0gc2NhbGVYIC8gMiwgLSBzY2FsZVkgLyAyICk7XG5cdFx0XHRcdFx0X2NvbnRleHQuc2NhbGUoIGN4LCBjeSApO1xuXHRcdFx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggLSBveCwgLSBveSApO1xuXHRcdFx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCBveCwgb3ksIHN4LCBzeSApO1xuXHRcdFx0XHRcdF9jb250ZXh0LnJlc3RvcmUoKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gbm8gdGV4dHVyZVxuXG5cdFx0XHRcdHNldEZpbGxTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApO1xuXG5cdFx0XHRcdF9jb250ZXh0LnNhdmUoKTtcblx0XHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7XG5cdFx0XHRcdGlmICggbWF0ZXJpYWwucm90YXRpb24gIT09IDAgKSBfY29udGV4dC5yb3RhdGUoIG1hdGVyaWFsLnJvdGF0aW9uICk7XG5cdFx0XHRcdF9jb250ZXh0LnNjYWxlKCBzY2FsZVgsIC0gc2NhbGVZICk7XG5cdFx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCAtIDAuNSwgLSAwLjUsIDEsIDEgKTtcblx0XHRcdFx0X2NvbnRleHQucmVzdG9yZSgpO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1Nwcml0ZUNhbnZhc01hdGVyaWFsICkge1xuXG5cdFx0XHRzZXRTdHJva2VTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApO1xuXHRcdFx0c2V0RmlsbFN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7XG5cblx0XHRcdF9jb250ZXh0LnNhdmUoKTtcblx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTtcblx0XHRcdF9jb250ZXh0LnNjYWxlKCBzY2FsZVgsIHNjYWxlWSApO1xuXG5cdFx0XHRtYXRlcmlhbC5wcm9ncmFtKCBfY29udGV4dCApO1xuXG5cdFx0XHRfY29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1BvaW50c01hdGVyaWFsICkge1xuXG5cdFx0XHRzZXRGaWxsU3R5bGUoIG1hdGVyaWFsLmNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdFx0X2NvbnRleHQuc2F2ZSgpO1xuXHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnJvdGF0aW9uICE9PSAwICkgX2NvbnRleHQucm90YXRlKCBtYXRlcmlhbC5yb3RhdGlvbiApO1xuXHRcdFx0X2NvbnRleHQuc2NhbGUoIHNjYWxlWCAqIG1hdGVyaWFsLnNpemUsIC0gc2NhbGVZICogbWF0ZXJpYWwuc2l6ZSApO1xuXHRcdFx0X2NvbnRleHQuZmlsbFJlY3QoIC0gMC41LCAtIDAuNSwgMSwgMSApO1xuXHRcdFx0X2NvbnRleHQucmVzdG9yZSgpO1xuXG5cdFx0fVxuXG5cdFx0LyogREVCVUdcblx0XHRzZXRTdHJva2VTdHlsZSggJ3JnYigyNTUsMjU1LDApJyApO1xuXHRcdF9jb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdF9jb250ZXh0Lm1vdmVUbyggdjEueCAtIDEwLCB2MS55ICk7XG5cdFx0X2NvbnRleHQubGluZVRvKCB2MS54ICsgMTAsIHYxLnkgKTtcblx0XHRfY29udGV4dC5tb3ZlVG8oIHYxLngsIHYxLnkgLSAxMCApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggdjEueCwgdjEueSArIDEwICk7XG5cdFx0X2NvbnRleHQuc3Ryb2tlKCk7XG5cdFx0Ki9cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyTGluZSggdjEsIHYyLCBlbGVtZW50LCBtYXRlcmlhbCApIHtcblxuXHRcdHNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTtcblx0XHRzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTtcblxuXHRcdF9jb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdF9jb250ZXh0Lm1vdmVUbyggdjEucG9zaXRpb25TY3JlZW4ueCwgdjEucG9zaXRpb25TY3JlZW4ueSApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggdjIucG9zaXRpb25TY3JlZW4ueCwgdjIucG9zaXRpb25TY3JlZW4ueSApO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5pc0xpbmVCYXNpY01hdGVyaWFsICkge1xuXG5cdFx0XHRzZXRMaW5lV2lkdGgoIG1hdGVyaWFsLmxpbmV3aWR0aCApO1xuXHRcdFx0c2V0TGluZUNhcCggbWF0ZXJpYWwubGluZWNhcCApO1xuXHRcdFx0c2V0TGluZUpvaW4oIG1hdGVyaWFsLmxpbmVqb2luICk7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzICE9PSBUSFJFRS5WZXJ0ZXhDb2xvcnMgKSB7XG5cblx0XHRcdFx0c2V0U3Ryb2tlU3R5bGUoIG1hdGVyaWFsLmNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR2YXIgY29sb3JTdHlsZTEgPSBlbGVtZW50LnZlcnRleENvbG9yc1sgMCBdLmdldFN0eWxlKCk7XG5cdFx0XHRcdHZhciBjb2xvclN0eWxlMiA9IGVsZW1lbnQudmVydGV4Q29sb3JzWyAxIF0uZ2V0U3R5bGUoKTtcblxuXHRcdFx0XHRpZiAoIGNvbG9yU3R5bGUxID09PSBjb2xvclN0eWxlMiApIHtcblxuXHRcdFx0XHRcdHNldFN0cm9rZVN0eWxlKCBjb2xvclN0eWxlMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0XHR2YXIgZ3JhZCA9IF9jb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KFxuXHRcdFx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi54LFxuXHRcdFx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi55LFxuXHRcdFx0XHRcdFx0XHR2Mi5wb3NpdGlvblNjcmVlbi54LFxuXHRcdFx0XHRcdFx0XHR2Mi5wb3NpdGlvblNjcmVlbi55XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Z3JhZC5hZGRDb2xvclN0b3AoIDAsIGNvbG9yU3R5bGUxICk7XG5cdFx0XHRcdFx0XHRncmFkLmFkZENvbG9yU3RvcCggMSwgY29sb3JTdHlsZTIgKTtcblxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBleGNlcHRpb24gKSB7XG5cblx0XHRcdFx0XHRcdGdyYWQgPSBjb2xvclN0eWxlMTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNldFN0cm9rZVN0eWxlKCBncmFkICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuaXNMaW5lRGFzaGVkTWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0c2V0TGluZURhc2goIFsgbWF0ZXJpYWwuZGFzaFNpemUsIG1hdGVyaWFsLmdhcFNpemUgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jb250ZXh0LnN0cm9rZSgpO1xuXHRcdFx0X2VsZW1Cb3guZXhwYW5kQnlTY2FsYXIoIG1hdGVyaWFsLmxpbmV3aWR0aCAqIDIgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc0xpbmVEYXNoZWRNYXRlcmlhbCApIHtcblxuXHRcdFx0XHRzZXRMaW5lRGFzaCggW10gKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJGYWNlMyggdjEsIHYyLCB2MywgdXYxLCB1djIsIHV2MywgZWxlbWVudCwgbWF0ZXJpYWwgKSB7XG5cblx0XHRfdGhpcy5pbmZvLnJlbmRlci52ZXJ0aWNlcyArPSAzO1xuXHRcdF90aGlzLmluZm8ucmVuZGVyLmZhY2VzICsrO1xuXG5cdFx0c2V0T3BhY2l0eSggbWF0ZXJpYWwub3BhY2l0eSApO1xuXHRcdHNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGluZyApO1xuXG5cdFx0X3YxeCA9IHYxLnBvc2l0aW9uU2NyZWVuLng7IF92MXkgPSB2MS5wb3NpdGlvblNjcmVlbi55O1xuXHRcdF92MnggPSB2Mi5wb3NpdGlvblNjcmVlbi54OyBfdjJ5ID0gdjIucG9zaXRpb25TY3JlZW4ueTtcblx0XHRfdjN4ID0gdjMucG9zaXRpb25TY3JlZW4ueDsgX3YzeSA9IHYzLnBvc2l0aW9uU2NyZWVuLnk7XG5cblx0XHRkcmF3VHJpYW5nbGUoIF92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3kgKTtcblxuXHRcdGlmICggKCBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsICkgJiYgbWF0ZXJpYWwubWFwID09PSBudWxsICkge1xuXG5cdFx0XHRfZGlmZnVzZUNvbG9yLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cdFx0XHRfZW1pc3NpdmVDb2xvci5jb3B5KCBtYXRlcmlhbC5lbWlzc2l2ZSApO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gVEhSRUUuRmFjZUNvbG9ycyApIHtcblxuXHRcdFx0XHRfZGlmZnVzZUNvbG9yLm11bHRpcGx5KCBlbGVtZW50LmNvbG9yICk7XG5cblx0XHRcdH1cblxuXHRcdFx0X2NvbG9yLmNvcHkoIF9hbWJpZW50TGlnaHQgKTtcblxuXHRcdFx0X2NlbnRyb2lkLmNvcHkoIHYxLnBvc2l0aW9uV29ybGQgKS5hZGQoIHYyLnBvc2l0aW9uV29ybGQgKS5hZGQoIHYzLnBvc2l0aW9uV29ybGQgKS5kaXZpZGVTY2FsYXIoIDMgKTtcblxuXHRcdFx0Y2FsY3VsYXRlTGlnaHQoIF9jZW50cm9pZCwgZWxlbWVudC5ub3JtYWxNb2RlbCwgX2NvbG9yICk7XG5cblx0XHRcdF9jb2xvci5tdWx0aXBseSggX2RpZmZ1c2VDb2xvciApLmFkZCggX2VtaXNzaXZlQ29sb3IgKTtcblxuXHRcdFx0bWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlXG5cdFx0XHRcdCA/IHN0cm9rZVBhdGgoIF9jb2xvciwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiApXG5cdFx0XHRcdCA6IGZpbGxQYXRoKCBfY29sb3IgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCApIHtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5tYXAgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0dmFyIG1hcHBpbmcgPSBtYXRlcmlhbC5tYXAubWFwcGluZztcblxuXHRcdFx0XHRpZiAoIG1hcHBpbmcgPT09IFRIUkVFLlVWTWFwcGluZyApIHtcblxuXHRcdFx0XHRcdF91dnMgPSBlbGVtZW50LnV2cztcblx0XHRcdFx0XHRwYXR0ZXJuUGF0aCggX3YxeCwgX3YxeSwgX3YyeCwgX3YyeSwgX3YzeCwgX3YzeSwgX3V2c1sgdXYxIF0ueCwgX3V2c1sgdXYxIF0ueSwgX3V2c1sgdXYyIF0ueCwgX3V2c1sgdXYyIF0ueSwgX3V2c1sgdXYzIF0ueCwgX3V2c1sgdXYzIF0ueSwgbWF0ZXJpYWwubWFwICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5lbnZNYXAgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9PT0gVEhSRUUuU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmcgKSB7XG5cblx0XHRcdFx0XHRfbm9ybWFsLmNvcHkoIGVsZW1lbnQudmVydGV4Tm9ybWFsc01vZGVsWyB1djEgXSApLmFwcGx5TWF0cml4MyggX25vcm1hbFZpZXdNYXRyaXggKTtcblx0XHRcdFx0XHRfdXYxeCA9IDAuNSAqIF9ub3JtYWwueCArIDAuNTtcblx0XHRcdFx0XHRfdXYxeSA9IDAuNSAqIF9ub3JtYWwueSArIDAuNTtcblxuXHRcdFx0XHRcdF9ub3JtYWwuY29weSggZWxlbWVudC52ZXJ0ZXhOb3JtYWxzTW9kZWxbIHV2MiBdICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApO1xuXHRcdFx0XHRcdF91djJ4ID0gMC41ICogX25vcm1hbC54ICsgMC41O1xuXHRcdFx0XHRcdF91djJ5ID0gMC41ICogX25vcm1hbC55ICsgMC41O1xuXG5cdFx0XHRcdFx0X25vcm1hbC5jb3B5KCBlbGVtZW50LnZlcnRleE5vcm1hbHNNb2RlbFsgdXYzIF0gKS5hcHBseU1hdHJpeDMoIF9ub3JtYWxWaWV3TWF0cml4ICk7XG5cdFx0XHRcdFx0X3V2M3ggPSAwLjUgKiBfbm9ybWFsLnggKyAwLjU7XG5cdFx0XHRcdFx0X3V2M3kgPSAwLjUgKiBfbm9ybWFsLnkgKyAwLjU7XG5cblx0XHRcdFx0XHRwYXR0ZXJuUGF0aCggX3YxeCwgX3YxeSwgX3YyeCwgX3YyeSwgX3YzeCwgX3YzeSwgX3V2MXgsIF91djF5LCBfdXYyeCwgX3V2MnksIF91djN4LCBfdXYzeSwgbWF0ZXJpYWwuZW52TWFwICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9jb2xvci5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXG5cdFx0XHRcdGlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5GYWNlQ29sb3JzICkge1xuXG5cdFx0XHRcdFx0X2NvbG9yLm11bHRpcGx5KCBlbGVtZW50LmNvbG9yICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCA/IHN0cm9rZVBhdGgoIF9jb2xvciwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiApXG5cdFx0XHRcdFx0IDogZmlsbFBhdGgoIF9jb2xvciApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hOb3JtYWxNYXRlcmlhbCApIHtcblxuXHRcdFx0X25vcm1hbC5jb3B5KCBlbGVtZW50Lm5vcm1hbE1vZGVsICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApO1xuXG5cdFx0XHRfY29sb3Iuc2V0UkdCKCBfbm9ybWFsLngsIF9ub3JtYWwueSwgX25vcm1hbC56ICkubXVsdGlwbHlTY2FsYXIoIDAuNSApLmFkZFNjYWxhciggMC41ICk7XG5cblx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHQgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKVxuXHRcdFx0XHQgOiBmaWxsUGF0aCggX2NvbG9yICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfY29sb3Iuc2V0UkdCKCAxLCAxLCAxICk7XG5cblx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHQgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKVxuXHRcdFx0XHQgOiBmaWxsUGF0aCggX2NvbG9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyICkge1xuXG5cdFx0X2NvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0X2NvbnRleHQubW92ZVRvKCB4MCwgeTAgKTtcblx0XHRfY29udGV4dC5saW5lVG8oIHgxLCB5MSApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggeDIsIHkyICk7XG5cdFx0X2NvbnRleHQuY2xvc2VQYXRoKCk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHN0cm9rZVBhdGgoIGNvbG9yLCBsaW5ld2lkdGgsIGxpbmVjYXAsIGxpbmVqb2luICkge1xuXG5cdFx0c2V0TGluZVdpZHRoKCBsaW5ld2lkdGggKTtcblx0XHRzZXRMaW5lQ2FwKCBsaW5lY2FwICk7XG5cdFx0c2V0TGluZUpvaW4oIGxpbmVqb2luICk7XG5cdFx0c2V0U3Ryb2tlU3R5bGUoIGNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdF9jb250ZXh0LnN0cm9rZSgpO1xuXG5cdFx0X2VsZW1Cb3guZXhwYW5kQnlTY2FsYXIoIGxpbmV3aWR0aCAqIDIgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZmlsbFBhdGgoIGNvbG9yICkge1xuXG5cdFx0c2V0RmlsbFN0eWxlKCBjb2xvci5nZXRTdHlsZSgpICk7XG5cdFx0X2NvbnRleHQuZmlsbCgpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXh0dXJlVG9QYXR0ZXJuKCB0ZXh0dXJlICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlLnZlcnNpb24gPT09IDAgfHxcblx0XHRcdHRleHR1cmUgaW5zdGFuY2VvZiBUSFJFRS5Db21wcmVzc2VkVGV4dHVyZSB8fFxuXHRcdFx0dGV4dHVyZSBpbnN0YW5jZW9mIFRIUkVFLkRhdGFUZXh0dXJlICkge1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjYW52YXM6IHVuZGVmaW5lZCxcblx0XHRcdFx0dmVyc2lvbjogdGV4dHVyZS52ZXJzaW9uXG5cdFx0XHR9O1xuXG5cdFx0fVxuXG5cdFx0dmFyIGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdGlmICggaW1hZ2UuY29tcGxldGUgPT09IGZhbHNlICkge1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjYW52YXM6IHVuZGVmaW5lZCxcblx0XHRcdFx0dmVyc2lvbjogMFxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdHZhciByZXBlYXRYID0gdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuUmVwZWF0V3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZztcblx0XHR2YXIgcmVwZWF0WSA9IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLlJlcGVhdFdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7XG5cblx0XHR2YXIgbWlycm9yWCA9IHRleHR1cmUud3JhcFMgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7XG5cdFx0dmFyIG1pcnJvclkgPSB0ZXh0dXJlLndyYXBUID09PSBUSFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nO1xuXG5cdFx0Ly9cblxuXHRcdHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnY2FudmFzJyApO1xuXHRcdGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoICogKCBtaXJyb3JYID8gMiA6IDEgKTtcblx0XHRjYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogKCBtaXJyb3JZID8gMiA6IDEgKTtcblxuXHRcdHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblx0XHRjb250ZXh0LnNldFRyYW5zZm9ybSggMSwgMCwgMCwgLSAxLCAwLCBpbWFnZS5oZWlnaHQgKTtcblx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAgKTtcblxuXHRcdGlmICggbWlycm9yWCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIC0gMSwgMCwgMCwgLSAxLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cdFx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIC0gaW1hZ2Uud2lkdGgsIDAgKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWlycm9yWSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIDEsIDAsIDAsIDEsIDAsIDAgKTtcblx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1pcnJvclggPT09IHRydWUgJiYgbWlycm9yWSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIC0gMSwgMCwgMCwgMSwgaW1hZ2Uud2lkdGgsIDAgKTtcblx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgLSBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHR2YXIgcmVwZWF0ID0gJ25vLXJlcGVhdCc7XG5cblx0XHRpZiAoIHJlcGVhdFggPT09IHRydWUgJiYgcmVwZWF0WSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0cmVwZWF0ID0gJ3JlcGVhdCc7XG5cblx0XHR9IGVsc2UgaWYgKCByZXBlYXRYID09PSB0cnVlICkge1xuXG5cdFx0XHRyZXBlYXQgPSAncmVwZWF0LXgnO1xuXG5cdFx0fSBlbHNlIGlmICggcmVwZWF0WSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0cmVwZWF0ID0gJ3JlcGVhdC15JztcblxuXHRcdH1cblxuXHRcdHZhciBwYXR0ZXJuID0gX2NvbnRleHQuY3JlYXRlUGF0dGVybiggY2FudmFzLCByZXBlYXQgKTtcblxuXHRcdGlmICggdGV4dHVyZS5vblVwZGF0ZSApIHRleHR1cmUub25VcGRhdGUoIHRleHR1cmUgKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjYW52YXM6IHBhdHRlcm4sXG5cdFx0XHR2ZXJzaW9uOiB0ZXh0dXJlLnZlcnNpb25cblx0XHR9O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBwYXR0ZXJuUGF0aCggeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgdTAsIHYwLCB1MSwgdjEsIHUyLCB2MiwgdGV4dHVyZSApIHtcblxuXHRcdHZhciBwYXR0ZXJuID0gX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF07XG5cblx0XHRpZiAoIHBhdHRlcm4gPT09IHVuZGVmaW5lZCB8fCBwYXR0ZXJuLnZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0cGF0dGVybiA9IHRleHR1cmVUb1BhdHRlcm4oIHRleHR1cmUgKTtcblx0XHRcdF9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdID0gcGF0dGVybjtcblxuXHRcdH1cblxuXHRcdGlmICggcGF0dGVybi5jYW52YXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCBwYXR0ZXJuLmNhbnZhcyApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCAncmdiYSggMCwgMCwgMCwgMSknICk7XG5cdFx0XHRfY29udGV4dC5maWxsKCk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHQvLyBodHRwOi8vZXh0cmVtZWx5c2F0aXNmYWN0b3J5dG90YWxpdGFyaWFuaXNtLmNvbS9ibG9nLz9wPTIxMjBcblxuXHRcdHZhciBhLCBiLCBjLCBkLCBlLCBmLCBkZXQsIGlkZXQsXG5cdFx0XHRvZmZzZXRYID0gdGV4dHVyZS5vZmZzZXQueCAvIHRleHR1cmUucmVwZWF0LngsXG5cdFx0XHRvZmZzZXRZID0gdGV4dHVyZS5vZmZzZXQueSAvIHRleHR1cmUucmVwZWF0LnksXG5cdFx0XHR3aWR0aCA9IHRleHR1cmUuaW1hZ2Uud2lkdGggKiB0ZXh0dXJlLnJlcGVhdC54LFxuXHRcdFx0aGVpZ2h0ID0gdGV4dHVyZS5pbWFnZS5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55O1xuXG5cdFx0dTAgPSAoIHUwICsgb2Zmc2V0WCApICogd2lkdGg7XG5cdFx0djAgPSAoIHYwICsgb2Zmc2V0WSApICogaGVpZ2h0O1xuXG5cdFx0dTEgPSAoIHUxICsgb2Zmc2V0WCApICogd2lkdGg7XG5cdFx0djEgPSAoIHYxICsgb2Zmc2V0WSApICogaGVpZ2h0O1xuXG5cdFx0dTIgPSAoIHUyICsgb2Zmc2V0WCApICogd2lkdGg7XG5cdFx0djIgPSAoIHYyICsgb2Zmc2V0WSApICogaGVpZ2h0O1xuXG5cdFx0eDEgLT0geDA7IHkxIC09IHkwO1xuXHRcdHgyIC09IHgwOyB5MiAtPSB5MDtcblxuXHRcdHUxIC09IHUwOyB2MSAtPSB2MDtcblx0XHR1MiAtPSB1MDsgdjIgLT0gdjA7XG5cblx0XHRkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTtcblxuXHRcdGlmICggZGV0ID09PSAwICkgcmV0dXJuO1xuXG5cdFx0aWRldCA9IDEgLyBkZXQ7XG5cblx0XHRhID0gKCB2MiAqIHgxIC0gdjEgKiB4MiApICogaWRldDtcblx0XHRiID0gKCB2MiAqIHkxIC0gdjEgKiB5MiApICogaWRldDtcblx0XHRjID0gKCB1MSAqIHgyIC0gdTIgKiB4MSApICogaWRldDtcblx0XHRkID0gKCB1MSAqIHkyIC0gdTIgKiB5MSApICogaWRldDtcblxuXHRcdGUgPSB4MCAtIGEgKiB1MCAtIGMgKiB2MDtcblx0XHRmID0geTAgLSBiICogdTAgLSBkICogdjA7XG5cblx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0X2NvbnRleHQudHJhbnNmb3JtKCBhLCBiLCBjLCBkLCBlLCBmICk7XG5cdFx0X2NvbnRleHQuZmlsbCgpO1xuXHRcdF9jb250ZXh0LnJlc3RvcmUoKTtcblxuXHR9XG5cblx0Lypcblx0ZnVuY3Rpb24gY2xpcEltYWdlKCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB1MCwgdjAsIHUxLCB2MSwgdTIsIHYyLCBpbWFnZSApIHtcblxuXHRcdC8vIGh0dHA6Ly9leHRyZW1lbHlzYXRpc2ZhY3Rvcnl0b3RhbGl0YXJpYW5pc20uY29tL2Jsb2cvP3A9MjEyMFxuXG5cdFx0dmFyIGEsIGIsIGMsIGQsIGUsIGYsIGRldCwgaWRldCxcblx0XHR3aWR0aCA9IGltYWdlLndpZHRoIC0gMSxcblx0XHRoZWlnaHQgPSBpbWFnZS5oZWlnaHQgLSAxO1xuXG5cdFx0dTAgKj0gd2lkdGg7IHYwICo9IGhlaWdodDtcblx0XHR1MSAqPSB3aWR0aDsgdjEgKj0gaGVpZ2h0O1xuXHRcdHUyICo9IHdpZHRoOyB2MiAqPSBoZWlnaHQ7XG5cblx0XHR4MSAtPSB4MDsgeTEgLT0geTA7XG5cdFx0eDIgLT0geDA7IHkyIC09IHkwO1xuXG5cdFx0dTEgLT0gdTA7IHYxIC09IHYwO1xuXHRcdHUyIC09IHUwOyB2MiAtPSB2MDtcblxuXHRcdGRldCA9IHUxICogdjIgLSB1MiAqIHYxO1xuXG5cdFx0aWRldCA9IDEgLyBkZXQ7XG5cblx0XHRhID0gKCB2MiAqIHgxIC0gdjEgKiB4MiApICogaWRldDtcblx0XHRiID0gKCB2MiAqIHkxIC0gdjEgKiB5MiApICogaWRldDtcblx0XHRjID0gKCB1MSAqIHgyIC0gdTIgKiB4MSApICogaWRldDtcblx0XHRkID0gKCB1MSAqIHkyIC0gdTIgKiB5MSApICogaWRldDtcblxuXHRcdGUgPSB4MCAtIGEgKiB1MCAtIGMgKiB2MDtcblx0XHRmID0geTAgLSBiICogdTAgLSBkICogdjA7XG5cblx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0X2NvbnRleHQudHJhbnNmb3JtKCBhLCBiLCBjLCBkLCBlLCBmICk7XG5cdFx0X2NvbnRleHQuY2xpcCgpO1xuXHRcdF9jb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAgKTtcblx0XHRfY29udGV4dC5yZXN0b3JlKCk7XG5cblx0fVxuXHQqL1xuXG5cdC8vIEhpZGUgYW50aS1hbGlhcyBnYXBzXG5cblx0ZnVuY3Rpb24gZXhwYW5kKCB2MSwgdjIsIHBpeGVscyApIHtcblxuXHRcdHZhciB4ID0gdjIueCAtIHYxLngsIHkgPSB2Mi55IC0gdjEueSxcblx0XHRcdGRldCA9IHggKiB4ICsgeSAqIHksIGlkZXQ7XG5cblx0XHRpZiAoIGRldCA9PT0gMCApIHJldHVybjtcblxuXHRcdGlkZXQgPSBwaXhlbHMgLyBNYXRoLnNxcnQoIGRldCApO1xuXG5cdFx0eCAqPSBpZGV0OyB5ICo9IGlkZXQ7XG5cblx0XHR2Mi54ICs9IHg7IHYyLnkgKz0geTtcblx0XHR2MS54IC09IHg7IHYxLnkgLT0geTtcblxuXHR9XG5cblx0Ly8gQ29udGV4dCBjYWNoZWQgbWV0aG9kcy5cblxuXHRmdW5jdGlvbiBzZXRPcGFjaXR5KCB2YWx1ZSApIHtcblxuXHRcdGlmICggX2NvbnRleHRHbG9iYWxBbHBoYSAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0Lmdsb2JhbEFscGhhID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dEdsb2JhbEFscGhhID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldEJsZW5kaW5nKCB2YWx1ZSApIHtcblxuXHRcdGlmICggX2NvbnRleHRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gIT09IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSBUSFJFRS5Ob3JtYWxCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuQWRkaXRpdmVCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbGlnaHRlcic7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSBUSFJFRS5TdWJ0cmFjdGl2ZUJsZW5kaW5nICkge1xuXG5cdFx0XHRcdF9jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkYXJrZXInO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuTXVsdGlwbHlCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldExpbmVXaWR0aCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0TGluZVdpZHRoICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0X2NvbnRleHQubGluZVdpZHRoID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dExpbmVXaWR0aCA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lQ2FwKCB2YWx1ZSApIHtcblxuXHRcdC8vIFwiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJcblxuXHRcdGlmICggX2NvbnRleHRMaW5lQ2FwICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0X2NvbnRleHQubGluZUNhcCA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRMaW5lQ2FwID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldExpbmVKb2luKCB2YWx1ZSApIHtcblxuXHRcdC8vIFwicm91bmRcIiwgXCJiZXZlbFwiLCBcIm1pdGVyXCJcblxuXHRcdGlmICggX2NvbnRleHRMaW5lSm9pbiAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LmxpbmVKb2luID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dExpbmVKb2luID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFN0cm9rZVN0eWxlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggX2NvbnRleHRTdHJva2VTdHlsZSAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LnN0cm9rZVN0eWxlID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dFN0cm9rZVN0eWxlID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldEZpbGxTdHlsZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0RmlsbFN0eWxlICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0X2NvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dEZpbGxTdHlsZSA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lRGFzaCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0TGluZURhc2gubGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGggKSB7XG5cblx0XHRcdF9jb250ZXh0LnNldExpbmVEYXNoKCB2YWx1ZSApO1xuXHRcdFx0X2NvbnRleHRMaW5lRGFzaCA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tL1xuICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBodHRwOi8vd3d3LnBhdWxicnVudC5jby51ay9cbiAqIEBhdXRob3IganVsaWFud2EgLyBodHRwczovL2dpdGh1Yi5jb20vanVsaWFud2FcbiAqL1xuXG5USFJFRS5SZW5kZXJhYmxlT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMub2JqZWN0ID0gbnVsbDtcblx0dGhpcy56ID0gMDtcblx0dGhpcy5yZW5kZXJPcmRlciA9IDA7XG5cbn07XG5cbi8vXG5cblRIUkVFLlJlbmRlcmFibGVGYWNlID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMudjEgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpO1xuXHR0aGlzLnYyID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblx0dGhpcy52MyA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCk7XG5cblx0dGhpcy5ub3JtYWxNb2RlbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cblx0dGhpcy52ZXJ0ZXhOb3JtYWxzTW9kZWwgPSBbIG5ldyBUSFJFRS5WZWN0b3IzKCksIG5ldyBUSFJFRS5WZWN0b3IzKCksIG5ldyBUSFJFRS5WZWN0b3IzKCkgXTtcblx0dGhpcy52ZXJ0ZXhOb3JtYWxzTGVuZ3RoID0gMDtcblxuXHR0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCk7XG5cdHRoaXMubWF0ZXJpYWwgPSBudWxsO1xuXHR0aGlzLnV2cyA9IFsgbmV3IFRIUkVFLlZlY3RvcjIoKSwgbmV3IFRIUkVFLlZlY3RvcjIoKSwgbmV3IFRIUkVFLlZlY3RvcjIoKSBdO1xuXG5cdHRoaXMueiA9IDA7XG5cdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG59O1xuXG4vL1xuXG5USFJFRS5SZW5kZXJhYmxlVmVydGV4ID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMucG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHR0aGlzLnBvc2l0aW9uV29ybGQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHR0aGlzLnBvc2l0aW9uU2NyZWVuID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcblxuXHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXG59O1xuXG5USFJFRS5SZW5kZXJhYmxlVmVydGV4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCB2ZXJ0ZXggKSB7XG5cblx0dGhpcy5wb3NpdGlvbldvcmxkLmNvcHkoIHZlcnRleC5wb3NpdGlvbldvcmxkICk7XG5cdHRoaXMucG9zaXRpb25TY3JlZW4uY29weSggdmVydGV4LnBvc2l0aW9uU2NyZWVuICk7XG5cbn07XG5cbi8vXG5cblRIUkVFLlJlbmRlcmFibGVMaW5lID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMudjEgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpO1xuXHR0aGlzLnYyID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblxuXHR0aGlzLnZlcnRleENvbG9ycyA9IFsgbmV3IFRIUkVFLkNvbG9yKCksIG5ldyBUSFJFRS5Db2xvcigpIF07XG5cdHRoaXMubWF0ZXJpYWwgPSBudWxsO1xuXG5cdHRoaXMueiA9IDA7XG5cdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG59O1xuXG4vL1xuXG5USFJFRS5SZW5kZXJhYmxlU3ByaXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMub2JqZWN0ID0gbnVsbDtcblxuXHR0aGlzLnggPSAwO1xuXHR0aGlzLnkgPSAwO1xuXHR0aGlzLnogPSAwO1xuXG5cdHRoaXMucm90YXRpb24gPSAwO1xuXHR0aGlzLnNjYWxlID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcblxuXHR0aGlzLm1hdGVyaWFsID0gbnVsbDtcblx0dGhpcy5yZW5kZXJPcmRlciA9IDA7XG5cbn07XG5cbi8vXG5cblRIUkVFLlByb2plY3RvciA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgX29iamVjdCwgX29iamVjdENvdW50LCBfb2JqZWN0UG9vbCA9IFtdLCBfb2JqZWN0UG9vbExlbmd0aCA9IDAsXG5cdFx0X3ZlcnRleCwgX3ZlcnRleENvdW50LCBfdmVydGV4UG9vbCA9IFtdLCBfdmVydGV4UG9vbExlbmd0aCA9IDAsXG5cdFx0X2ZhY2UsIF9mYWNlQ291bnQsIF9mYWNlUG9vbCA9IFtdLCBfZmFjZVBvb2xMZW5ndGggPSAwLFxuXHRcdF9saW5lLCBfbGluZUNvdW50LCBfbGluZVBvb2wgPSBbXSwgX2xpbmVQb29sTGVuZ3RoID0gMCxcblx0XHRfc3ByaXRlLCBfc3ByaXRlQ291bnQsIF9zcHJpdGVQb29sID0gW10sIF9zcHJpdGVQb29sTGVuZ3RoID0gMCxcblxuXHRcdF9yZW5kZXJEYXRhID0geyBvYmplY3RzOiBbXSwgbGlnaHRzOiBbXSwgZWxlbWVudHM6IFtdIH0sXG5cblx0XHRfdmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCksXG5cdFx0X3ZlY3RvcjQgPSBuZXcgVEhSRUUuVmVjdG9yNCgpLFxuXG5cdFx0X2NsaXBCb3ggPSBuZXcgVEhSRUUuQm94MyggbmV3IFRIUkVFLlZlY3RvcjMoIC0gMSwgLSAxLCAtIDEgKSwgbmV3IFRIUkVFLlZlY3RvcjMoIDEsIDEsIDEgKSApLFxuXHRcdF9ib3VuZGluZ0JveCA9IG5ldyBUSFJFRS5Cb3gzKCksXG5cdFx0X3BvaW50czMgPSBuZXcgQXJyYXkoIDMgKSxcblxuXHRcdF92aWV3TWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHRfdmlld1Byb2plY3Rpb25NYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpLFxuXG5cdFx0X21vZGVsTWF0cml4LFxuXHRcdF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKSxcblxuXHRcdF9ub3JtYWxNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4MygpLFxuXG5cdFx0X2ZydXN0dW0gPSBuZXcgVEhSRUUuRnJ1c3R1bSgpLFxuXG5cdFx0X2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4gPSBuZXcgVEhSRUUuVmVjdG9yNCgpLFxuXHRcdF9jbGlwcGVkVmVydGV4MlBvc2l0aW9uU2NyZWVuID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcblxuXHQvL1xuXG5cdHRoaXMucHJvamVjdFZlY3RvciA9IGZ1bmN0aW9uICggdmVjdG9yLCBjYW1lcmEgKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Qcm9qZWN0b3I6IC5wcm9qZWN0VmVjdG9yKCkgaXMgbm93IHZlY3Rvci5wcm9qZWN0KCkuJyApO1xuXHRcdHZlY3Rvci5wcm9qZWN0KCBjYW1lcmEgKTtcblxuXHR9O1xuXG5cdHRoaXMudW5wcm9qZWN0VmVjdG9yID0gZnVuY3Rpb24gKCB2ZWN0b3IsIGNhbWVyYSApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuJyApO1xuXHRcdHZlY3Rvci51bnByb2plY3QoIGNhbWVyYSApO1xuXG5cdH07XG5cblx0dGhpcy5waWNraW5nUmF5ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb2plY3RvcjogLnBpY2tpbmdSYXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4nICk7XG5cblx0fTtcblxuXHQvL1xuXG5cdHZhciBSZW5kZXJMaXN0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIG5vcm1hbHMgPSBbXTtcblx0XHR2YXIgY29sb3JzID0gW107XG5cdFx0dmFyIHV2cyA9IFtdO1xuXG5cdFx0dmFyIG9iamVjdCA9IG51bGw7XG5cdFx0dmFyIG1hdGVyaWFsID0gbnVsbDtcblxuXHRcdHZhciBub3JtYWxNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4MygpO1xuXG5cdFx0ZnVuY3Rpb24gc2V0T2JqZWN0KCB2YWx1ZSApIHtcblxuXHRcdFx0b2JqZWN0ID0gdmFsdWU7XG5cdFx0XHRtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0bm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCggb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdG5vcm1hbHMubGVuZ3RoID0gMDtcblx0XHRcdGNvbG9ycy5sZW5ndGggPSAwO1xuXHRcdFx0dXZzLmxlbmd0aCA9IDA7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwcm9qZWN0VmVydGV4KCB2ZXJ0ZXggKSB7XG5cblx0XHRcdHZhciBwb3NpdGlvbiA9IHZlcnRleC5wb3NpdGlvbjtcblx0XHRcdHZhciBwb3NpdGlvbldvcmxkID0gdmVydGV4LnBvc2l0aW9uV29ybGQ7XG5cdFx0XHR2YXIgcG9zaXRpb25TY3JlZW4gPSB2ZXJ0ZXgucG9zaXRpb25TY3JlZW47XG5cblx0XHRcdHBvc2l0aW9uV29ybGQuY29weSggcG9zaXRpb24gKS5hcHBseU1hdHJpeDQoIF9tb2RlbE1hdHJpeCApO1xuXHRcdFx0cG9zaXRpb25TY3JlZW4uY29weSggcG9zaXRpb25Xb3JsZCApLmFwcGx5TWF0cml4NCggX3ZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdHZhciBpbnZXID0gMSAvIHBvc2l0aW9uU2NyZWVuLnc7XG5cblx0XHRcdHBvc2l0aW9uU2NyZWVuLnggKj0gaW52Vztcblx0XHRcdHBvc2l0aW9uU2NyZWVuLnkgKj0gaW52Vztcblx0XHRcdHBvc2l0aW9uU2NyZWVuLnogKj0gaW52VztcblxuXHRcdFx0dmVydGV4LnZpc2libGUgPSBwb3NpdGlvblNjcmVlbi54ID49IC0gMSAmJiBwb3NpdGlvblNjcmVlbi54IDw9IDEgJiZcblx0XHRcdFx0XHQgcG9zaXRpb25TY3JlZW4ueSA+PSAtIDEgJiYgcG9zaXRpb25TY3JlZW4ueSA8PSAxICYmXG5cdFx0XHRcdFx0IHBvc2l0aW9uU2NyZWVuLnogPj0gLSAxICYmIHBvc2l0aW9uU2NyZWVuLnogPD0gMTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hWZXJ0ZXgoIHgsIHksIHogKSB7XG5cblx0XHRcdF92ZXJ0ZXggPSBnZXROZXh0VmVydGV4SW5Qb29sKCk7XG5cdFx0XHRfdmVydGV4LnBvc2l0aW9uLnNldCggeCwgeSwgeiApO1xuXG5cdFx0XHRwcm9qZWN0VmVydGV4KCBfdmVydGV4ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwdXNoTm9ybWFsKCB4LCB5LCB6ICkge1xuXG5cdFx0XHRub3JtYWxzLnB1c2goIHgsIHksIHogKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hDb2xvciggciwgZywgYiApIHtcblxuXHRcdFx0Y29sb3JzLnB1c2goIHIsIGcsIGIgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hVdiggeCwgeSApIHtcblxuXHRcdFx0dXZzLnB1c2goIHgsIHkgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5KCB2MSwgdjIsIHYzICkge1xuXG5cdFx0XHRpZiAoIHYxLnZpc2libGUgPT09IHRydWUgfHwgdjIudmlzaWJsZSA9PT0gdHJ1ZSB8fCB2My52aXNpYmxlID09PSB0cnVlICkgcmV0dXJuIHRydWU7XG5cblx0XHRcdF9wb2ludHMzWyAwIF0gPSB2MS5wb3NpdGlvblNjcmVlbjtcblx0XHRcdF9wb2ludHMzWyAxIF0gPSB2Mi5wb3NpdGlvblNjcmVlbjtcblx0XHRcdF9wb2ludHMzWyAyIF0gPSB2My5wb3NpdGlvblNjcmVlbjtcblxuXHRcdFx0cmV0dXJuIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9ib3VuZGluZ0JveC5zZXRGcm9tUG9pbnRzKCBfcG9pbnRzMyApICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjaGVja0JhY2tmYWNlQ3VsbGluZyggdjEsIHYyLCB2MyApIHtcblxuXHRcdFx0cmV0dXJuICggKCB2My5wb3NpdGlvblNjcmVlbi54IC0gdjEucG9zaXRpb25TY3JlZW4ueCApICpcblx0XHRcdFx0ICAgICggdjIucG9zaXRpb25TY3JlZW4ueSAtIHYxLnBvc2l0aW9uU2NyZWVuLnkgKSAtXG5cdFx0XHRcdCAgICAoIHYzLnBvc2l0aW9uU2NyZWVuLnkgLSB2MS5wb3NpdGlvblNjcmVlbi55ICkgKlxuXHRcdFx0XHQgICAgKCB2Mi5wb3NpdGlvblNjcmVlbi54IC0gdjEucG9zaXRpb25TY3JlZW4ueCApICkgPCAwO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHVzaExpbmUoIGEsIGIgKSB7XG5cblx0XHRcdHZhciB2MSA9IF92ZXJ0ZXhQb29sWyBhIF07XG5cdFx0XHR2YXIgdjIgPSBfdmVydGV4UG9vbFsgYiBdO1xuXG5cdFx0XHQvLyBDbGlwXG5cblx0XHRcdHYxLnBvc2l0aW9uU2NyZWVuLmNvcHkoIHYxLnBvc2l0aW9uICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdFx0djIucG9zaXRpb25TY3JlZW4uY29weSggdjIucG9zaXRpb24gKS5hcHBseU1hdHJpeDQoIF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdGlmICggY2xpcExpbmUoIHYxLnBvc2l0aW9uU2NyZWVuLCB2Mi5wb3NpdGlvblNjcmVlbiApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdC8vIFBlcmZvcm0gdGhlIHBlcnNwZWN0aXZlIGRpdmlkZVxuXHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5tdWx0aXBseVNjYWxhciggMSAvIHYxLnBvc2l0aW9uU2NyZWVuLncgKTtcblx0XHRcdFx0djIucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoIDEgLyB2Mi5wb3NpdGlvblNjcmVlbi53ICk7XG5cblx0XHRcdFx0X2xpbmUgPSBnZXROZXh0TGluZUluUG9vbCgpO1xuXHRcdFx0XHRfbGluZS5pZCA9IG9iamVjdC5pZDtcblx0XHRcdFx0X2xpbmUudjEuY29weSggdjEgKTtcblx0XHRcdFx0X2xpbmUudjIuY29weSggdjIgKTtcblx0XHRcdFx0X2xpbmUueiA9IE1hdGgubWF4KCB2MS5wb3NpdGlvblNjcmVlbi56LCB2Mi5wb3NpdGlvblNjcmVlbi56ICk7XG5cdFx0XHRcdF9saW5lLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXG5cdFx0XHRcdF9saW5lLm1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdGlmICggb2JqZWN0Lm1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gVEhSRUUuVmVydGV4Q29sb3JzICkge1xuXG5cdFx0XHRcdFx0X2xpbmUudmVydGV4Q29sb3JzWyAwIF0uZnJvbUFycmF5KCBjb2xvcnMsIGEgKiAzICk7XG5cdFx0XHRcdFx0X2xpbmUudmVydGV4Q29sb3JzWyAxIF0uZnJvbUFycmF5KCBjb2xvcnMsIGIgKiAzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9saW5lICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hUcmlhbmdsZSggYSwgYiwgYyApIHtcblxuXHRcdFx0dmFyIHYxID0gX3ZlcnRleFBvb2xbIGEgXTtcblx0XHRcdHZhciB2MiA9IF92ZXJ0ZXhQb29sWyBiIF07XG5cdFx0XHR2YXIgdjMgPSBfdmVydGV4UG9vbFsgYyBdO1xuXG5cdFx0XHRpZiAoIGNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5KCB2MSwgdjIsIHYzICkgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IFRIUkVFLkRvdWJsZVNpZGUgfHwgY2hlY2tCYWNrZmFjZUN1bGxpbmcoIHYxLCB2MiwgdjMgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRfZmFjZSA9IGdldE5leHRGYWNlSW5Qb29sKCk7XG5cblx0XHRcdFx0X2ZhY2UuaWQgPSBvYmplY3QuaWQ7XG5cdFx0XHRcdF9mYWNlLnYxLmNvcHkoIHYxICk7XG5cdFx0XHRcdF9mYWNlLnYyLmNvcHkoIHYyICk7XG5cdFx0XHRcdF9mYWNlLnYzLmNvcHkoIHYzICk7XG5cdFx0XHRcdF9mYWNlLnogPSAoIHYxLnBvc2l0aW9uU2NyZWVuLnogKyB2Mi5wb3NpdGlvblNjcmVlbi56ICsgdjMucG9zaXRpb25TY3JlZW4ueiApIC8gMztcblx0XHRcdFx0X2ZhY2UucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRcdFx0Ly8gdXNlIGZpcnN0IHZlcnRleCBub3JtYWwgYXMgZmFjZSBub3JtYWxcblxuXHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5mcm9tQXJyYXkoIG5vcm1hbHMsIGEgKiAzICk7XG5cdFx0XHRcdF9mYWNlLm5vcm1hbE1vZGVsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgMzsgaSArKyApIHtcblxuXHRcdFx0XHRcdHZhciBub3JtYWwgPSBfZmFjZS52ZXJ0ZXhOb3JtYWxzTW9kZWxbIGkgXTtcblx0XHRcdFx0XHRub3JtYWwuZnJvbUFycmF5KCBub3JtYWxzLCBhcmd1bWVudHNbIGkgXSAqIDMgKTtcblx0XHRcdFx0XHRub3JtYWwuYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRcdHZhciB1diA9IF9mYWNlLnV2c1sgaSBdO1xuXHRcdFx0XHRcdHV2LmZyb21BcnJheSggdXZzLCBhcmd1bWVudHNbIGkgXSAqIDIgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2ZhY2UudmVydGV4Tm9ybWFsc0xlbmd0aCA9IDM7XG5cblx0XHRcdFx0X2ZhY2UubWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMucHVzaCggX2ZhY2UgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHNldE9iamVjdDogc2V0T2JqZWN0LFxuXHRcdFx0cHJvamVjdFZlcnRleDogcHJvamVjdFZlcnRleCxcblx0XHRcdGNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5OiBjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eSxcblx0XHRcdGNoZWNrQmFja2ZhY2VDdWxsaW5nOiBjaGVja0JhY2tmYWNlQ3VsbGluZyxcblx0XHRcdHB1c2hWZXJ0ZXg6IHB1c2hWZXJ0ZXgsXG5cdFx0XHRwdXNoTm9ybWFsOiBwdXNoTm9ybWFsLFxuXHRcdFx0cHVzaENvbG9yOiBwdXNoQ29sb3IsXG5cdFx0XHRwdXNoVXY6IHB1c2hVdixcblx0XHRcdHB1c2hMaW5lOiBwdXNoTGluZSxcblx0XHRcdHB1c2hUcmlhbmdsZTogcHVzaFRyaWFuZ2xlXG5cdFx0fTtcblxuXHR9O1xuXG5cdHZhciByZW5kZXJMaXN0ID0gbmV3IFJlbmRlckxpc3QoKTtcblxuXHRmdW5jdGlvbiBwcm9qZWN0T2JqZWN0KCBvYmplY3QgKSB7XG5cblx0XHRpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGlnaHQgKSB7XG5cblx0XHRcdF9yZW5kZXJEYXRhLmxpZ2h0cy5wdXNoKCBvYmplY3QgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggfHwgb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGluZSB8fCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5Qb2ludHMgKSB7XG5cblx0XHRcdGlmICggb2JqZWN0Lm1hdGVyaWFsLnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXHRcdFx0aWYgKCBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9PT0gdHJ1ZSAmJiBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KCBvYmplY3QgKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGFkZE9iamVjdCggb2JqZWN0ICk7XG5cblx0XHR9IGVsc2UgaWYgKCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGUgKSB7XG5cblx0XHRcdGlmICggb2JqZWN0Lm1hdGVyaWFsLnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXHRcdFx0aWYgKCBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9PT0gdHJ1ZSAmJiBfZnJ1c3R1bS5pbnRlcnNlY3RzU3ByaXRlKCBvYmplY3QgKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGFkZE9iamVjdCggb2JqZWN0ICk7XG5cblx0XHR9XG5cblx0XHR2YXIgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRwcm9qZWN0T2JqZWN0KCBjaGlsZHJlblsgaSBdICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZE9iamVjdCggb2JqZWN0ICkge1xuXG5cdFx0X29iamVjdCA9IGdldE5leHRPYmplY3RJblBvb2woKTtcblx0XHRfb2JqZWN0LmlkID0gb2JqZWN0LmlkO1xuXHRcdF9vYmplY3Qub2JqZWN0ID0gb2JqZWN0O1xuXG5cdFx0X3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBvYmplY3QubWF0cml4V29ybGQgKTtcblx0XHRfdmVjdG9yMy5hcHBseU1hdHJpeDQoIF92aWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdF9vYmplY3QueiA9IF92ZWN0b3IzLno7XG5cdFx0X29iamVjdC5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblxuXHRcdF9yZW5kZXJEYXRhLm9iamVjdHMucHVzaCggX29iamVjdCApO1xuXG5cdH1cblxuXHR0aGlzLnByb2plY3RTY2VuZSA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSwgc29ydE9iamVjdHMsIHNvcnRFbGVtZW50cyApIHtcblxuXHRcdF9mYWNlQ291bnQgPSAwO1xuXHRcdF9saW5lQ291bnQgPSAwO1xuXHRcdF9zcHJpdGVDb3VudCA9IDA7XG5cblx0XHRfcmVuZGVyRGF0YS5lbGVtZW50cy5sZW5ndGggPSAwO1xuXG5cdFx0aWYgKCBzY2VuZS5hdXRvVXBkYXRlID09PSB0cnVlICkgc2NlbmUudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRpZiAoIGNhbWVyYS5wYXJlbnQgPT09IG51bGwgKSBjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdF92aWV3TWF0cml4LmNvcHkoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTtcblx0XHRfdmlld1Byb2plY3Rpb25NYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggY2FtZXJhLnByb2plY3Rpb25NYXRyaXgsIF92aWV3TWF0cml4ICk7XG5cblx0XHRfZnJ1c3R1bS5zZXRGcm9tTWF0cml4KCBfdmlld1Byb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdC8vXG5cblx0XHRfb2JqZWN0Q291bnQgPSAwO1xuXG5cdFx0X3JlbmRlckRhdGEub2JqZWN0cy5sZW5ndGggPSAwO1xuXHRcdF9yZW5kZXJEYXRhLmxpZ2h0cy5sZW5ndGggPSAwO1xuXG5cdFx0cHJvamVjdE9iamVjdCggc2NlbmUgKTtcblxuXHRcdGlmICggc29ydE9iamVjdHMgPT09IHRydWUgKSB7XG5cblx0XHRcdF9yZW5kZXJEYXRhLm9iamVjdHMuc29ydCggcGFpbnRlclNvcnQgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHR2YXIgb2JqZWN0cyA9IF9yZW5kZXJEYXRhLm9iamVjdHM7XG5cblx0XHRmb3IgKCB2YXIgbyA9IDAsIG9sID0gb2JqZWN0cy5sZW5ndGg7IG8gPCBvbDsgbyArKyApIHtcblxuXHRcdFx0dmFyIG9iamVjdCA9IG9iamVjdHNbIG8gXS5vYmplY3Q7XG5cdFx0XHR2YXIgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cblx0XHRcdHJlbmRlckxpc3Quc2V0T2JqZWN0KCBvYmplY3QgKTtcblxuXHRcdFx0X21vZGVsTWF0cml4ID0gb2JqZWN0Lm1hdHJpeFdvcmxkO1xuXG5cdFx0XHRfdmVydGV4Q291bnQgPSAwO1xuXG5cdFx0XHRpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggKSB7XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHZhciBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZXMucG9zaXRpb24gPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XG5cblx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hWZXJ0ZXgoIHBvc2l0aW9uc1sgaSBdLCBwb3NpdGlvbnNbIGkgKyAxIF0sIHBvc2l0aW9uc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLm5vcm1hbCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLmFycmF5O1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBub3JtYWxzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hOb3JtYWwoIG5vcm1hbHNbIGkgXSwgbm9ybWFsc1sgaSArIDEgXSwgbm9ybWFsc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZXMudXYgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0dmFyIHV2cyA9IGF0dHJpYnV0ZXMudXYuYXJyYXk7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IHV2cy5sZW5ndGg7IGkgPCBsOyBpICs9IDIgKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoVXYoIHV2c1sgaSBdLCB1dnNbIGkgKyAxIF0gKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0dmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRleC5hcnJheTtcblxuXHRcdFx0XHRcdFx0aWYgKCBncm91cHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgZyA9IDA7IGcgPCBncm91cHMubGVuZ3RoOyBnICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdyb3VwID0gZ3JvdXBzWyBnIF07XG5cblx0XHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IGdyb3VwLnN0YXJ0LCBsID0gZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoVHJpYW5nbGUoIGluZGljZXNbIGkgXSwgaW5kaWNlc1sgaSArIDEgXSwgaW5kaWNlc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbmRpY2VzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFRyaWFuZ2xlKCBpbmRpY2VzWyBpIF0sIGluZGljZXNbIGkgKyAxIF0sIGluZGljZXNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IHBvc2l0aW9ucy5sZW5ndGggLyAzOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFRyaWFuZ2xlKCBpLCBpICsgMSwgaSArIDIgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5IGluc3RhbmNlb2YgVEhSRUUuR2VvbWV0cnkgKSB7XG5cblx0XHRcdFx0XHR2YXIgdmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNlcztcblx0XHRcdFx0XHR2YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlcztcblx0XHRcdFx0XHR2YXIgZmFjZVZlcnRleFV2cyA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIDAgXTtcblxuXHRcdFx0XHRcdF9ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KCBfbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdHZhciBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdHZhciBpc011bHRpTWF0ZXJpYWwgPSBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApO1xuXG5cdFx0XHRcdFx0Zm9yICggdmFyIHYgPSAwLCB2bCA9IHZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICsrICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgdmVydGV4ID0gdmVydGljZXNbIHYgXTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvcjMuY29weSggdmVydGV4ICk7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0ZXJpYWwubW9ycGhUYXJnZXRzID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdHZhciBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7XG5cdFx0XHRcdFx0XHRcdHZhciBtb3JwaEluZmx1ZW5jZXMgPSBvYmplY3QubW9ycGhUYXJnZXRJbmZsdWVuY2VzO1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIHZhciB0ID0gMCwgdGwgPSBtb3JwaFRhcmdldHMubGVuZ3RoOyB0IDwgdGw7IHQgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzWyB0IF07XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoIGluZmx1ZW5jZSA9PT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRhcmdldCA9IG1vcnBoVGFyZ2V0c1sgdCBdO1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0YXJnZXRWZXJ0ZXggPSB0YXJnZXQudmVydGljZXNbIHYgXTtcblxuXHRcdFx0XHRcdFx0XHRcdF92ZWN0b3IzLnggKz0gKCB0YXJnZXRWZXJ0ZXgueCAtIHZlcnRleC54ICkgKiBpbmZsdWVuY2U7XG5cdFx0XHRcdFx0XHRcdFx0X3ZlY3RvcjMueSArPSAoIHRhcmdldFZlcnRleC55IC0gdmVydGV4LnkgKSAqIGluZmx1ZW5jZTtcblx0XHRcdFx0XHRcdFx0XHRfdmVjdG9yMy56ICs9ICggdGFyZ2V0VmVydGV4LnogLSB2ZXJ0ZXgueiApICogaW5mbHVlbmNlO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hWZXJ0ZXgoIF92ZWN0b3IzLngsIF92ZWN0b3IzLnksIF92ZWN0b3IzLnogKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAoIHZhciBmID0gMCwgZmwgPSBmYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHtcblxuXHRcdFx0XHRcdFx0dmFyIGZhY2UgPSBmYWNlc1sgZiBdO1xuXG5cdFx0XHRcdFx0XHRtYXRlcmlhbCA9IGlzTXVsdGlNYXRlcmlhbCA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHQgPyBvYmplY3QubWF0ZXJpYWxbIGZhY2UubWF0ZXJpYWxJbmRleCBdXG5cdFx0XHRcdFx0XHRcdCA6IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRlcmlhbCA9PT0gdW5kZWZpbmVkICkgY29udGludWU7XG5cblx0XHRcdFx0XHRcdHZhciBzaWRlID0gbWF0ZXJpYWwuc2lkZTtcblxuXHRcdFx0XHRcdFx0dmFyIHYxID0gX3ZlcnRleFBvb2xbIGZhY2UuYSBdO1xuXHRcdFx0XHRcdFx0dmFyIHYyID0gX3ZlcnRleFBvb2xbIGZhY2UuYiBdO1xuXHRcdFx0XHRcdFx0dmFyIHYzID0gX3ZlcnRleFBvb2xbIGZhY2UuYyBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHJlbmRlckxpc3QuY2hlY2tUcmlhbmdsZVZpc2liaWxpdHkoIHYxLCB2MiwgdjMgKSA9PT0gZmFsc2UgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0dmFyIHZpc2libGUgPSByZW5kZXJMaXN0LmNoZWNrQmFja2ZhY2VDdWxsaW5nKCB2MSwgdjIsIHYzICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2lkZSAhPT0gVEhSRUUuRG91YmxlU2lkZSApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHNpZGUgPT09IFRIUkVFLkZyb250U2lkZSAmJiB2aXNpYmxlID09PSBmYWxzZSApIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNpZGUgPT09IFRIUkVFLkJhY2tTaWRlICYmIHZpc2libGUgPT09IHRydWUgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRfZmFjZSA9IGdldE5leHRGYWNlSW5Qb29sKCk7XG5cblx0XHRcdFx0XHRcdF9mYWNlLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0XHRcdFx0X2ZhY2UudjEuY29weSggdjEgKTtcblx0XHRcdFx0XHRcdF9mYWNlLnYyLmNvcHkoIHYyICk7XG5cdFx0XHRcdFx0XHRfZmFjZS52My5jb3B5KCB2MyApO1xuXG5cdFx0XHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5jb3B5KCBmYWNlLm5vcm1hbCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHZpc2libGUgPT09IGZhbHNlICYmICggc2lkZSA9PT0gVEhSRUUuQmFja1NpZGUgfHwgc2lkZSA9PT0gVEhSRUUuRG91YmxlU2lkZSApICkge1xuXG5cdFx0XHRcdFx0XHRcdF9mYWNlLm5vcm1hbE1vZGVsLm5lZ2F0ZSgpO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdF9mYWNlLm5vcm1hbE1vZGVsLmFwcGx5TWF0cml4MyggX25vcm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdFx0XHR2YXIgZmFjZVZlcnRleE5vcm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBuID0gMCwgbmwgPSBNYXRoLm1pbiggZmFjZVZlcnRleE5vcm1hbHMubGVuZ3RoLCAzICk7IG4gPCBubDsgbiArKyApIHtcblxuXHRcdFx0XHRcdFx0XHR2YXIgbm9ybWFsTW9kZWwgPSBfZmFjZS52ZXJ0ZXhOb3JtYWxzTW9kZWxbIG4gXTtcblx0XHRcdFx0XHRcdFx0bm9ybWFsTW9kZWwuY29weSggZmFjZVZlcnRleE5vcm1hbHNbIG4gXSApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdmlzaWJsZSA9PT0gZmFsc2UgJiYgKCBzaWRlID09PSBUSFJFRS5CYWNrU2lkZSB8fCBzaWRlID09PSBUSFJFRS5Eb3VibGVTaWRlICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRub3JtYWxNb2RlbC5uZWdhdGUoKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bm9ybWFsTW9kZWwuYXBwbHlNYXRyaXgzKCBfbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X2ZhY2UudmVydGV4Tm9ybWFsc0xlbmd0aCA9IGZhY2VWZXJ0ZXhOb3JtYWxzLmxlbmd0aDtcblxuXHRcdFx0XHRcdFx0dmFyIHZlcnRleFV2cyA9IGZhY2VWZXJ0ZXhVdnNbIGYgXTtcblxuXHRcdFx0XHRcdFx0aWYgKCB2ZXJ0ZXhVdnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgdSA9IDA7IHUgPCAzOyB1ICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0X2ZhY2UudXZzWyB1IF0uY29weSggdmVydGV4VXZzWyB1IF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X2ZhY2UuY29sb3IgPSBmYWNlLmNvbG9yO1xuXHRcdFx0XHRcdFx0X2ZhY2UubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuXHRcdFx0XHRcdFx0X2ZhY2UueiA9ICggdjEucG9zaXRpb25TY3JlZW4ueiArIHYyLnBvc2l0aW9uU2NyZWVuLnogKyB2My5wb3NpdGlvblNjcmVlbi56ICkgLyAzO1xuXHRcdFx0XHRcdFx0X2ZhY2UucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRcdFx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9mYWNlICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5MaW5lICkge1xuXG5cdFx0XHRcdF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIF92aWV3UHJvamVjdGlvbk1hdHJpeCwgX21vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFZlcnRleCggcG9zaXRpb25zWyBpIF0sIHBvc2l0aW9uc1sgaSArIDEgXSwgcG9zaXRpb25zWyBpICsgMiBdICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmFyIGNvbG9ycyA9IGF0dHJpYnV0ZXMuY29sb3IuYXJyYXk7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gY29sb3JzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaENvbG9yKCBjb2xvcnNbIGkgXSwgY29sb3JzWyBpICsgMSBdLCBjb2xvcnNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0XHR2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGV4LmFycmF5O1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IGluZGljZXMubGVuZ3RoOyBpIDwgbDsgaSArPSAyICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoTGluZSggaW5kaWNlc1sgaSBdLCBpbmRpY2VzWyBpICsgMSBdICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHZhciBzdGVwID0gb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGluZVNlZ21lbnRzID8gMiA6IDE7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gKCBwb3NpdGlvbnMubGVuZ3RoIC8gMyApIC0gMTsgaSA8IGw7IGkgKz0gc3RlcCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaExpbmUoIGksIGkgKyAxICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciB2ZXJ0aWNlcyA9IG9iamVjdC5nZW9tZXRyeS52ZXJ0aWNlcztcblxuXHRcdFx0XHRcdGlmICggdmVydGljZXMubGVuZ3RoID09PSAwICkgY29udGludWU7XG5cblx0XHRcdFx0XHR2MSA9IGdldE5leHRWZXJ0ZXhJblBvb2woKTtcblx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5jb3B5KCB2ZXJ0aWNlc1sgMCBdICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0dmFyIHN0ZXAgPSBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5MaW5lU2VnbWVudHMgPyAyIDogMTtcblxuXHRcdFx0XHRcdGZvciAoIHZhciB2ID0gMSwgdmwgPSB2ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHtcblxuXHRcdFx0XHRcdFx0djEgPSBnZXROZXh0VmVydGV4SW5Qb29sKCk7XG5cdFx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5jb3B5KCB2ZXJ0aWNlc1sgdiBdICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoICggdiArIDEgKSAlIHN0ZXAgPiAwICkgY29udGludWU7XG5cblx0XHRcdFx0XHRcdHYyID0gX3ZlcnRleFBvb2xbIF92ZXJ0ZXhDb3VudCAtIDIgXTtcblxuXHRcdFx0XHRcdFx0X2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4uY29weSggdjEucG9zaXRpb25TY3JlZW4gKTtcblx0XHRcdFx0XHRcdF9jbGlwcGVkVmVydGV4MlBvc2l0aW9uU2NyZWVuLmNvcHkoIHYyLnBvc2l0aW9uU2NyZWVuICk7XG5cblx0XHRcdFx0XHRcdGlmICggY2xpcExpbmUoIF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuLCBfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbiApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFBlcmZvcm0gdGhlIHBlcnNwZWN0aXZlIGRpdmlkZVxuXHRcdFx0XHRcdFx0XHRfY2xpcHBlZFZlcnRleDFQb3NpdGlvblNjcmVlbi5tdWx0aXBseVNjYWxhciggMSAvIF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuLncgKTtcblx0XHRcdFx0XHRcdFx0X2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoIDEgLyBfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbi53ICk7XG5cblx0XHRcdFx0XHRcdFx0X2xpbmUgPSBnZXROZXh0TGluZUluUG9vbCgpO1xuXG5cdFx0XHRcdFx0XHRcdF9saW5lLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0XHRcdFx0XHRfbGluZS52MS5wb3NpdGlvblNjcmVlbi5jb3B5KCBfY2xpcHBlZFZlcnRleDFQb3NpdGlvblNjcmVlbiApO1xuXHRcdFx0XHRcdFx0XHRfbGluZS52Mi5wb3NpdGlvblNjcmVlbi5jb3B5KCBfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbiApO1xuXG5cdFx0XHRcdFx0XHRcdF9saW5lLnogPSBNYXRoLm1heCggX2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4ueiwgX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4ueiApO1xuXHRcdFx0XHRcdFx0XHRfbGluZS5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblxuXHRcdFx0XHRcdFx0XHRfbGluZS5tYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIG9iamVjdC5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPT09IFRIUkVFLlZlcnRleENvbG9ycyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdF9saW5lLnZlcnRleENvbG9yc1sgMCBdLmNvcHkoIG9iamVjdC5nZW9tZXRyeS5jb2xvcnNbIHYgXSApO1xuXHRcdFx0XHRcdFx0XHRcdF9saW5lLnZlcnRleENvbG9yc1sgMSBdLmNvcHkoIG9iamVjdC5nZW9tZXRyeS5jb2xvcnNbIHYgLSAxIF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMucHVzaCggX2xpbmUgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuUG9pbnRzICkge1xuXG5cdFx0XHRcdF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIF92aWV3UHJvamVjdGlvbk1hdHJpeCwgX21vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIHZlcnRpY2VzID0gb2JqZWN0Lmdlb21ldHJ5LnZlcnRpY2VzO1xuXG5cdFx0XHRcdFx0Zm9yICggdmFyIHYgPSAwLCB2bCA9IHZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICsrICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgdmVydGV4ID0gdmVydGljZXNbIHYgXTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvcjQuc2V0KCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56LCAxICk7XG5cdFx0XHRcdFx0XHRfdmVjdG9yNC5hcHBseU1hdHJpeDQoIF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdFx0XHRcdHB1c2hQb2ludCggX3ZlY3RvcjQsIG9iamVjdCwgY2FtZXJhICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcblxuXHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRfdmVjdG9yNC5zZXQoIHBvc2l0aW9uc1sgaSBdLCBwb3NpdGlvbnNbIGkgKyAxIF0sIHBvc2l0aW9uc1sgaSArIDIgXSwgMSApO1xuXHRcdFx0XHRcdFx0XHRfdmVjdG9yNC5hcHBseU1hdHJpeDQoIF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdFx0XHRcdFx0cHVzaFBvaW50KCBfdmVjdG9yNCwgb2JqZWN0LCBjYW1lcmEgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlICkge1xuXG5cdFx0XHRcdF92ZWN0b3I0LnNldCggX21vZGVsTWF0cml4LmVsZW1lbnRzWyAxMiBdLCBfbW9kZWxNYXRyaXguZWxlbWVudHNbIDEzIF0sIF9tb2RlbE1hdHJpeC5lbGVtZW50c1sgMTQgXSwgMSApO1xuXHRcdFx0XHRfdmVjdG9yNC5hcHBseU1hdHJpeDQoIF92aWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdHB1c2hQb2ludCggX3ZlY3RvcjQsIG9iamVjdCwgY2FtZXJhICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggc29ydEVsZW1lbnRzID09PSB0cnVlICkge1xuXG5cdFx0XHRfcmVuZGVyRGF0YS5lbGVtZW50cy5zb3J0KCBwYWludGVyU29ydCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9yZW5kZXJEYXRhO1xuXG5cdH07XG5cblx0ZnVuY3Rpb24gcHVzaFBvaW50KCBfdmVjdG9yNCwgb2JqZWN0LCBjYW1lcmEgKSB7XG5cblx0XHR2YXIgaW52VyA9IDEgLyBfdmVjdG9yNC53O1xuXG5cdFx0X3ZlY3RvcjQueiAqPSBpbnZXO1xuXG5cdFx0aWYgKCBfdmVjdG9yNC56ID49IC0gMSAmJiBfdmVjdG9yNC56IDw9IDEgKSB7XG5cblx0XHRcdF9zcHJpdGUgPSBnZXROZXh0U3ByaXRlSW5Qb29sKCk7XG5cdFx0XHRfc3ByaXRlLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0X3Nwcml0ZS54ID0gX3ZlY3RvcjQueCAqIGludlc7XG5cdFx0XHRfc3ByaXRlLnkgPSBfdmVjdG9yNC55ICogaW52Vztcblx0XHRcdF9zcHJpdGUueiA9IF92ZWN0b3I0Lno7XG5cdFx0XHRfc3ByaXRlLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXHRcdFx0X3Nwcml0ZS5vYmplY3QgPSBvYmplY3Q7XG5cblx0XHRcdF9zcHJpdGUucm90YXRpb24gPSBvYmplY3Qucm90YXRpb247XG5cblx0XHRcdF9zcHJpdGUuc2NhbGUueCA9IG9iamVjdC5zY2FsZS54ICogTWF0aC5hYnMoIF9zcHJpdGUueCAtICggX3ZlY3RvcjQueCArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAwIF0gKSAvICggX3ZlY3RvcjQudyArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAxMiBdICkgKTtcblx0XHRcdF9zcHJpdGUuc2NhbGUueSA9IG9iamVjdC5zY2FsZS55ICogTWF0aC5hYnMoIF9zcHJpdGUueSAtICggX3ZlY3RvcjQueSArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyA1IF0gKSAvICggX3ZlY3RvcjQudyArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAxMyBdICkgKTtcblxuXHRcdFx0X3Nwcml0ZS5tYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMucHVzaCggX3Nwcml0ZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBQb29sc1xuXG5cdGZ1bmN0aW9uIGdldE5leHRPYmplY3RJblBvb2woKSB7XG5cblx0XHRpZiAoIF9vYmplY3RDb3VudCA9PT0gX29iamVjdFBvb2xMZW5ndGggKSB7XG5cblx0XHRcdHZhciBvYmplY3QgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZU9iamVjdCgpO1xuXHRcdFx0X29iamVjdFBvb2wucHVzaCggb2JqZWN0ICk7XG5cdFx0XHRfb2JqZWN0UG9vbExlbmd0aCArKztcblx0XHRcdF9vYmplY3RDb3VudCArKztcblx0XHRcdHJldHVybiBvYmplY3Q7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX29iamVjdFBvb2xbIF9vYmplY3RDb3VudCArKyBdO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXROZXh0VmVydGV4SW5Qb29sKCkge1xuXG5cdFx0aWYgKCBfdmVydGV4Q291bnQgPT09IF92ZXJ0ZXhQb29sTGVuZ3RoICkge1xuXG5cdFx0XHR2YXIgdmVydGV4ID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblx0XHRcdF92ZXJ0ZXhQb29sLnB1c2goIHZlcnRleCApO1xuXHRcdFx0X3ZlcnRleFBvb2xMZW5ndGggKys7XG5cdFx0XHRfdmVydGV4Q291bnQgKys7XG5cdFx0XHRyZXR1cm4gdmVydGV4O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF92ZXJ0ZXhQb29sWyBfdmVydGV4Q291bnQgKysgXTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dEZhY2VJblBvb2woKSB7XG5cblx0XHRpZiAoIF9mYWNlQ291bnQgPT09IF9mYWNlUG9vbExlbmd0aCApIHtcblxuXHRcdFx0dmFyIGZhY2UgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZUZhY2UoKTtcblx0XHRcdF9mYWNlUG9vbC5wdXNoKCBmYWNlICk7XG5cdFx0XHRfZmFjZVBvb2xMZW5ndGggKys7XG5cdFx0XHRfZmFjZUNvdW50ICsrO1xuXHRcdFx0cmV0dXJuIGZhY2U7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX2ZhY2VQb29sWyBfZmFjZUNvdW50ICsrIF07XG5cblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dExpbmVJblBvb2woKSB7XG5cblx0XHRpZiAoIF9saW5lQ291bnQgPT09IF9saW5lUG9vbExlbmd0aCApIHtcblxuXHRcdFx0dmFyIGxpbmUgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZUxpbmUoKTtcblx0XHRcdF9saW5lUG9vbC5wdXNoKCBsaW5lICk7XG5cdFx0XHRfbGluZVBvb2xMZW5ndGggKys7XG5cdFx0XHRfbGluZUNvdW50ICsrO1xuXHRcdFx0cmV0dXJuIGxpbmU7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX2xpbmVQb29sWyBfbGluZUNvdW50ICsrIF07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5leHRTcHJpdGVJblBvb2woKSB7XG5cblx0XHRpZiAoIF9zcHJpdGVDb3VudCA9PT0gX3Nwcml0ZVBvb2xMZW5ndGggKSB7XG5cblx0XHRcdHZhciBzcHJpdGUgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVNwcml0ZSgpO1xuXHRcdFx0X3Nwcml0ZVBvb2wucHVzaCggc3ByaXRlICk7XG5cdFx0XHRfc3ByaXRlUG9vbExlbmd0aCArKztcblx0XHRcdF9zcHJpdGVDb3VudCArKztcblx0XHRcdHJldHVybiBzcHJpdGU7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX3Nwcml0ZVBvb2xbIF9zcHJpdGVDb3VudCArKyBdO1xuXG5cdH1cblxuXHQvL1xuXG5cdGZ1bmN0aW9uIHBhaW50ZXJTb3J0KCBhLCBiICkge1xuXG5cdFx0aWYgKCBhLnJlbmRlck9yZGVyICE9PSBiLnJlbmRlck9yZGVyICkge1xuXG5cdFx0XHRyZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7XG5cblx0XHR9IGVsc2UgaWYgKCBhLnogIT09IGIueiApIHtcblxuXHRcdFx0cmV0dXJuIGIueiAtIGEuejtcblxuXHRcdH0gZWxzZSBpZiAoIGEuaWQgIT09IGIuaWQgKSB7XG5cblx0XHRcdHJldHVybiBhLmlkIC0gYi5pZDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiAwO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjbGlwTGluZSggczEsIHMyICkge1xuXG5cdFx0dmFyIGFscGhhMSA9IDAsIGFscGhhMiA9IDEsXG5cblx0XHQvLyBDYWxjdWxhdGUgdGhlIGJvdW5kYXJ5IGNvb3JkaW5hdGUgb2YgZWFjaCB2ZXJ0ZXggZm9yIHRoZSBuZWFyIGFuZCBmYXIgY2xpcCBwbGFuZXMsXG5cdFx0Ly8gWiA9IC0xIGFuZCBaID0gKzEsIHJlc3BlY3RpdmVseS5cblxuXHRcdFx0YmMxbmVhciA9IHMxLnogKyBzMS53LFxuXHRcdFx0YmMybmVhciA9IHMyLnogKyBzMi53LFxuXHRcdFx0YmMxZmFyID0gLSBzMS56ICsgczEudyxcblx0XHRcdGJjMmZhciA9IC0gczIueiArIHMyLnc7XG5cblx0XHRpZiAoIGJjMW5lYXIgPj0gMCAmJiBiYzJuZWFyID49IDAgJiYgYmMxZmFyID49IDAgJiYgYmMyZmFyID49IDAgKSB7XG5cblx0XHRcdC8vIEJvdGggdmVydGljZXMgbGllIGVudGlyZWx5IHdpdGhpbiBhbGwgY2xpcCBwbGFuZXMuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdH0gZWxzZSBpZiAoICggYmMxbmVhciA8IDAgJiYgYmMybmVhciA8IDAgKSB8fCAoIGJjMWZhciA8IDAgJiYgYmMyZmFyIDwgMCApICkge1xuXG5cdFx0XHQvLyBCb3RoIHZlcnRpY2VzIGxpZSBlbnRpcmVseSBvdXRzaWRlIG9uZSBvZiB0aGUgY2xpcCBwbGFuZXMuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUaGUgbGluZSBzZWdtZW50IHNwYW5zIGF0IGxlYXN0IG9uZSBjbGlwIHBsYW5lLlxuXG5cdFx0XHRpZiAoIGJjMW5lYXIgPCAwICkge1xuXG5cdFx0XHRcdC8vIHYxIGxpZXMgb3V0c2lkZSB0aGUgbmVhciBwbGFuZSwgdjIgaW5zaWRlXG5cdFx0XHRcdGFscGhhMSA9IE1hdGgubWF4KCBhbHBoYTEsIGJjMW5lYXIgLyAoIGJjMW5lYXIgLSBiYzJuZWFyICkgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggYmMybmVhciA8IDAgKSB7XG5cblx0XHRcdFx0Ly8gdjIgbGllcyBvdXRzaWRlIHRoZSBuZWFyIHBsYW5lLCB2MSBpbnNpZGVcblx0XHRcdFx0YWxwaGEyID0gTWF0aC5taW4oIGFscGhhMiwgYmMxbmVhciAvICggYmMxbmVhciAtIGJjMm5lYXIgKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggYmMxZmFyIDwgMCApIHtcblxuXHRcdFx0XHQvLyB2MSBsaWVzIG91dHNpZGUgdGhlIGZhciBwbGFuZSwgdjIgaW5zaWRlXG5cdFx0XHRcdGFscGhhMSA9IE1hdGgubWF4KCBhbHBoYTEsIGJjMWZhciAvICggYmMxZmFyIC0gYmMyZmFyICkgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggYmMyZmFyIDwgMCApIHtcblxuXHRcdFx0XHQvLyB2MiBsaWVzIG91dHNpZGUgdGhlIGZhciBwbGFuZSwgdjIgaW5zaWRlXG5cdFx0XHRcdGFscGhhMiA9IE1hdGgubWluKCBhbHBoYTIsIGJjMWZhciAvICggYmMxZmFyIC0gYmMyZmFyICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGFscGhhMiA8IGFscGhhMSApIHtcblxuXHRcdFx0XHQvLyBUaGUgbGluZSBzZWdtZW50IHNwYW5zIHR3byBib3VuZGFyaWVzLCBidXQgaXMgb3V0c2lkZSBib3RoIG9mIHRoZW0uXG5cdFx0XHRcdC8vIChUaGlzIGNhbid0IGhhcHBlbiB3aGVuIHdlJ3JlIG9ubHkgY2xpcHBpbmcgYWdhaW5zdCBqdXN0IG5lYXIvZmFyIGJ1dCBnb29kXG5cdFx0XHRcdC8vICB0byBsZWF2ZSB0aGUgY2hlY2sgaGVyZSBmb3IgZnV0dXJlIHVzYWdlIGlmIG90aGVyIGNsaXAgcGxhbmVzIGFyZSBhZGRlZC4pXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHMxIGFuZCBzMiB2ZXJ0aWNlcyB0byBtYXRjaCB0aGUgY2xpcHBlZCBsaW5lIHNlZ21lbnQuXG5cdFx0XHRcdHMxLmxlcnAoIHMyLCBhbHBoYTEgKTtcblx0XHRcdFx0czIubGVycCggczEsIDEgLSBhbHBoYTIgKTtcblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxufTtcbiJdfQ== 2 + //# sourceMappingURL=canvas-renderer-and-projector.js.map
+1
docs/js/canvas-renderer-and-projector.js.map
··· 1 + {"version":3,"sources":["js/canvas-renderer-and-projector.js"],"names":["bgColor","THREE","SpriteCanvasMaterial","parameters","Material","this","type","Color","program","prototype","Object","create","constructor","clone","material","copy","color","CanvasRenderer","console","log","REVISION","_renderData","_lights","_v1","_v3y","_v3","_v1x","_diffuseColor","_uvs","_uv1x","_clearBox","Box2","_uv3y","_this","_projector","Projector","_canvas","_canvasWidth","width","_canvasWidthHalf","Math","_canvasHeight","_canvasHeightHalf","floor","_viewportX","_viewportHeight","_viewportY","_pixelRatio","_viewportWidth","alpha","_clearColor","_context","_contextGlobalAlpha","_contextGlobalCompositeOperation","_contextLineWidth","_clearAlpha","_contextLineCap","_contextStrokeStyle","_contextFillStyle","_contextLineJoin","_contextLineDash","_color","_lightColor","_emissiveColor","_patterns","_clipBox","_ambientLight","_directionalLights","_elemBox","_pointLights","_centroid","Vector3","_vector3","_normal","_normalViewMatrix","Matrix3","rotation","element","fillRect","opacity","restore","blending","scaleX","isSpriteCanvasMaterial","scaleY","scale","y","setFillStyle","getStyle","min","set","v1","x","dist","save","texture","map","pattern","isPointsMaterial","version","translate","undefined","canvas","bitmap","image","ox","offset","oy","height","sx","repeat","sy","cx","cy","setOpacity","setBlending","rotate","beginPath","moveTo","positionScreen","lineTo","vertexColors","colorStyle1","colorStyle2","setStrokeStyle","createLinearGradient","grad","addColorStop","stroke","expandByScalar","linewidth","size","_v2x","v2","_v2y","drawTriangle","_v1y","isLineBasicMaterial","setLineWidth","multiply","setLineJoin","linejoin","VertexColors","positionWorld","calculateLight","isMeshBasicMaterial","mapping","patternPath","envMap","vertexNormalsModel","_uv1y","exception","isLineDashedMaterial","gapSize","wireframe","setLineDash","renderFace3","v3","uv1","uv2","uv3","x0","y0","x1","y1","x2","y2","info","render","vertices","_v3x","closePath","isMeshPhongMaterial","isMeshStandardMaterial","emissive","FaceColors","setLineCap","linecap","add","divideScalar","position","normal","l","ll","light","textureToPattern","isDirectionalLight","matrixWorld","normalize","amount","multiplyScalar","lightPosition","setFromMatrixPosition","dot","subVectors","distanceTo","distance","normalModel","fill","strokePath","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","fillPath","isMeshLambertMaterial","UVMapping","uvs","SphericalReflectionMapping","applyMatrix3","repeatX","wrapS","_uv2x","mirrorX","_uv2y","mirrorY","wrapT","_uv3x","document","createElement","context","setTransform","isMeshNormalMaterial","z","addScalar","setRGB","repeatY","id","idet","u0","offsetX","offsetY","RepeatWrapping","MirroredRepeatWrapping","det","e","v0","getContext","a","drawImage","createPattern","onUpdate","pixels","u1","u2","value","b","c","d","f","globalCompositeOperation","MultiplyBlending","lineWidth","transform","expand","RenderableFace","RenderableVertex","globalAlpha","NormalBlending","vertex","SubtractiveBlending","RenderableLine","RenderableSprite","lineCap","_objectCount","_vertexCount","_vertexPoolLength","_linePool","_sprite","_spritePool","_points3","Array","_viewProjectionMatrix","_modelViewProjectionMatrix","length","vector","project","domElement","autoClear","sortElements","faces","getContextAttributes","updateStyle","style","setViewport","setClearColorHex","setScissorTest","setClearColor","hex","getClearColor","max","warn","getMaxAnisotropy","clear","isEmpty","intersect","makeEmpty","clearRect","clearColor","clearDepth","clearStencil","background","r","g","_elements","scene","camera","isCamera","isColor","renderSprite","_v2","projectScene","elements","setFromPoints","intersectsBox","matrixWorldInverse","lightColor","isAmbientLight","isPointLight","calculateLights","renderLine","overdraw","union","error","RenderableObject","_vertex","object","projectVertex","renderOrder","pushUv","vertexNormalsLength","checkTriangleVisibility","visible","Vector2","Vector4","_vertexPool","applyMatrix4","_line","getNextLineInPool","pushTriangle","side","_face","_object","_lineCount","_spriteCount","_objectPool","_objectPoolLength","fromArray","_facePool","normalMatrix","_linePoolLength","_spritePoolLength","i","_vector4","uv","arguments","_boundingBox","Box3","_viewMatrix","Matrix4","_normalMatrix","setObject","Frustum","checkBackfaceCulling","unprojectVector","lights","renderList","normals","frustumCulled","colors","addObject","children","objects","push","_modelMatrix","_faceCount","w","invW","autoUpdate","multiplyMatrices","projectionMatrix","Mesh","geometry","attributes","positions","projectObject","getNormalMatrix","fl","pushVertex","pushNormal","sort","pushColor","pushLine","clipLine","index","indices","groups","group","start","Geometry","faceVertexUvs","morphTargets","t","tl","pushPoint","sprite","getNextSpriteInPool","abs","getNextVertexInPool","getNextFaceInPool","_facePoolLength","face","line","painterSort","s1","s2","alpha1","alpha2","bc1near","bc2near","bc1far","bc2far","lerp","sortObjects","_frustum","setFromMatrix","Light","BackSide","Line","Points","intersectsObject","Sprite","intersectsSprite","o","BufferGeometry","array","step","_clippedVertex1PositionScreen","count","v","vl","isMultiMaterial","isArray","influence","morphInfluences","targetVertex","materialIndex","getNextObjectInPool","DoubleSide","faceVertexNormals","vertexNormals","n","nl","vertexUvs","u","LineSegments","_clippedVertex2PositionScreen"],"mappings":"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","file":"canvas-renderer-and-projector.js","sourcesContent":["// minOnSave: true, minifier: uglify-js\nvar bgColor = 0xffffff\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nTHREE.SpriteCanvasMaterial = function ( parameters ) {\n\n\tTHREE.Material.call( this );\n\n\tthis.type = 'SpriteCanvasMaterial';\n\n\tthis.color = new THREE.Color( 0xffffff );\n\tthis.program = function () {};\n\n\tthis.setValues( parameters );\n\n};\n\nTHREE.SpriteCanvasMaterial.prototype = Object.create( THREE.Material.prototype );\nTHREE.SpriteCanvasMaterial.prototype.constructor = THREE.SpriteCanvasMaterial;\nTHREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial = true;\n\nTHREE.SpriteCanvasMaterial.prototype.clone = function () {\n\n\tvar material = new THREE.SpriteCanvasMaterial();\n\n\tmaterial.copy( this );\n\tmaterial.color.copy( this.color );\n\tmaterial.program = this.program;\n\n\treturn material;\n\n};\n\n//\n\nTHREE.CanvasRenderer = function ( parameters ) {\n\n\tconsole.log( 'THREE.CanvasRenderer', THREE.REVISION );\n\n\tparameters = parameters || {};\n\n\tvar _this = this,\n\t\t_renderData, _elements, _lights,\n\t\t_projector = new THREE.Projector(),\n\n\t\t_canvas = parameters.canvas !== undefined\n\t\t\t\t ? parameters.canvas\n\t\t\t\t : document.createElement( 'canvas' ),\n\n\t\t_canvasWidth = _canvas.width,\n\t\t_canvasHeight = _canvas.height,\n\t\t_canvasWidthHalf = Math.floor( _canvasWidth / 2 ),\n\t\t_canvasHeightHalf = Math.floor( _canvasHeight / 2 ),\n\n\t\t_viewportX = 0,\n\t\t_viewportY = 0,\n\t\t_viewportWidth = _canvasWidth,\n\t\t_viewportHeight = _canvasHeight,\n\n\t\t_pixelRatio = 1,\n\n\t\t_context = _canvas.getContext( '2d', {\n\t\t\talpha: parameters.alpha === true\n\t\t} ),\n\n\t\t_clearColor = new THREE.Color( bgColor ),\n\t\t_clearAlpha = parameters.alpha === true ? 0 : 1,\n\n\t\t_contextGlobalAlpha = 1,\n\t\t_contextGlobalCompositeOperation = 0,\n\t\t_contextStrokeStyle = null,\n\t\t_contextFillStyle = null,\n\t\t_contextLineWidth = null,\n\t\t_contextLineCap = null,\n\t\t_contextLineJoin = null,\n\t\t_contextLineDash = [],\n\n\t\t_v1, _v2, _v3,\n\n\t\t_v1x, _v1y, _v2x, _v2y, _v3x, _v3y,\n\n\t\t_color = new THREE.Color(),\n\n\t\t_diffuseColor = new THREE.Color(),\n\t\t_emissiveColor = new THREE.Color(),\n\n\t\t_lightColor = new THREE.Color(),\n\n\t\t_patterns = {},\n\n\t\t_uvs,\n\t\t_uv1x, _uv1y, _uv2x, _uv2y, _uv3x, _uv3y,\n\n\t\t_clipBox = new THREE.Box2(),\n\t\t_clearBox = new THREE.Box2(),\n\t\t_elemBox = new THREE.Box2(),\n\n\t\t_ambientLight = new THREE.Color(),\n\t\t_directionalLights = new THREE.Color(),\n\t\t_pointLights = new THREE.Color(),\n\n\t\t_vector3 = new THREE.Vector3(), // Needed for PointLight\n\t\t_centroid = new THREE.Vector3(),\n\t\t_normal = new THREE.Vector3(),\n\t\t_normalViewMatrix = new THREE.Matrix3();\n\n\t/* TODO\n\t_canvas.mozImageSmoothingEnabled = false;\n\t_canvas.webkitImageSmoothingEnabled = false;\n\t_canvas.msImageSmoothingEnabled = false;\n\t_canvas.imageSmoothingEnabled = false;\n\t*/\n\n\t// dash+gap fallbacks for Firefox and everything else\n\n\tif ( _context.setLineDash === undefined ) {\n\n\t\t_context.setLineDash = function () {};\n\n\t}\n\n\tthis.domElement = _canvas;\n\n\tthis.autoClear = true;\n\tthis.sortObjects = true;\n\tthis.sortElements = true;\n\n\tthis.info = {\n\n\t\trender: {\n\n\t\t\tvertices: 0,\n\t\t\tfaces: 0\n\n\t\t}\n\n\t};\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _context;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _context.getContextAttributes();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value !== undefined ) _pixelRatio = value;\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\t_canvasWidth = width * _pixelRatio;\n\t\t_canvasHeight = height * _pixelRatio;\n\n\t\t_canvas.width = _canvasWidth;\n\t\t_canvas.height = _canvasHeight;\n\n\t\t_canvasWidthHalf = Math.floor( _canvasWidth / 2 );\n\t\t_canvasHeightHalf = Math.floor( _canvasHeight / 2 );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\t_clipBox.min.set( - _canvasWidthHalf, - _canvasHeightHalf );\n\t\t_clipBox.max.set( _canvasWidthHalf, _canvasHeightHalf );\n\n\t\t_clearBox.min.set( - _canvasWidthHalf, - _canvasHeightHalf );\n\t\t_clearBox.max.set( _canvasWidthHalf, _canvasHeightHalf );\n\n\t\t_contextGlobalAlpha = 1;\n\t\t_contextGlobalCompositeOperation = 0;\n\t\t_contextStrokeStyle = null;\n\t\t_contextFillStyle = null;\n\t\t_contextLineWidth = null;\n\t\t_contextLineCap = null;\n\t\t_contextLineJoin = null;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewportX = x * _pixelRatio;\n\t\t_viewportY = y * _pixelRatio;\n\n\t\t_viewportWidth = width * _pixelRatio;\n\t\t_viewportHeight = height * _pixelRatio;\n\n\t};\n\n\tthis.setScissor = function () {};\n\tthis.setScissorTest = function () {};\n\n\tthis.setClearColor = function ( color, alpha ) {\n\n\t\t_clearColor.set( color );\n\t\t_clearAlpha = alpha !== undefined ? alpha : 1;\n\n\t\t_clearBox.min.set( - _canvasWidthHalf, - _canvasHeightHalf );\n\t\t_clearBox.max.set( _canvasWidthHalf, _canvasHeightHalf );\n\n\t};\n\n\tthis.setClearColorHex = function ( hex, alpha ) {\n\n\t\tconsole.warn( 'THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.' );\n\t\tthis.setClearColor( hex, alpha );\n\n\t};\n\n\tthis.getClearColor = function () {\n\n\t\treturn _clearColor;\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn _clearAlpha;\n\n\t};\n\n\tthis.getMaxAnisotropy = function () {\n\n\t\treturn 0;\n\n\t};\n\n\tthis.clear = function () {\n\n\t\tif ( _clearBox.isEmpty() === false ) {\n\n\t\t\t_clearBox.intersect( _clipBox );\n\t\t\t_clearBox.expandByScalar( 2 );\n\n\t\t\t_clearBox.min.x = _clearBox.min.x + _canvasWidthHalf;\n\t\t\t_clearBox.min.y = - _clearBox.min.y + _canvasHeightHalf;\t\t// higher y value !\n\t\t\t_clearBox.max.x = _clearBox.max.x + _canvasWidthHalf;\n\t\t\t_clearBox.max.y = - _clearBox.max.y + _canvasHeightHalf;\t\t// lower y value !\n\n\t\t\tif ( _clearAlpha < 1 ) {\n\n\t\t\t\t_context.clearRect(\n\t\t\t\t\t_clearBox.min.x | 0,\n\t\t\t\t\t_clearBox.max.y | 0,\n\t\t\t\t\t( _clearBox.max.x - _clearBox.min.x ) | 0,\n\t\t\t\t\t( _clearBox.min.y - _clearBox.max.y ) | 0\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( _clearAlpha > 0 ) {\n\n\t\t\t\tsetOpacity( 1 );\n\t\t\t\tsetBlending( THREE.NormalBlending );\n\n\t\t\t\tsetFillStyle( 'rgba(' + Math.floor( _clearColor.r * 255 ) + ',' + Math.floor( _clearColor.g * 255 ) + ',' + Math.floor( _clearColor.b * 255 ) + ',' + _clearAlpha + ')' );\n\n\t\t\t\t_context.fillRect(\n\t\t\t\t\t_clearBox.min.x | 0,\n\t\t\t\t\t_clearBox.max.y | 0,\n\t\t\t\t\t( _clearBox.max.x - _clearBox.min.x ) | 0,\n\t\t\t\t\t( _clearBox.min.y - _clearBox.max.y ) | 0\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\t_clearBox.makeEmpty();\n\n\t\t}\n\n\t};\n\n\t// compatibility\n\n\tthis.clearColor = function () {};\n\tthis.clearDepth = function () {};\n\tthis.clearStencil = function () {};\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera.isCamera === undefined ) {\n\n\t\t\tconsole.error( 'THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar background = scene.background;\n\n\t\tif ( background && background.isColor ) {\n\n\t\t\tsetOpacity( 1 );\n\t\t\tsetBlending( THREE.NormalBlending );\n\n\t\t\tsetFillStyle( background.getStyle() );\n\t\t\t_context.fillRect( 0, 0, _canvasWidth, _canvasHeight );\n\n\t\t} else if ( this.autoClear === true ) {\n\n\t\t\tthis.clear();\n\n\t\t}\n\n\t\t_this.info.render.vertices = 0;\n\t\t_this.info.render.faces = 0;\n\n\t\t_context.setTransform( _viewportWidth / _canvasWidth, 0, 0, - _viewportHeight / _canvasHeight, _viewportX, _canvasHeight - _viewportY );\n\t\t_context.translate( _canvasWidthHalf, _canvasHeightHalf );\n\n\t\t_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );\n\t\t_elements = _renderData.elements;\n\t\t_lights = _renderData.lights;\n\n\t\t_normalViewMatrix.getNormalMatrix( camera.matrixWorldInverse );\n\n\t\t/* DEBUG\n\t\tsetFillStyle( 'rgba( 0, 255, 255, 0.5 )' );\n\t\t_context.fillRect( _clipBox.min.x, _clipBox.min.y, _clipBox.max.x - _clipBox.min.x, _clipBox.max.y - _clipBox.min.y );\n\t\t*/\n\n\t\tcalculateLights();\n\n\t\tfor ( var e = 0, el = _elements.length; e < el; e ++ ) {\n\n\t\t\tvar element = _elements[ e ];\n\n\t\t\tvar material = element.material;\n\n\t\t\tif ( material === undefined || material.opacity === 0 ) continue;\n\n\t\t\t_elemBox.makeEmpty();\n\n\t\t\tif ( element instanceof THREE.RenderableSprite ) {\n\n\t\t\t\t_v1 = element;\n\t\t\t\t_v1.x *= _canvasWidthHalf; _v1.y *= _canvasHeightHalf;\n\n\t\t\t\trenderSprite( _v1, element, material );\n\n\t\t\t} else if ( element instanceof THREE.RenderableLine ) {\n\n\t\t\t\t_v1 = element.v1; _v2 = element.v2;\n\n\t\t\t\t_v1.positionScreen.x *= _canvasWidthHalf; _v1.positionScreen.y *= _canvasHeightHalf;\n\t\t\t\t_v2.positionScreen.x *= _canvasWidthHalf; _v2.positionScreen.y *= _canvasHeightHalf;\n\n\t\t\t\t_elemBox.setFromPoints( [\n\t\t\t\t\t_v1.positionScreen,\n\t\t\t\t\t_v2.positionScreen\n\t\t\t\t] );\n\n\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\trenderLine( _v1, _v2, element, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( element instanceof THREE.RenderableFace ) {\n\n\t\t\t\t_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;\n\n\t\t\t\tif ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;\n\t\t\t\tif ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;\n\t\t\t\tif ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;\n\n\t\t\t\t_v1.positionScreen.x *= _canvasWidthHalf; _v1.positionScreen.y *= _canvasHeightHalf;\n\t\t\t\t_v2.positionScreen.x *= _canvasWidthHalf; _v2.positionScreen.y *= _canvasHeightHalf;\n\t\t\t\t_v3.positionScreen.x *= _canvasWidthHalf; _v3.positionScreen.y *= _canvasHeightHalf;\n\n\t\t\t\tif ( material.overdraw > 0 ) {\n\n\t\t\t\t\texpand( _v1.positionScreen, _v2.positionScreen, material.overdraw );\n\t\t\t\t\texpand( _v2.positionScreen, _v3.positionScreen, material.overdraw );\n\t\t\t\t\texpand( _v3.positionScreen, _v1.positionScreen, material.overdraw );\n\n\t\t\t\t}\n\n\t\t\t\t_elemBox.setFromPoints( [\n\t\t\t\t\t_v1.positionScreen,\n\t\t\t\t\t_v2.positionScreen,\n\t\t\t\t\t_v3.positionScreen\n\t\t\t\t] );\n\n\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\trenderFace3( _v1, _v2, _v3, 0, 1, 2, element, material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* DEBUG\n\t\t\tsetLineWidth( 1 );\n\t\t\tsetStrokeStyle( 'rgba( 0, 255, 0, 0.5 )' );\n\t\t\t_context.strokeRect( _elemBox.min.x, _elemBox.min.y, _elemBox.max.x - _elemBox.min.x, _elemBox.max.y - _elemBox.min.y );\n\t\t\t*/\n\n\t\t\t_clearBox.union( _elemBox );\n\n\t\t}\n\n\t\t/* DEBUG\n\t\tsetLineWidth( 1 );\n\t\tsetStrokeStyle( 'rgba( 255, 0, 0, 0.5 )' );\n\t\t_context.strokeRect( _clearBox.min.x, _clearBox.min.y, _clearBox.max.x - _clearBox.min.x, _clearBox.max.y - _clearBox.min.y );\n\t\t*/\n\n\t\t_context.setTransform( 1, 0, 0, 1, 0, 0 );\n\n\t};\n\n\t//\n\n\tfunction calculateLights() {\n\n\t\t_ambientLight.setRGB( 0, 0, 0 );\n\t\t_directionalLights.setRGB( 0, 0, 0 );\n\t\t_pointLights.setRGB( 0, 0, 0 );\n\n\t\tfor ( var l = 0, ll = _lights.length; l < ll; l ++ ) {\n\n\t\t\tvar light = _lights[ l ];\n\t\t\tvar lightColor = light.color;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t_ambientLight.add( lightColor );\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t// for sprites\n\n\t\t\t\t_directionalLights.add( lightColor );\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t// for sprites\n\n\t\t\t\t_pointLights.add( lightColor );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction calculateLight( position, normal, color ) {\n\n\t\tfor ( var l = 0, ll = _lights.length; l < ll; l ++ ) {\n\n\t\t\tvar light = _lights[ l ];\n\n\t\t\t_lightColor.copy( light.color );\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tvar lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();\n\n\t\t\t\tvar amount = normal.dot( lightPosition );\n\n\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\tamount *= light.intensity;\n\n\t\t\t\tcolor.add( _lightColor.multiplyScalar( amount ) );\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tvar lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tvar amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );\n\n\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\tamount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) / light.distance, 1 );\n\n\t\t\t\tif ( amount == 0 ) continue;\n\n\t\t\t\tamount *= light.intensity;\n\n\t\t\t\tcolor.add( _lightColor.multiplyScalar( amount ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderSprite( v1, element, material ) {\n\n\t\tsetOpacity( material.opacity );\n\t\tsetBlending( material.blending );\n\n\t\tvar scaleX = element.scale.x * _canvasWidthHalf;\n\t\tvar scaleY = element.scale.y * _canvasHeightHalf;\n\n\t\tvar dist = Math.sqrt( scaleX * scaleX + scaleY * scaleY ); // allow for rotated sprite\n\t\t_elemBox.min.set( v1.x - dist, v1.y - dist );\n\t\t_elemBox.max.set( v1.x + dist, v1.y + dist );\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tvar texture = material.map;\n\n\t\t\tif ( texture !== null ) {\n\n\t\t\t\tvar pattern = _patterns[ texture.id ];\n\n\t\t\t\tif ( pattern === undefined || pattern.version !== texture.version ) {\n\n\t\t\t\t\tpattern = textureToPattern( texture );\n\t\t\t\t\t_patterns[ texture.id ] = pattern;\n\n\t\t\t\t}\n\n\t\t\t\tif ( pattern.canvas !== undefined ) {\n\n\t\t\t\t\tsetFillStyle( pattern.canvas );\n\n\t\t\t\t\tvar bitmap = texture.image;\n\n\t\t\t\t\tvar ox = bitmap.width * texture.offset.x;\n\t\t\t\t\tvar oy = bitmap.height * texture.offset.y;\n\n\t\t\t\t\tvar sx = bitmap.width * texture.repeat.x;\n\t\t\t\t\tvar sy = bitmap.height * texture.repeat.y;\n\n\t\t\t\t\tvar cx = scaleX / sx;\n\t\t\t\t\tvar cy = scaleY / sy;\n\n\t\t\t\t\t_context.save();\n\t\t\t\t\t_context.translate( v1.x, v1.y );\n\t\t\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\n\t\t\t\t\t_context.translate( - scaleX / 2, - scaleY / 2 );\n\t\t\t\t\t_context.scale( cx, cy );\n\t\t\t\t\t_context.translate( - ox, - oy );\n\t\t\t\t\t_context.fillRect( ox, oy, sx, sy );\n\t\t\t\t\t_context.restore();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// no texture\n\n\t\t\t\tsetFillStyle( material.color.getStyle() );\n\n\t\t\t\t_context.save();\n\t\t\t\t_context.translate( v1.x, v1.y );\n\t\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\n\t\t\t\t_context.scale( scaleX, - scaleY );\n\t\t\t\t_context.fillRect( - 0.5, - 0.5, 1, 1 );\n\t\t\t\t_context.restore();\n\n\t\t\t}\n\n\t\t} else if ( material.isSpriteCanvasMaterial ) {\n\n\t\t\tsetStrokeStyle( material.color.getStyle() );\n\t\t\tsetFillStyle( material.color.getStyle() );\n\n\t\t\t_context.save();\n\t\t\t_context.translate( v1.x, v1.y );\n\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\n\t\t\t_context.scale( scaleX, scaleY );\n\n\t\t\tmaterial.program( _context );\n\n\t\t\t_context.restore();\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\tsetFillStyle( material.color.getStyle() );\n\n\t\t\t_context.save();\n\t\t\t_context.translate( v1.x, v1.y );\n\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\n\t\t\t_context.scale( scaleX * material.size, - scaleY * material.size );\n\t\t\t_context.fillRect( - 0.5, - 0.5, 1, 1 );\n\t\t\t_context.restore();\n\n\t\t}\n\n\t\t/* DEBUG\n\t\tsetStrokeStyle( 'rgb(255,255,0)' );\n\t\t_context.beginPath();\n\t\t_context.moveTo( v1.x - 10, v1.y );\n\t\t_context.lineTo( v1.x + 10, v1.y );\n\t\t_context.moveTo( v1.x, v1.y - 10 );\n\t\t_context.lineTo( v1.x, v1.y + 10 );\n\t\t_context.stroke();\n\t\t*/\n\n\t}\n\n\tfunction renderLine( v1, v2, element, material ) {\n\n\t\tsetOpacity( material.opacity );\n\t\tsetBlending( material.blending );\n\n\t\t_context.beginPath();\n\t\t_context.moveTo( v1.positionScreen.x, v1.positionScreen.y );\n\t\t_context.lineTo( v2.positionScreen.x, v2.positionScreen.y );\n\n\t\tif ( material.isLineBasicMaterial ) {\n\n\t\t\tsetLineWidth( material.linewidth );\n\t\t\tsetLineCap( material.linecap );\n\t\t\tsetLineJoin( material.linejoin );\n\n\t\t\tif ( material.vertexColors !== THREE.VertexColors ) {\n\n\t\t\t\tsetStrokeStyle( material.color.getStyle() );\n\n\t\t\t} else {\n\n\t\t\t\tvar colorStyle1 = element.vertexColors[ 0 ].getStyle();\n\t\t\t\tvar colorStyle2 = element.vertexColors[ 1 ].getStyle();\n\n\t\t\t\tif ( colorStyle1 === colorStyle2 ) {\n\n\t\t\t\t\tsetStrokeStyle( colorStyle1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tvar grad = _context.createLinearGradient(\n\t\t\t\t\t\t\tv1.positionScreen.x,\n\t\t\t\t\t\t\tv1.positionScreen.y,\n\t\t\t\t\t\t\tv2.positionScreen.x,\n\t\t\t\t\t\t\tv2.positionScreen.y\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgrad.addColorStop( 0, colorStyle1 );\n\t\t\t\t\t\tgrad.addColorStop( 1, colorStyle2 );\n\n\t\t\t\t\t} catch ( exception ) {\n\n\t\t\t\t\t\tgrad = colorStyle1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsetStrokeStyle( grad );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\tsetLineDash( [ material.dashSize, material.gapSize ] );\n\n\t\t\t}\n\n\t\t\t_context.stroke();\n\t\t\t_elemBox.expandByScalar( material.linewidth * 2 );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\tsetLineDash( [] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderFace3( v1, v2, v3, uv1, uv2, uv3, element, material ) {\n\n\t\t_this.info.render.vertices += 3;\n\t\t_this.info.render.faces ++;\n\n\t\tsetOpacity( material.opacity );\n\t\tsetBlending( material.blending );\n\n\t\t_v1x = v1.positionScreen.x; _v1y = v1.positionScreen.y;\n\t\t_v2x = v2.positionScreen.x; _v2y = v2.positionScreen.y;\n\t\t_v3x = v3.positionScreen.x; _v3y = v3.positionScreen.y;\n\n\t\tdrawTriangle( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y );\n\n\t\tif ( ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) && material.map === null ) {\n\n\t\t\t_diffuseColor.copy( material.color );\n\t\t\t_emissiveColor.copy( material.emissive );\n\n\t\t\tif ( material.vertexColors === THREE.FaceColors ) {\n\n\t\t\t\t_diffuseColor.multiply( element.color );\n\n\t\t\t}\n\n\t\t\t_color.copy( _ambientLight );\n\n\t\t\t_centroid.copy( v1.positionWorld ).add( v2.positionWorld ).add( v3.positionWorld ).divideScalar( 3 );\n\n\t\t\tcalculateLight( _centroid, element.normalModel, _color );\n\n\t\t\t_color.multiply( _diffuseColor ).add( _emissiveColor );\n\n\t\t\tmaterial.wireframe === true\n\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\n\t\t\t\t : fillPath( _color );\n\n\t\t} else if ( material.isMeshBasicMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) {\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tvar mapping = material.map.mapping;\n\n\t\t\t\tif ( mapping === THREE.UVMapping ) {\n\n\t\t\t\t\t_uvs = element.uvs;\n\t\t\t\t\tpatternPath( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uvs[ uv1 ].x, _uvs[ uv1 ].y, _uvs[ uv2 ].x, _uvs[ uv2 ].y, _uvs[ uv3 ].x, _uvs[ uv3 ].y, material.map );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.envMap !== null ) {\n\n\t\t\t\tif ( material.envMap.mapping === THREE.SphericalReflectionMapping ) {\n\n\t\t\t\t\t_normal.copy( element.vertexNormalsModel[ uv1 ] ).applyMatrix3( _normalViewMatrix );\n\t\t\t\t\t_uv1x = 0.5 * _normal.x + 0.5;\n\t\t\t\t\t_uv1y = 0.5 * _normal.y + 0.5;\n\n\t\t\t\t\t_normal.copy( element.vertexNormalsModel[ uv2 ] ).applyMatrix3( _normalViewMatrix );\n\t\t\t\t\t_uv2x = 0.5 * _normal.x + 0.5;\n\t\t\t\t\t_uv2y = 0.5 * _normal.y + 0.5;\n\n\t\t\t\t\t_normal.copy( element.vertexNormalsModel[ uv3 ] ).applyMatrix3( _normalViewMatrix );\n\t\t\t\t\t_uv3x = 0.5 * _normal.x + 0.5;\n\t\t\t\t\t_uv3y = 0.5 * _normal.y + 0.5;\n\n\t\t\t\t\tpatternPath( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uv1x, _uv1y, _uv2x, _uv2y, _uv3x, _uv3y, material.envMap );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_color.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors === THREE.FaceColors ) {\n\n\t\t\t\t\t_color.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.wireframe === true\n\t\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\n\t\t\t\t\t : fillPath( _color );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t_normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix );\n\n\t\t\t_color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );\n\n\t\t\tmaterial.wireframe === true\n\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\n\t\t\t\t : fillPath( _color );\n\n\t\t} else {\n\n\t\t\t_color.setRGB( 1, 1, 1 );\n\n\t\t\tmaterial.wireframe === true\n\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\n\t\t\t\t : fillPath( _color );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction drawTriangle( x0, y0, x1, y1, x2, y2 ) {\n\n\t\t_context.beginPath();\n\t\t_context.moveTo( x0, y0 );\n\t\t_context.lineTo( x1, y1 );\n\t\t_context.lineTo( x2, y2 );\n\t\t_context.closePath();\n\n\t}\n\n\tfunction strokePath( color, linewidth, linecap, linejoin ) {\n\n\t\tsetLineWidth( linewidth );\n\t\tsetLineCap( linecap );\n\t\tsetLineJoin( linejoin );\n\t\tsetStrokeStyle( color.getStyle() );\n\n\t\t_context.stroke();\n\n\t\t_elemBox.expandByScalar( linewidth * 2 );\n\n\t}\n\n\tfunction fillPath( color ) {\n\n\t\tsetFillStyle( color.getStyle() );\n\t\t_context.fill();\n\n\t}\n\n\tfunction textureToPattern( texture ) {\n\n\t\tif ( texture.version === 0 ||\n\t\t\ttexture instanceof THREE.CompressedTexture ||\n\t\t\ttexture instanceof THREE.DataTexture ) {\n\n\t\t\treturn {\n\t\t\t\tcanvas: undefined,\n\t\t\t\tversion: texture.version\n\t\t\t};\n\n\t\t}\n\n\t\tvar image = texture.image;\n\n\t\tif ( image.complete === false ) {\n\n\t\t\treturn {\n\t\t\t\tcanvas: undefined,\n\t\t\t\tversion: 0\n\t\t\t};\n\n\t\t}\n\n\t\tvar repeatX = texture.wrapS === THREE.RepeatWrapping || texture.wrapS === THREE.MirroredRepeatWrapping;\n\t\tvar repeatY = texture.wrapT === THREE.RepeatWrapping || texture.wrapT === THREE.MirroredRepeatWrapping;\n\n\t\tvar mirrorX = texture.wrapS === THREE.MirroredRepeatWrapping;\n\t\tvar mirrorY = texture.wrapT === THREE.MirroredRepeatWrapping;\n\n\t\t//\n\n\t\tvar canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = image.width * ( mirrorX ? 2 : 1 );\n\t\tcanvas.height = image.height * ( mirrorY ? 2 : 1 );\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tcontext.setTransform( 1, 0, 0, - 1, 0, image.height );\n\t\tcontext.drawImage( image, 0, 0 );\n\n\t\tif ( mirrorX === true ) {\n\n\t\t\tcontext.setTransform( - 1, 0, 0, - 1, image.width, image.height );\n\t\t\tcontext.drawImage( image, - image.width, 0 );\n\n\t\t}\n\n\t\tif ( mirrorY === true ) {\n\n\t\t\tcontext.setTransform( 1, 0, 0, 1, 0, 0 );\n\t\t\tcontext.drawImage( image, 0, image.height );\n\n\t\t}\n\n\t\tif ( mirrorX === true && mirrorY === true ) {\n\n\t\t\tcontext.setTransform( - 1, 0, 0, 1, image.width, 0 );\n\t\t\tcontext.drawImage( image, - image.width, image.height );\n\n\t\t}\n\n\t\tvar repeat = 'no-repeat';\n\n\t\tif ( repeatX === true && repeatY === true ) {\n\n\t\t\trepeat = 'repeat';\n\n\t\t} else if ( repeatX === true ) {\n\n\t\t\trepeat = 'repeat-x';\n\n\t\t} else if ( repeatY === true ) {\n\n\t\t\trepeat = 'repeat-y';\n\n\t\t}\n\n\t\tvar pattern = _context.createPattern( canvas, repeat );\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\treturn {\n\t\t\tcanvas: pattern,\n\t\t\tversion: texture.version\n\t\t};\n\n\t}\n\n\tfunction patternPath( x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, texture ) {\n\n\t\tvar pattern = _patterns[ texture.id ];\n\n\t\tif ( pattern === undefined || pattern.version !== texture.version ) {\n\n\t\t\tpattern = textureToPattern( texture );\n\t\t\t_patterns[ texture.id ] = pattern;\n\n\t\t}\n\n\t\tif ( pattern.canvas !== undefined ) {\n\n\t\t\tsetFillStyle( pattern.canvas );\n\n\t\t} else {\n\n\t\t\tsetFillStyle( 'rgba( 0, 0, 0, 1)' );\n\t\t\t_context.fill();\n\t\t\treturn;\n\n\t\t}\n\n\t\t// http://extremelysatisfactorytotalitarianism.com/blog/?p=2120\n\n\t\tvar a, b, c, d, e, f, det, idet,\n\t\t\toffsetX = texture.offset.x / texture.repeat.x,\n\t\t\toffsetY = texture.offset.y / texture.repeat.y,\n\t\t\twidth = texture.image.width * texture.repeat.x,\n\t\t\theight = texture.image.height * texture.repeat.y;\n\n\t\tu0 = ( u0 + offsetX ) * width;\n\t\tv0 = ( v0 + offsetY ) * height;\n\n\t\tu1 = ( u1 + offsetX ) * width;\n\t\tv1 = ( v1 + offsetY ) * height;\n\n\t\tu2 = ( u2 + offsetX ) * width;\n\t\tv2 = ( v2 + offsetY ) * height;\n\n\t\tx1 -= x0; y1 -= y0;\n\t\tx2 -= x0; y2 -= y0;\n\n\t\tu1 -= u0; v1 -= v0;\n\t\tu2 -= u0; v2 -= v0;\n\n\t\tdet = u1 * v2 - u2 * v1;\n\n\t\tif ( det === 0 ) return;\n\n\t\tidet = 1 / det;\n\n\t\ta = ( v2 * x1 - v1 * x2 ) * idet;\n\t\tb = ( v2 * y1 - v1 * y2 ) * idet;\n\t\tc = ( u1 * x2 - u2 * x1 ) * idet;\n\t\td = ( u1 * y2 - u2 * y1 ) * idet;\n\n\t\te = x0 - a * u0 - c * v0;\n\t\tf = y0 - b * u0 - d * v0;\n\n\t\t_context.save();\n\t\t_context.transform( a, b, c, d, e, f );\n\t\t_context.fill();\n\t\t_context.restore();\n\n\t}\n\n\t/*\n\tfunction clipImage( x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, image ) {\n\n\t\t// http://extremelysatisfactorytotalitarianism.com/blog/?p=2120\n\n\t\tvar a, b, c, d, e, f, det, idet,\n\t\twidth = image.width - 1,\n\t\theight = image.height - 1;\n\n\t\tu0 *= width; v0 *= height;\n\t\tu1 *= width; v1 *= height;\n\t\tu2 *= width; v2 *= height;\n\n\t\tx1 -= x0; y1 -= y0;\n\t\tx2 -= x0; y2 -= y0;\n\n\t\tu1 -= u0; v1 -= v0;\n\t\tu2 -= u0; v2 -= v0;\n\n\t\tdet = u1 * v2 - u2 * v1;\n\n\t\tidet = 1 / det;\n\n\t\ta = ( v2 * x1 - v1 * x2 ) * idet;\n\t\tb = ( v2 * y1 - v1 * y2 ) * idet;\n\t\tc = ( u1 * x2 - u2 * x1 ) * idet;\n\t\td = ( u1 * y2 - u2 * y1 ) * idet;\n\n\t\te = x0 - a * u0 - c * v0;\n\t\tf = y0 - b * u0 - d * v0;\n\n\t\t_context.save();\n\t\t_context.transform( a, b, c, d, e, f );\n\t\t_context.clip();\n\t\t_context.drawImage( image, 0, 0 );\n\t\t_context.restore();\n\n\t}\n\t*/\n\n\t// Hide anti-alias gaps\n\n\tfunction expand( v1, v2, pixels ) {\n\n\t\tvar x = v2.x - v1.x, y = v2.y - v1.y,\n\t\t\tdet = x * x + y * y, idet;\n\n\t\tif ( det === 0 ) return;\n\n\t\tidet = pixels / Math.sqrt( det );\n\n\t\tx *= idet; y *= idet;\n\n\t\tv2.x += x; v2.y += y;\n\t\tv1.x -= x; v1.y -= y;\n\n\t}\n\n\t// Context cached methods.\n\n\tfunction setOpacity( value ) {\n\n\t\tif ( _contextGlobalAlpha !== value ) {\n\n\t\t\t_context.globalAlpha = value;\n\t\t\t_contextGlobalAlpha = value;\n\n\t\t}\n\n\t}\n\n\tfunction setBlending( value ) {\n\n\t\tif ( _contextGlobalCompositeOperation !== value ) {\n\n\t\t\tif ( value === THREE.NormalBlending ) {\n\n\t\t\t\t_context.globalCompositeOperation = 'source-over';\n\n\t\t\t} else if ( value === THREE.AdditiveBlending ) {\n\n\t\t\t\t_context.globalCompositeOperation = 'lighter';\n\n\t\t\t} else if ( value === THREE.SubtractiveBlending ) {\n\n\t\t\t\t_context.globalCompositeOperation = 'darker';\n\n\t\t\t} else if ( value === THREE.MultiplyBlending ) {\n\n\t\t\t\t_context.globalCompositeOperation = 'multiply';\n\n\t\t\t}\n\n\t\t\t_contextGlobalCompositeOperation = value;\n\n\t\t}\n\n\t}\n\n\tfunction setLineWidth( value ) {\n\n\t\tif ( _contextLineWidth !== value ) {\n\n\t\t\t_context.lineWidth = value;\n\t\t\t_contextLineWidth = value;\n\n\t\t}\n\n\t}\n\n\tfunction setLineCap( value ) {\n\n\t\t// \"butt\", \"round\", \"square\"\n\n\t\tif ( _contextLineCap !== value ) {\n\n\t\t\t_context.lineCap = value;\n\t\t\t_contextLineCap = value;\n\n\t\t}\n\n\t}\n\n\tfunction setLineJoin( value ) {\n\n\t\t// \"round\", \"bevel\", \"miter\"\n\n\t\tif ( _contextLineJoin !== value ) {\n\n\t\t\t_context.lineJoin = value;\n\t\t\t_contextLineJoin = value;\n\n\t\t}\n\n\t}\n\n\tfunction setStrokeStyle( value ) {\n\n\t\tif ( _contextStrokeStyle !== value ) {\n\n\t\t\t_context.strokeStyle = value;\n\t\t\t_contextStrokeStyle = value;\n\n\t\t}\n\n\t}\n\n\tfunction setFillStyle( value ) {\n\n\t\tif ( _contextFillStyle !== value ) {\n\n\t\t\t_context.fillStyle = value;\n\t\t\t_contextFillStyle = value;\n\n\t\t}\n\n\t}\n\n\tfunction setLineDash( value ) {\n\n\t\tif ( _contextLineDash.length !== value.length ) {\n\n\t\t\t_context.setLineDash( value );\n\t\t\t_contextLineDash = value;\n\n\t\t}\n\n\t}\n\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author julianwa / https://github.com/julianwa\n */\n\nTHREE.RenderableObject = function () {\n\n\tthis.id = 0;\n\n\tthis.object = null;\n\tthis.z = 0;\n\tthis.renderOrder = 0;\n\n};\n\n//\n\nTHREE.RenderableFace = function () {\n\n\tthis.id = 0;\n\n\tthis.v1 = new THREE.RenderableVertex();\n\tthis.v2 = new THREE.RenderableVertex();\n\tthis.v3 = new THREE.RenderableVertex();\n\n\tthis.normalModel = new THREE.Vector3();\n\n\tthis.vertexNormalsModel = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ];\n\tthis.vertexNormalsLength = 0;\n\n\tthis.color = new THREE.Color();\n\tthis.material = null;\n\tthis.uvs = [ new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() ];\n\n\tthis.z = 0;\n\tthis.renderOrder = 0;\n\n};\n\n//\n\nTHREE.RenderableVertex = function () {\n\n\tthis.position = new THREE.Vector3();\n\tthis.positionWorld = new THREE.Vector3();\n\tthis.positionScreen = new THREE.Vector4();\n\n\tthis.visible = true;\n\n};\n\nTHREE.RenderableVertex.prototype.copy = function ( vertex ) {\n\n\tthis.positionWorld.copy( vertex.positionWorld );\n\tthis.positionScreen.copy( vertex.positionScreen );\n\n};\n\n//\n\nTHREE.RenderableLine = function () {\n\n\tthis.id = 0;\n\n\tthis.v1 = new THREE.RenderableVertex();\n\tthis.v2 = new THREE.RenderableVertex();\n\n\tthis.vertexColors = [ new THREE.Color(), new THREE.Color() ];\n\tthis.material = null;\n\n\tthis.z = 0;\n\tthis.renderOrder = 0;\n\n};\n\n//\n\nTHREE.RenderableSprite = function () {\n\n\tthis.id = 0;\n\n\tthis.object = null;\n\n\tthis.x = 0;\n\tthis.y = 0;\n\tthis.z = 0;\n\n\tthis.rotation = 0;\n\tthis.scale = new THREE.Vector2();\n\n\tthis.material = null;\n\tthis.renderOrder = 0;\n\n};\n\n//\n\nTHREE.Projector = function () {\n\n\tvar _object, _objectCount, _objectPool = [], _objectPoolLength = 0,\n\t\t_vertex, _vertexCount, _vertexPool = [], _vertexPoolLength = 0,\n\t\t_face, _faceCount, _facePool = [], _facePoolLength = 0,\n\t\t_line, _lineCount, _linePool = [], _linePoolLength = 0,\n\t\t_sprite, _spriteCount, _spritePool = [], _spritePoolLength = 0,\n\n\t\t_renderData = { objects: [], lights: [], elements: [] },\n\n\t\t_vector3 = new THREE.Vector3(),\n\t\t_vector4 = new THREE.Vector4(),\n\n\t\t_clipBox = new THREE.Box3( new THREE.Vector3( - 1, - 1, - 1 ), new THREE.Vector3( 1, 1, 1 ) ),\n\t\t_boundingBox = new THREE.Box3(),\n\t\t_points3 = new Array( 3 ),\n\n\t\t_viewMatrix = new THREE.Matrix4(),\n\t\t_viewProjectionMatrix = new THREE.Matrix4(),\n\n\t\t_modelMatrix,\n\t\t_modelViewProjectionMatrix = new THREE.Matrix4(),\n\n\t\t_normalMatrix = new THREE.Matrix3(),\n\n\t\t_frustum = new THREE.Frustum(),\n\n\t\t_clippedVertex1PositionScreen = new THREE.Vector4(),\n\t\t_clippedVertex2PositionScreen = new THREE.Vector4();\n\n\t//\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n\t//\n\n\tvar RenderList = function () {\n\n\t\tvar normals = [];\n\t\tvar colors = [];\n\t\tvar uvs = [];\n\n\t\tvar object = null;\n\t\tvar material = null;\n\n\t\tvar normalMatrix = new THREE.Matrix3();\n\n\t\tfunction setObject( value ) {\n\n\t\t\tobject = value;\n\t\t\tmaterial = object.material;\n\n\t\t\tnormalMatrix.getNormalMatrix( object.matrixWorld );\n\n\t\t\tnormals.length = 0;\n\t\t\tcolors.length = 0;\n\t\t\tuvs.length = 0;\n\n\t\t}\n\n\t\tfunction projectVertex( vertex ) {\n\n\t\t\tvar position = vertex.position;\n\t\t\tvar positionWorld = vertex.positionWorld;\n\t\t\tvar positionScreen = vertex.positionScreen;\n\n\t\t\tpositionWorld.copy( position ).applyMatrix4( _modelMatrix );\n\t\t\tpositionScreen.copy( positionWorld ).applyMatrix4( _viewProjectionMatrix );\n\n\t\t\tvar invW = 1 / positionScreen.w;\n\n\t\t\tpositionScreen.x *= invW;\n\t\t\tpositionScreen.y *= invW;\n\t\t\tpositionScreen.z *= invW;\n\n\t\t\tvertex.visible = positionScreen.x >= - 1 && positionScreen.x <= 1 &&\n\t\t\t\t\t positionScreen.y >= - 1 && positionScreen.y <= 1 &&\n\t\t\t\t\t positionScreen.z >= - 1 && positionScreen.z <= 1;\n\n\t\t}\n\n\t\tfunction pushVertex( x, y, z ) {\n\n\t\t\t_vertex = getNextVertexInPool();\n\t\t\t_vertex.position.set( x, y, z );\n\n\t\t\tprojectVertex( _vertex );\n\n\t\t}\n\n\t\tfunction pushNormal( x, y, z ) {\n\n\t\t\tnormals.push( x, y, z );\n\n\t\t}\n\n\t\tfunction pushColor( r, g, b ) {\n\n\t\t\tcolors.push( r, g, b );\n\n\t\t}\n\n\t\tfunction pushUv( x, y ) {\n\n\t\t\tuvs.push( x, y );\n\n\t\t}\n\n\t\tfunction checkTriangleVisibility( v1, v2, v3 ) {\n\n\t\t\tif ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;\n\n\t\t\t_points3[ 0 ] = v1.positionScreen;\n\t\t\t_points3[ 1 ] = v2.positionScreen;\n\t\t\t_points3[ 2 ] = v3.positionScreen;\n\n\t\t\treturn _clipBox.intersectsBox( _boundingBox.setFromPoints( _points3 ) );\n\n\t\t}\n\n\t\tfunction checkBackfaceCulling( v1, v2, v3 ) {\n\n\t\t\treturn ( ( v3.positionScreen.x - v1.positionScreen.x ) *\n\t\t\t\t ( v2.positionScreen.y - v1.positionScreen.y ) -\n\t\t\t\t ( v3.positionScreen.y - v1.positionScreen.y ) *\n\t\t\t\t ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0;\n\n\t\t}\n\n\t\tfunction pushLine( a, b ) {\n\n\t\t\tvar v1 = _vertexPool[ a ];\n\t\t\tvar v2 = _vertexPool[ b ];\n\n\t\t\t// Clip\n\n\t\t\tv1.positionScreen.copy( v1.position ).applyMatrix4( _modelViewProjectionMatrix );\n\t\t\tv2.positionScreen.copy( v2.position ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\tif ( clipLine( v1.positionScreen, v2.positionScreen ) === true ) {\n\n\t\t\t\t// Perform the perspective divide\n\t\t\t\tv1.positionScreen.multiplyScalar( 1 / v1.positionScreen.w );\n\t\t\t\tv2.positionScreen.multiplyScalar( 1 / v2.positionScreen.w );\n\n\t\t\t\t_line = getNextLineInPool();\n\t\t\t\t_line.id = object.id;\n\t\t\t\t_line.v1.copy( v1 );\n\t\t\t\t_line.v2.copy( v2 );\n\t\t\t\t_line.z = Math.max( v1.positionScreen.z, v2.positionScreen.z );\n\t\t\t\t_line.renderOrder = object.renderOrder;\n\n\t\t\t\t_line.material = object.material;\n\n\t\t\t\tif ( object.material.vertexColors === THREE.VertexColors ) {\n\n\t\t\t\t\t_line.vertexColors[ 0 ].fromArray( colors, a * 3 );\n\t\t\t\t\t_line.vertexColors[ 1 ].fromArray( colors, b * 3 );\n\n\t\t\t\t}\n\n\t\t\t\t_renderData.elements.push( _line );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushTriangle( a, b, c ) {\n\n\t\t\tvar v1 = _vertexPool[ a ];\n\t\t\tvar v2 = _vertexPool[ b ];\n\t\t\tvar v3 = _vertexPool[ c ];\n\n\t\t\tif ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;\n\n\t\t\tif ( material.side === THREE.DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {\n\n\t\t\t\t_face = getNextFaceInPool();\n\n\t\t\t\t_face.id = object.id;\n\t\t\t\t_face.v1.copy( v1 );\n\t\t\t\t_face.v2.copy( v2 );\n\t\t\t\t_face.v3.copy( v3 );\n\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;\n\t\t\t\t_face.renderOrder = object.renderOrder;\n\n\t\t\t\t// use first vertex normal as face normal\n\n\t\t\t\t_face.normalModel.fromArray( normals, a * 3 );\n\t\t\t\t_face.normalModel.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\tfor ( var i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tvar normal = _face.vertexNormalsModel[ i ];\n\t\t\t\t\tnormal.fromArray( normals, arguments[ i ] * 3 );\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\tvar uv = _face.uvs[ i ];\n\t\t\t\t\tuv.fromArray( uvs, arguments[ i ] * 2 );\n\n\t\t\t\t}\n\n\t\t\t\t_face.vertexNormalsLength = 3;\n\n\t\t\t\t_face.material = object.material;\n\n\t\t\t\t_renderData.elements.push( _face );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tsetObject: setObject,\n\t\t\tprojectVertex: projectVertex,\n\t\t\tcheckTriangleVisibility: checkTriangleVisibility,\n\t\t\tcheckBackfaceCulling: checkBackfaceCulling,\n\t\t\tpushVertex: pushVertex,\n\t\t\tpushNormal: pushNormal,\n\t\t\tpushColor: pushColor,\n\t\t\tpushUv: pushUv,\n\t\t\tpushLine: pushLine,\n\t\t\tpushTriangle: pushTriangle\n\t\t};\n\n\t};\n\n\tvar renderList = new RenderList();\n\n\tfunction projectObject( object ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tif ( object instanceof THREE.Light ) {\n\n\t\t\t_renderData.lights.push( object );\n\n\t\t} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {\n\n\t\t\tif ( object.material.visible === false ) return;\n\t\t\tif ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;\n\n\t\t\taddObject( object );\n\n\t\t} else if ( object instanceof THREE.Sprite ) {\n\n\t\t\tif ( object.material.visible === false ) return;\n\t\t\tif ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;\n\n\t\t\taddObject( object );\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ] );\n\n\t\t}\n\n\t}\n\n\tfunction addObject( object ) {\n\n\t\t_object = getNextObjectInPool();\n\t\t_object.id = object.id;\n\t\t_object.object = object;\n\n\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\t\t_object.z = _vector3.z;\n\t\t_object.renderOrder = object.renderOrder;\n\n\t\t_renderData.objects.push( _object );\n\n\t}\n\n\tthis.projectScene = function ( scene, camera, sortObjects, sortElements ) {\n\n\t\t_faceCount = 0;\n\t\t_lineCount = 0;\n\t\t_spriteCount = 0;\n\n\t\t_renderData.elements.length = 0;\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t_frustum.setFromMatrix( _viewProjectionMatrix );\n\n\t\t//\n\n\t\t_objectCount = 0;\n\n\t\t_renderData.objects.length = 0;\n\t\t_renderData.lights.length = 0;\n\n\t\tprojectObject( scene );\n\n\t\tif ( sortObjects === true ) {\n\n\t\t\t_renderData.objects.sort( painterSort );\n\n\t\t}\n\n\t\t//\n\n\t\tvar objects = _renderData.objects;\n\n\t\tfor ( var o = 0, ol = objects.length; o < ol; o ++ ) {\n\n\t\t\tvar object = objects[ o ].object;\n\t\t\tvar geometry = object.geometry;\n\n\t\t\trenderList.setObject( object );\n\n\t\t\t_modelMatrix = object.matrixWorld;\n\n\t\t\t_vertexCount = 0;\n\n\t\t\tif ( object instanceof THREE.Mesh ) {\n\n\t\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\n\n\t\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tif ( attributes.position === undefined ) continue;\n\n\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.normal !== undefined ) {\n\n\t\t\t\t\t\tvar normals = attributes.normal.array;\n\n\t\t\t\t\t\tfor ( var i = 0, l = normals.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.uv !== undefined ) {\n\n\t\t\t\t\t\tvar uvs = attributes.uv.array;\n\n\t\t\t\t\t\tfor ( var i = 0, l = uvs.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\trenderList.pushUv( uvs[ i ], uvs[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\tvar indices = geometry.index.array;\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( var g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tvar group = groups[ g ];\n\n\t\t\t\t\t\t\t\tfor ( var i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar faces = geometry.faces;\n\t\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\n\t\t\t\t\t_normalMatrix.getNormalMatrix( _modelMatrix );\n\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tfor ( var v = 0, vl = vertices.length; v < vl; v ++ ) {\n\n\t\t\t\t\t\tvar vertex = vertices[ v ];\n\n\t\t\t\t\t\t_vector3.copy( vertex );\n\n\t\t\t\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\t\tvar morphInfluences = object.morphTargetInfluences;\n\n\t\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tvar target = morphTargets[ t ];\n\t\t\t\t\t\t\t\tvar targetVertex = target.vertices[ v ];\n\n\t\t\t\t\t\t\t\t_vector3.x += ( targetVertex.x - vertex.x ) * influence;\n\t\t\t\t\t\t\t\t_vector3.y += ( targetVertex.y - vertex.y ) * influence;\n\t\t\t\t\t\t\t\t_vector3.z += ( targetVertex.z - vertex.z ) * influence;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderList.pushVertex( _vector3.x, _vector3.y, _vector3.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\t\tvar face = faces[ f ];\n\n\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t ? object.material[ face.materialIndex ]\n\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\tvar side = material.side;\n\n\t\t\t\t\t\tvar v1 = _vertexPool[ face.a ];\n\t\t\t\t\t\tvar v2 = _vertexPool[ face.b ];\n\t\t\t\t\t\tvar v3 = _vertexPool[ face.c ];\n\n\t\t\t\t\t\tif ( renderList.checkTriangleVisibility( v1, v2, v3 ) === false ) continue;\n\n\t\t\t\t\t\tvar visible = renderList.checkBackfaceCulling( v1, v2, v3 );\n\n\t\t\t\t\t\tif ( side !== THREE.DoubleSide ) {\n\n\t\t\t\t\t\t\tif ( side === THREE.FrontSide && visible === false ) continue;\n\t\t\t\t\t\t\tif ( side === THREE.BackSide && visible === true ) continue;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_face = getNextFaceInPool();\n\n\t\t\t\t\t\t_face.id = object.id;\n\t\t\t\t\t\t_face.v1.copy( v1 );\n\t\t\t\t\t\t_face.v2.copy( v2 );\n\t\t\t\t\t\t_face.v3.copy( v3 );\n\n\t\t\t\t\t\t_face.normalModel.copy( face.normal );\n\n\t\t\t\t\t\tif ( visible === false && ( side === THREE.BackSide || side === THREE.DoubleSide ) ) {\n\n\t\t\t\t\t\t\t_face.normalModel.negate();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_face.normalModel.applyMatrix3( _normalMatrix ).normalize();\n\n\t\t\t\t\t\tvar faceVertexNormals = face.vertexNormals;\n\n\t\t\t\t\t\tfor ( var n = 0, nl = Math.min( faceVertexNormals.length, 3 ); n < nl; n ++ ) {\n\n\t\t\t\t\t\t\tvar normalModel = _face.vertexNormalsModel[ n ];\n\t\t\t\t\t\t\tnormalModel.copy( faceVertexNormals[ n ] );\n\n\t\t\t\t\t\t\tif ( visible === false && ( side === THREE.BackSide || side === THREE.DoubleSide ) ) {\n\n\t\t\t\t\t\t\t\tnormalModel.negate();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnormalModel.applyMatrix3( _normalMatrix ).normalize();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_face.vertexNormalsLength = faceVertexNormals.length;\n\n\t\t\t\t\t\tvar vertexUvs = faceVertexUvs[ f ];\n\n\t\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\t\tfor ( var u = 0; u < 3; u ++ ) {\n\n\t\t\t\t\t\t\t\t_face.uvs[ u ].copy( vertexUvs[ u ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_face.color = face.color;\n\t\t\t\t\t\t_face.material = material;\n\n\t\t\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;\n\t\t\t\t\t\t_face.renderOrder = object.renderOrder;\n\n\t\t\t\t\t\t_renderData.elements.push( _face );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object instanceof THREE.Line ) {\n\n\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\n\n\t\t\t\t\tvar attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tvar colors = attributes.color.array;\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\t\tvar indices = geometry.index.array;\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( indices[ i ], indices[ i + 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar step = object instanceof THREE.LineSegments ? 2 : 1;\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = ( positions.length / 3 ) - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( i, i + 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\n\n\t\t\t\t\tvar vertices = object.geometry.vertices;\n\n\t\t\t\t\tif ( vertices.length === 0 ) continue;\n\n\t\t\t\t\tv1 = getNextVertexInPool();\n\t\t\t\t\tv1.positionScreen.copy( vertices[ 0 ] ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\tvar step = object instanceof THREE.LineSegments ? 2 : 1;\n\n\t\t\t\t\tfor ( var v = 1, vl = vertices.length; v < vl; v ++ ) {\n\n\t\t\t\t\t\tv1 = getNextVertexInPool();\n\t\t\t\t\t\tv1.positionScreen.copy( vertices[ v ] ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\tif ( ( v + 1 ) % step > 0 ) continue;\n\n\t\t\t\t\t\tv2 = _vertexPool[ _vertexCount - 2 ];\n\n\t\t\t\t\t\t_clippedVertex1PositionScreen.copy( v1.positionScreen );\n\t\t\t\t\t\t_clippedVertex2PositionScreen.copy( v2.positionScreen );\n\n\t\t\t\t\t\tif ( clipLine( _clippedVertex1PositionScreen, _clippedVertex2PositionScreen ) === true ) {\n\n\t\t\t\t\t\t\t// Perform the perspective divide\n\t\t\t\t\t\t\t_clippedVertex1PositionScreen.multiplyScalar( 1 / _clippedVertex1PositionScreen.w );\n\t\t\t\t\t\t\t_clippedVertex2PositionScreen.multiplyScalar( 1 / _clippedVertex2PositionScreen.w );\n\n\t\t\t\t\t\t\t_line = getNextLineInPool();\n\n\t\t\t\t\t\t\t_line.id = object.id;\n\t\t\t\t\t\t\t_line.v1.positionScreen.copy( _clippedVertex1PositionScreen );\n\t\t\t\t\t\t\t_line.v2.positionScreen.copy( _clippedVertex2PositionScreen );\n\n\t\t\t\t\t\t\t_line.z = Math.max( _clippedVertex1PositionScreen.z, _clippedVertex2PositionScreen.z );\n\t\t\t\t\t\t\t_line.renderOrder = object.renderOrder;\n\n\t\t\t\t\t\t\t_line.material = object.material;\n\n\t\t\t\t\t\t\tif ( object.material.vertexColors === THREE.VertexColors ) {\n\n\t\t\t\t\t\t\t\t_line.vertexColors[ 0 ].copy( object.geometry.colors[ v ] );\n\t\t\t\t\t\t\t\t_line.vertexColors[ 1 ].copy( object.geometry.colors[ v - 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_renderData.elements.push( _line );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object instanceof THREE.Points ) {\n\n\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\tif ( geometry instanceof THREE.Geometry ) {\n\n\t\t\t\t\tvar vertices = object.geometry.vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = vertices.length; v < vl; v ++ ) {\n\n\t\t\t\t\t\tvar vertex = vertices[ v ];\n\n\t\t\t\t\t\t_vector4.set( vertex.x, vertex.y, vertex.z, 1 );\n\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry instanceof THREE.BufferGeometry ) {\n\n\t\t\t\t\tvar attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );\n\t\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object instanceof THREE.Sprite ) {\n\n\t\t\t\t_vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );\n\t\t\t\t_vector4.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( sortElements === true ) {\n\n\t\t\t_renderData.elements.sort( painterSort );\n\n\t\t}\n\n\t\treturn _renderData;\n\n\t};\n\n\tfunction pushPoint( _vector4, object, camera ) {\n\n\t\tvar invW = 1 / _vector4.w;\n\n\t\t_vector4.z *= invW;\n\n\t\tif ( _vector4.z >= - 1 && _vector4.z <= 1 ) {\n\n\t\t\t_sprite = getNextSpriteInPool();\n\t\t\t_sprite.id = object.id;\n\t\t\t_sprite.x = _vector4.x * invW;\n\t\t\t_sprite.y = _vector4.y * invW;\n\t\t\t_sprite.z = _vector4.z;\n\t\t\t_sprite.renderOrder = object.renderOrder;\n\t\t\t_sprite.object = object;\n\n\t\t\t_sprite.rotation = object.rotation;\n\n\t\t\t_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[ 0 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 12 ] ) );\n\t\t\t_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[ 5 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 13 ] ) );\n\n\t\t\t_sprite.material = object.material;\n\n\t\t\t_renderData.elements.push( _sprite );\n\n\t\t}\n\n\t}\n\n\t// Pools\n\n\tfunction getNextObjectInPool() {\n\n\t\tif ( _objectCount === _objectPoolLength ) {\n\n\t\t\tvar object = new THREE.RenderableObject();\n\t\t\t_objectPool.push( object );\n\t\t\t_objectPoolLength ++;\n\t\t\t_objectCount ++;\n\t\t\treturn object;\n\n\t\t}\n\n\t\treturn _objectPool[ _objectCount ++ ];\n\n\t}\n\n\tfunction getNextVertexInPool() {\n\n\t\tif ( _vertexCount === _vertexPoolLength ) {\n\n\t\t\tvar vertex = new THREE.RenderableVertex();\n\t\t\t_vertexPool.push( vertex );\n\t\t\t_vertexPoolLength ++;\n\t\t\t_vertexCount ++;\n\t\t\treturn vertex;\n\n\t\t}\n\n\t\treturn _vertexPool[ _vertexCount ++ ];\n\n\t}\n\n\tfunction getNextFaceInPool() {\n\n\t\tif ( _faceCount === _facePoolLength ) {\n\n\t\t\tvar face = new THREE.RenderableFace();\n\t\t\t_facePool.push( face );\n\t\t\t_facePoolLength ++;\n\t\t\t_faceCount ++;\n\t\t\treturn face;\n\n\t\t}\n\n\t\treturn _facePool[ _faceCount ++ ];\n\n\n\t}\n\n\tfunction getNextLineInPool() {\n\n\t\tif ( _lineCount === _linePoolLength ) {\n\n\t\t\tvar line = new THREE.RenderableLine();\n\t\t\t_linePool.push( line );\n\t\t\t_linePoolLength ++;\n\t\t\t_lineCount ++;\n\t\t\treturn line;\n\n\t\t}\n\n\t\treturn _linePool[ _lineCount ++ ];\n\n\t}\n\n\tfunction getNextSpriteInPool() {\n\n\t\tif ( _spriteCount === _spritePoolLength ) {\n\n\t\t\tvar sprite = new THREE.RenderableSprite();\n\t\t\t_spritePool.push( sprite );\n\t\t\t_spritePoolLength ++;\n\t\t\t_spriteCount ++;\n\t\t\treturn sprite;\n\n\t\t}\n\n\t\treturn _spritePool[ _spriteCount ++ ];\n\n\t}\n\n\t//\n\n\tfunction painterSort( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else if ( a.id !== b.id ) {\n\n\t\t\treturn a.id - b.id;\n\n\t\t} else {\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t}\n\n\tfunction clipLine( s1, s2 ) {\n\n\t\tvar alpha1 = 0, alpha2 = 1,\n\n\t\t// Calculate the boundary coordinate of each vertex for the near and far clip planes,\n\t\t// Z = -1 and Z = +1, respectively.\n\n\t\t\tbc1near = s1.z + s1.w,\n\t\t\tbc2near = s2.z + s2.w,\n\t\t\tbc1far = - s1.z + s1.w,\n\t\t\tbc2far = - s2.z + s2.w;\n\n\t\tif ( bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0 ) {\n\n\t\t\t// Both vertices lie entirely within all clip planes.\n\t\t\treturn true;\n\n\t\t} else if ( ( bc1near < 0 && bc2near < 0 ) || ( bc1far < 0 && bc2far < 0 ) ) {\n\n\t\t\t// Both vertices lie entirely outside one of the clip planes.\n\t\t\treturn false;\n\n\t\t} else {\n\n\t\t\t// The line segment spans at least one clip plane.\n\n\t\t\tif ( bc1near < 0 ) {\n\n\t\t\t\t// v1 lies outside the near plane, v2 inside\n\t\t\t\talpha1 = Math.max( alpha1, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t} else if ( bc2near < 0 ) {\n\n\t\t\t\t// v2 lies outside the near plane, v1 inside\n\t\t\t\talpha2 = Math.min( alpha2, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t}\n\n\t\t\tif ( bc1far < 0 ) {\n\n\t\t\t\t// v1 lies outside the far plane, v2 inside\n\t\t\t\talpha1 = Math.max( alpha1, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t} else if ( bc2far < 0 ) {\n\n\t\t\t\t// v2 lies outside the far plane, v2 inside\n\t\t\t\talpha2 = Math.min( alpha2, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t}\n\n\t\t\tif ( alpha2 < alpha1 ) {\n\n\t\t\t\t// The line segment spans two boundaries, but is outside both of them.\n\t\t\t\t// (This can't happen when we're only clipping against just near/far but good\n\t\t\t\t// to leave the check here for future usage if other clip planes are added.)\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\n\t\t\t\t// Update the s1 and s2 vertices to match the clipped line segment.\n\t\t\t\ts1.lerp( s2, alpha1 );\n\t\t\t\ts2.lerp( s1, 1 - alpha2 );\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n};\n"]}
+1 -1
docs/js/canvas-renderer-and-projector.min.js
··· 1 1 "use strict";var bgColor=16777215;THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial=!0,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){function s(e,r,t){v(t.opacity),y(t.blending);var i=r.scale.x*J,o=r.scale.y*K,n=Math.sqrt(i*i+o*o);if(de.min.set(e.x-n,e.y-n),de.max.set(e.x+n,e.y+n),t.isSpriteMaterial){var a=t.map;if(null!==a){var s=ce[a.id];if(void 0!==s&&s.version===a.version||(s=M(a),ce[a.id]=s),void 0!==s.canvas){C(s.canvas);var l=a.image,c=l.width*a.offset.x,p=l.height*a.offset.y,E=l.width*a.repeat.x,d=l.height*a.repeat.y,f=i/E,h=o/d;$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.translate(-i/2,-o/2),$.scale(f,h),$.translate(-c,-p),$.fillRect(c,p,E,d),$.restore()}}else C(t.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.scale(i,-o),$.fillRect(-.5,-.5,1,1),$.restore()}else t.isSpriteCanvasMaterial?(x(t.color.getStyle()),C(t.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.scale(i,o),t.program($),$.restore()):t.isPointsMaterial&&(C(t.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.scale(i*t.size,-o*t.size),$.fillRect(-.5,-.5,1,1),$.restore())}function l(e,r,t,i){if(v(i.opacity),y(i.blending),$.beginPath(),$.moveTo(e.positionScreen.x,e.positionScreen.y),$.lineTo(r.positionScreen.x,r.positionScreen.y),i.isLineBasicMaterial){if(E(i.linewidth),d(i.linecap),f(i.linejoin),i.vertexColors!==THREE.VertexColors)x(i.color.getStyle());else{var o=t.vertexColors[0].getStyle(),n=t.vertexColors[1].getStyle();if(o===n)x(o);else{try{var a=$.createLinearGradient(e.positionScreen.x,e.positionScreen.y,r.positionScreen.x,r.positionScreen.y);a.addColorStop(0,o),a.addColorStop(1,n)}catch(e){a=o}x(a)}}i.isLineDashedMaterial&&R([i.dashSize,i.gapSize]),$.stroke(),de.expandByScalar(2*i.linewidth),i.isLineDashedMaterial&&R([])}}function c(e,r,t,i,o,n,a,s){if(G.info.render.vertices+=3,G.info.render.faces++,v(s.opacity),y(s.blending),z=e.positionScreen.x,V=e.positionScreen.y,j=r.positionScreen.x,L=r.positionScreen.y,O=t.positionScreen.x,B=t.positionScreen.y,l=z,c=V,p=j,E=L,d=O,f=B,$.beginPath(),$.moveTo(l,c),$.lineTo(p,E),$.lineTo(d,f),$.closePath(),(s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial)&&null===s.map)ae.copy(s.color),se.copy(s.emissive),s.vertexColors===THREE.FaceColors&&ae.multiply(a.color),ne.copy(fe),ve.copy(e.positionWorld).add(r.positionWorld).add(t.positionWorld).divideScalar(3),function(e,r,t){for(var i=0,o=S.length;i<o;i++){var n=S[i];if(le.copy(n.color),n.isDirectionalLight){var a=me.setFromMatrixPosition(n.matrixWorld).normalize();if((s=r.dot(a))<=0)continue;s*=n.intensity,t.add(le.multiplyScalar(s))}else if(n.isPointLight){var s;if(a=me.setFromMatrixPosition(n.matrixWorld),(s=r.dot(me.subVectors(a,e).normalize()))<=0)continue;if(0==(s*=0==n.distance?1:1-Math.min(e.distanceTo(a)/n.distance,1)))continue;s*=n.intensity,t.add(le.multiplyScalar(s))}}}(ve,a.normalModel,ne),ne.multiply(ae).add(se),!0===s.wireframe?h(ne,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):u(ne);else if(s.isMeshBasicMaterial||s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial){if(null!==s.map)s.map.mapping===THREE.UVMapping&&(P=a.uvs,m(z,V,j,L,O,B,P[i].x,P[i].y,P[o].x,P[o].y,P[n].x,P[n].y,s.map));else null!==s.envMap?s.envMap.mapping===THREE.SphericalReflectionMapping&&(ye.copy(a.vertexNormalsModel[i]).applyMatrix3(xe),W=.5*ye.x+.5,N=.5*ye.y+.5,ye.copy(a.vertexNormalsModel[o]).applyMatrix3(xe),k=.5*ye.x+.5,A=.5*ye.y+.5,ye.copy(a.vertexNormalsModel[n]).applyMatrix3(xe),F=.5*ye.x+.5,D=.5*ye.y+.5,m(z,V,j,L,O,B,W,N,k,A,F,D,s.envMap)):(ne.copy(s.color),s.vertexColors===THREE.FaceColors&&ne.multiply(a.color),!0===s.wireframe?h(ne,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):u(ne))}else s.isMeshNormalMaterial?(ye.copy(a.normalModel).applyMatrix3(xe),ne.setRGB(ye.x,ye.y,ye.z).multiplyScalar(.5).addScalar(.5)):ne.setRGB(1,1,1),!0===s.wireframe?h(ne,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):u(ne);var l,c,p,E,d,f}function h(e,r,t,i){E(r),d(t),f(i),x(e.getStyle()),$.stroke(),de.expandByScalar(2*r)}function u(e){C(e.getStyle()),$.fill()}function M(e){if(0===e.version||e instanceof THREE.CompressedTexture||e instanceof THREE.DataTexture)return{canvas:void 0,version:e.version};var r=e.image;if(!1===r.complete)return{canvas:void 0,version:0};var t=e.wrapS===THREE.RepeatWrapping||e.wrapS===THREE.MirroredRepeatWrapping,i=e.wrapT===THREE.RepeatWrapping||e.wrapT===THREE.MirroredRepeatWrapping,o=e.wrapS===THREE.MirroredRepeatWrapping,n=e.wrapT===THREE.MirroredRepeatWrapping,a=document.createElement("canvas");a.width=r.width*(o?2:1),a.height=r.height*(n?2:1);var s=a.getContext("2d");s.setTransform(1,0,0,-1,0,r.height),s.drawImage(r,0,0),!0===o&&(s.setTransform(-1,0,0,-1,r.width,r.height),s.drawImage(r,-r.width,0)),!0===n&&(s.setTransform(1,0,0,1,0,0),s.drawImage(r,0,r.height)),!0===o&&!0===n&&(s.setTransform(-1,0,0,1,r.width,0),s.drawImage(r,-r.width,r.height));var l="no-repeat";!0===t&&!0===i?l="repeat":!0===t?l="repeat-x":!0===i&&(l="repeat-y");var c=$.createPattern(a,l);return e.onUpdate&&e.onUpdate(e),{canvas:c,version:e.version}}function m(e,r,t,i,o,n,a,s,l,c,p,E,d){var f=ce[d.id];if(void 0!==f&&f.version===d.version||(f=M(d),ce[d.id]=f),void 0===f.canvas)return C("rgba( 0, 0, 0, 1)"),void $.fill();C(f.canvas);var h,u,m,v,y,x,R,T,g=d.offset.x/d.repeat.x,S=d.offset.y/d.repeat.y,H=d.image.width*d.repeat.x,w=d.image.height*d.repeat.y;l=(l+g)*H,c=(c+S)*w,p=(p+g)*H,E=(E+S)*w,t-=e,i-=r,o-=e,n-=r,0!=(R=(l-=a=(a+g)*H)*(E-=s=(s+S)*w)-(p-=a)*(c-=s))&&(y=e-(h=(E*t-c*o)*(T=1/R))*a-(m=(l*o-p*t)*T)*s,x=r-(u=(E*i-c*n)*T)*a-(v=(l*n-p*i)*T)*s,$.save(),$.transform(h,u,m,v,y,x),$.fill(),$.restore())}function p(e,r,t){var i,o=r.x-e.x,n=r.y-e.y,a=o*o+n*n;0!==a&&(o*=i=t/Math.sqrt(a),n*=i,r.x+=o,r.y+=n,e.x-=o,e.y-=n)}function v(e){a!==e&&($.globalAlpha=e,a=e)}function y(e){_!==e&&(e===THREE.NormalBlending?$.globalCompositeOperation="source-over":e===THREE.AdditiveBlending?$.globalCompositeOperation="lighter":e===THREE.SubtractiveBlending?$.globalCompositeOperation="darker":e===THREE.MultiplyBlending&&($.globalCompositeOperation="multiply"),_=e)}function E(e){te!==e&&($.lineWidth=e,te=e)}function d(e){ie!==e&&($.lineCap=e,ie=e)}function f(e){oe!==e&&($.lineJoin=e,oe=e)}function x(e){ee!==e&&($.strokeStyle=e,ee=e)}function C(e){re!==e&&($.fillStyle=e,re=e)}function R(e){r.length!==e.length&&($.setLineDash(e),r=e)}console.log("THREE.CanvasRenderer",THREE.REVISION),e=e||{};var T,g,S,H,w,b,z,V,j,L,O,B,P,W,N,k,A,F,D,G=this,I=new THREE.Projector,i=void 0!==e.canvas?e.canvas:document.createElement("canvas"),U=i.width,q=i.height,J=Math.floor(U/2),K=Math.floor(q/2),Q=0,X=0,Y=U,Z=q,o=1,$=i.getContext("2d",{alpha:!0===e.alpha}),t=new THREE.Color(bgColor),n=!0===e.alpha?0:1,a=1,_=0,ee=null,re=null,te=null,ie=null,oe=null,r=[],ne=new THREE.Color,ae=new THREE.Color,se=new THREE.Color,le=new THREE.Color,ce={},pe=new THREE.Box2,Ee=new THREE.Box2,de=new THREE.Box2,fe=new THREE.Color,he=new THREE.Color,ue=new THREE.Color,me=new THREE.Vector3,ve=new THREE.Vector3,ye=new THREE.Vector3,xe=new THREE.Matrix3;void 0===$.setLineDash&&($.setLineDash=function(){}),this.domElement=i,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.getContext=function(){return $},this.getContextAttributes=function(){return $.getContextAttributes()},this.getPixelRatio=function(){return o},this.setPixelRatio=function(e){void 0!==e&&(o=e)},this.setSize=function(e,r,t){U=e*o,q=r*o,i.width=U,i.height=q,J=Math.floor(U/2),K=Math.floor(q/2),!1!==t&&(i.style.width=e+"px",i.style.height=r+"px"),pe.min.set(-J,-K),pe.max.set(J,K),Ee.min.set(-J,-K),Ee.max.set(J,K),a=1,_=0,oe=ie=te=re=ee=null,this.setViewport(0,0,e,r)},this.setViewport=function(e,r,t,i){Q=e*o,X=r*o,Y=t*o,Z=i*o},this.setScissor=function(){},this.setScissorTest=function(){},this.setClearColor=function(e,r){t.set(e),n=void 0!==r?r:1,Ee.min.set(-J,-K),Ee.max.set(J,K)},this.setClearColorHex=function(e,r){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(e,r)},this.getClearColor=function(){return t},this.getClearAlpha=function(){return n},this.getMaxAnisotropy=function(){return 0},this.clear=function(){!1===Ee.isEmpty()&&(Ee.intersect(pe),Ee.expandByScalar(2),Ee.min.x=Ee.min.x+J,Ee.min.y=-Ee.min.y+K,Ee.max.x=Ee.max.x+J,Ee.max.y=-Ee.max.y+K,n<1&&$.clearRect(0|Ee.min.x,0|Ee.max.y,Ee.max.x-Ee.min.x|0,Ee.min.y-Ee.max.y|0),0<n&&(v(1),y(THREE.NormalBlending),C("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+n+")"),$.fillRect(0|Ee.min.x,0|Ee.max.y,Ee.max.x-Ee.min.x|0,Ee.min.y-Ee.max.y|0)),Ee.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(e,r){if(void 0!==r.isCamera){var t=e.background;t&&t.isColor?(v(1),y(THREE.NormalBlending),C(t.getStyle()),$.fillRect(0,0,U,q)):!0===this.autoClear&&this.clear(),G.info.render.vertices=0,G.info.render.faces=0,$.setTransform(Y/U,0,0,-Z/q,Q,q-X),$.translate(J,K),T=I.projectScene(e,r,this.sortObjects,this.sortElements),g=T.elements,S=T.lights,xe.getNormalMatrix(r.matrixWorldInverse),function(){fe.setRGB(0,0,0),he.setRGB(0,0,0),ue.setRGB(0,0,0);for(var e=0,r=S.length;e<r;e++){var t=S[e],i=t.color;t.isAmbientLight?fe.add(i):t.isDirectionalLight?he.add(i):t.isPointLight&&ue.add(i)}}();for(var i=0,o=g.length;i<o;i++){var n=g[i],a=n.material;if(void 0!==a&&0!==a.opacity){if(de.makeEmpty(),n instanceof THREE.RenderableSprite)(H=n).x*=J,H.y*=K,s(H,n,a);else if(n instanceof THREE.RenderableLine)H=n.v1,w=n.v2,H.positionScreen.x*=J,H.positionScreen.y*=K,w.positionScreen.x*=J,w.positionScreen.y*=K,de.setFromPoints([H.positionScreen,w.positionScreen]),!0===pe.intersectsBox(de)&&l(H,w,n,a);else if(n instanceof THREE.RenderableFace){if(H=n.v1,w=n.v2,b=n.v3,H.positionScreen.z<-1||1<H.positionScreen.z)continue;if(w.positionScreen.z<-1||1<w.positionScreen.z)continue;if(b.positionScreen.z<-1||1<b.positionScreen.z)continue;H.positionScreen.x*=J,H.positionScreen.y*=K,w.positionScreen.x*=J,w.positionScreen.y*=K,b.positionScreen.x*=J,b.positionScreen.y*=K,0<a.overdraw&&(p(H.positionScreen,w.positionScreen,a.overdraw),p(w.positionScreen,b.positionScreen,a.overdraw),p(b.positionScreen,H.positionScreen,a.overdraw)),de.setFromPoints([H.positionScreen,w.positionScreen,b.positionScreen]),!0===pe.intersectsBox(de)&&c(H,w,b,0,1,2,n,a)}Ee.union(de)}}$.setTransform(1,0,0,1,0,0)}else console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.")}},THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0,this.renderOrder=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0,this.renderOrder=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(e){this.positionWorld.copy(e.positionWorld),this.positionScreen.copy(e.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0,this.renderOrder=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null,this.renderOrder=0},THREE.Projector=function(){function X(e){(r=function(){if(te!==i)return t[te++];var e=new THREE.RenderableObject;return t.push(e),i++,te++,e}()).id=e.id,r.object=e,de.setFromMatrixPosition(e.matrixWorld),de.applyMatrix4(ue),r.z=de.z,r.renderOrder=e.renderOrder,Ee.objects.push(r)}function Y(e,r,t){var i=1/e.w;e.z*=i,-1<=e.z&&e.z<=1&&((o=function(){if(le!==d)return E[le++];var e=new THREE.RenderableSprite;return E.push(e),d++,le++,e}()).id=r.id,o.x=e.x*i,o.y=e.y*i,o.z=e.z,o.renderOrder=r.renderOrder,o.object=r,o.rotation=r.rotation,o.scale.x=r.scale.x*Math.abs(o.x-(e.x+t.projectionMatrix.elements[0])/(e.w+t.projectionMatrix.elements[12])),o.scale.y=r.scale.y*Math.abs(o.y-(e.y+t.projectionMatrix.elements[5])/(e.w+t.projectionMatrix.elements[13])),o.material=r.material,Ee.elements.push(o))}function Z(){if(ie!==a)return pe[ie++];var e=new THREE.RenderableVertex;return pe.push(e),a++,ie++,e}function $(){if(ne!==l)return s[ne++];var e=new THREE.RenderableFace;return s.push(e),l++,ne++,e}function _(){if(se!==p)return c[se++];var e=new THREE.RenderableLine;return c.push(e),p++,se++,e}function ee(e,r){return e.renderOrder!==r.renderOrder?e.renderOrder-r.renderOrder:e.z!==r.z?r.z-e.z:e.id!==r.id?e.id-r.id:0}function re(e,r){var t=0,i=1,o=e.z+e.w,n=r.z+r.w,a=-e.z+e.w,s=-r.z+r.w;return 0<=o&&0<=n&&0<=a&&0<=s||!(o<0&&n<0||a<0&&s<0)&&(o<0?t=Math.max(t,o/(o-n)):n<0&&(i=Math.min(i,o/(o-n))),a<0?t=Math.max(t,a/(a-s)):s<0&&(i=Math.min(i,a/(a-s))),!(i<t||(e.lerp(r,t),r.lerp(e,1-i),0)))}var r,te,n,ie,oe,ne,ae,se,o,le,ce,t=[],i=0,pe=[],a=0,s=[],l=0,c=[],p=0,E=[],d=0,Ee={objects:[],lights:[],elements:[]},de=new THREE.Vector3,fe=new THREE.Vector4,u=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),m=new THREE.Box3,v=new Array(3),he=new THREE.Matrix4,ue=new THREE.Matrix4,me=new THREE.Matrix4,ve=new THREE.Matrix3,ye=new THREE.Frustum,xe=new THREE.Vector4,Re=new THREE.Vector4;this.projectVector=function(e,r){console.warn("THREE.Projector: .projectVector() is now vector.project()."),e.project(r)},this.unprojectVector=function(e,r){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),e.unproject(r)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var Te=new function(){function i(e){var r=e.position,t=e.positionWorld,i=e.positionScreen;t.copy(r).applyMatrix4(ce),i.copy(t).applyMatrix4(ue);var o=1/i.w;i.x*=o,i.y*=o,i.z*=o,e.visible=-1<=i.x&&i.x<=1&&-1<=i.y&&i.y<=1&&-1<=i.z&&i.z<=1}function l(e,r,t){return!0===e.visible||!0===r.visible||!0===t.visible||(v[0]=e.positionScreen,v[1]=r.positionScreen,v[2]=t.positionScreen,u.intersectsBox(m.setFromPoints(v)))}function c(e,r,t){return(t.positionScreen.x-e.positionScreen.x)*(r.positionScreen.y-e.positionScreen.y)-(t.positionScreen.y-e.positionScreen.y)*(r.positionScreen.x-e.positionScreen.x)<0}var p=[],o=[],E=[],d=null,f=null,h=new THREE.Matrix3;return{setObject:function(e){f=(d=e).material,h.getNormalMatrix(d.matrixWorld),p.length=0,o.length=0,E.length=0},projectVertex:i,checkTriangleVisibility:l,checkBackfaceCulling:c,pushVertex:function(e,r,t){(n=Z()).position.set(e,r,t),i(n)},pushNormal:function(e,r,t){p.push(e,r,t)},pushColor:function(e,r,t){o.push(e,r,t)},pushUv:function(e,r){E.push(e,r)},pushLine:function(e,r){var t=pe[e],i=pe[r];t.positionScreen.copy(t.position).applyMatrix4(me),i.positionScreen.copy(i.position).applyMatrix4(me),!0===re(t.positionScreen,i.positionScreen)&&(t.positionScreen.multiplyScalar(1/t.positionScreen.w),i.positionScreen.multiplyScalar(1/i.positionScreen.w),(ae=_()).id=d.id,ae.v1.copy(t),ae.v2.copy(i),ae.z=Math.max(t.positionScreen.z,i.positionScreen.z),ae.renderOrder=d.renderOrder,ae.material=d.material,d.material.vertexColors===THREE.VertexColors&&(ae.vertexColors[0].fromArray(o,3*e),ae.vertexColors[1].fromArray(o,3*r)),Ee.elements.push(ae))},pushTriangle:function(e,r,t){var i=pe[e],o=pe[r],n=pe[t];if(!1!==l(i,o,n)&&(f.side===THREE.DoubleSide||!0===c(i,o,n))){(oe=$()).id=d.id,oe.v1.copy(i),oe.v2.copy(o),oe.v3.copy(n),oe.z=(i.positionScreen.z+o.positionScreen.z+n.positionScreen.z)/3,oe.renderOrder=d.renderOrder,oe.normalModel.fromArray(p,3*e),oe.normalModel.applyMatrix3(h).normalize();for(var a=0;a<3;a++){var s=oe.vertexNormalsModel[a];s.fromArray(p,3*arguments[a]),s.applyMatrix3(h).normalize(),oe.uvs[a].fromArray(E,2*arguments[a])}oe.vertexNormalsLength=3,oe.material=d.material,Ee.elements.push(oe)}}}};this.projectScene=function(e,r,t,i){le=se=ne=0,!(Ee.elements.length=0)===e.autoUpdate&&e.updateMatrixWorld(),null===r.parent&&r.updateMatrixWorld(),he.copy(r.matrixWorldInverse),ue.multiplyMatrices(r.projectionMatrix,he),ye.setFromMatrix(ue),te=0,Ee.objects.length=0,Ee.lights.length=0,function e(r){if(!1!==r.visible){if(r instanceof THREE.Light)Ee.lights.push(r);else if(r instanceof THREE.Mesh||r instanceof THREE.Line||r instanceof THREE.Points){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===ye.intersectsObject(r))return;X(r)}else if(r instanceof THREE.Sprite){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===ye.intersectsSprite(r))return;X(r)}for(var t=r.children,i=0,o=t.length;i<o;i++)e(t[i])}}(e),!0===t&&Ee.objects.sort(ee);for(var o=Ee.objects,n=0,a=o.length;n<a;n++){var s=o[n].object,l=s.geometry;if(Te.setObject(s),ce=s.matrixWorld,ie=0,s instanceof THREE.Mesh){if(l instanceof THREE.BufferGeometry){var c=l.attributes,p=l.groups;if(void 0===c.position)continue;for(var E=0,d=(Q=c.position.array).length;E<d;E+=3)Te.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.normal){var f=c.normal.array;for(E=0,d=f.length;E<d;E+=3)Te.pushNormal(f[E],f[E+1],f[E+2])}if(void 0!==c.uv){var h=c.uv.array;for(E=0,d=h.length;E<d;E+=2)Te.pushUv(h[E],h[E+1])}if(null!==l.index){var u=l.index.array;if(0<p.length)for(var m=0;m<p.length;m++){var v=p[m];for(E=v.start,d=v.start+v.count;E<d;E+=3)Te.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=u.length;E<d;E+=3)Te.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=Q.length/3;E<d;E+=3)Te.pushTriangle(E,E+1,E+2)}else if(l instanceof THREE.Geometry){var y=l.vertices,x=l.faces,R=l.faceVertexUvs[0];ve.getNormalMatrix(ce);for(var T=s.material,g=Array.isArray(T),S=0,H=y.length;S<H;S++){var w=y[S];if(de.copy(w),!0===T.morphTargets)for(var M=l.morphTargets,C=s.morphTargetInfluences,b=0,z=M.length;b<z;b++){var V=C[b];if(0!==V){var j=M[b].vertices[S];de.x+=(j.x-w.x)*V,de.y+=(j.y-w.y)*V,de.z+=(j.z-w.z)*V}}Te.pushVertex(de.x,de.y,de.z)}for(var L=0,O=x.length;L<O;L++){var B=x[L];if(void 0!==(T=!0===g?s.material[B.materialIndex]:s.material)){var P=T.side,W=pe[B.a],N=pe[B.b],k=pe[B.c];if(!1!==Te.checkTriangleVisibility(W,N,k)){var A=Te.checkBackfaceCulling(W,N,k);if(P!==THREE.DoubleSide){if(P===THREE.FrontSide&&!1===A)continue;if(P===THREE.BackSide&&!0===A)continue}(oe=$()).id=s.id,oe.v1.copy(W),oe.v2.copy(N),oe.v3.copy(k),oe.normalModel.copy(B.normal),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||oe.normalModel.negate(),oe.normalModel.applyMatrix3(ve).normalize();for(var F=B.vertexNormals,D=0,G=Math.min(F.length,3);D<G;D++){var I=oe.vertexNormalsModel[D];I.copy(F[D]),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||I.negate(),I.applyMatrix3(ve).normalize()}oe.vertexNormalsLength=F.length;var U=R[L];if(void 0!==U)for(var q=0;q<3;q++)oe.uvs[q].copy(U[q]);oe.color=B.color,oe.material=T,oe.z=(W.positionScreen.z+N.positionScreen.z+k.positionScreen.z)/3,oe.renderOrder=s.renderOrder,Ee.elements.push(oe)}}}}}else if(s instanceof THREE.Line){if(me.multiplyMatrices(ue,ce),l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){for(E=0,d=(Q=c.position.array).length;E<d;E+=3)Te.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.color){var J=c.color.array;for(E=0,d=J.length;E<d;E+=3)Te.pushColor(J[E],J[E+1],J[E+2])}if(null!==l.index)for(E=0,d=(u=l.index.array).length;E<d;E+=2)Te.pushLine(u[E],u[E+1]);else{var K=s instanceof THREE.LineSegments?2:1;for(E=0,d=Q.length/3-1;E<d;E+=K)Te.pushLine(E,E+1)}}}else if(l instanceof THREE.Geometry){if(0===(y=s.geometry.vertices).length)continue;(W=Z()).positionScreen.copy(y[0]).applyMatrix4(me);for(K=s instanceof THREE.LineSegments?2:1,S=1,H=y.length;S<H;S++)(W=Z()).positionScreen.copy(y[S]).applyMatrix4(me),0<(S+1)%K||(N=pe[ie-2],xe.copy(W.positionScreen),Re.copy(N.positionScreen),!0===re(xe,Re)&&(xe.multiplyScalar(1/xe.w),Re.multiplyScalar(1/Re.w),(ae=_()).id=s.id,ae.v1.positionScreen.copy(xe),ae.v2.positionScreen.copy(Re),ae.z=Math.max(xe.z,Re.z),ae.renderOrder=s.renderOrder,ae.material=s.material,s.material.vertexColors===THREE.VertexColors&&(ae.vertexColors[0].copy(s.geometry.colors[S]),ae.vertexColors[1].copy(s.geometry.colors[S-1])),Ee.elements.push(ae)))}}else if(s instanceof THREE.Points){if(me.multiplyMatrices(ue,ce),l instanceof THREE.Geometry)for(S=0,H=(y=s.geometry.vertices).length;S<H;S++){w=y[S];fe.set(w.x,w.y,w.z,1),fe.applyMatrix4(me),Y(fe,s,r)}else if(l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){var Q;for(E=0,d=(Q=c.position.array).length;E<d;E+=3)fe.set(Q[E],Q[E+1],Q[E+2],1),fe.applyMatrix4(me),Y(fe,s,r)}}}else s instanceof THREE.Sprite&&(fe.set(ce.elements[12],ce.elements[13],ce.elements[14],1),fe.applyMatrix4(ue),Y(fe,s,r))}return!0===i&&Ee.elements.sort(ee),Ee}}; 2 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLm1pbi5qcyJdLCJuYW1lcyI6WyJiZ0NvbG9yIiwiVEhSRUUiLCJTcHJpdGVDYW52YXNNYXRlcmlhbCIsImUiLCJNYXRlcmlhbCIsImNhbGwiLCJ0aGlzIiwidHlwZSIsImNvbG9yIiwiQ29sb3IiLCJwcm9ncmFtIiwic2V0VmFsdWVzIiwicHJvdG90eXBlIiwiT2JqZWN0IiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJpc1Nwcml0ZUNhbnZhc01hdGVyaWFsIiwiY2xvbmUiLCJjb3B5IiwiQ2FudmFzUmVuZGVyZXIiLCJpIiwiciIsInQiLCJmIiwib3BhY2l0eSIsImQiLCJibGVuZGluZyIsInNjYWxlIiwieCIsIlUiLCJvIiwieSIsInEiLCJuIiwiTWF0aCIsInNxcnQiLCJ1ZSIsIm1pbiIsInNldCIsIm1heCIsImlzU3ByaXRlTWF0ZXJpYWwiLCJhIiwibWFwIiwicyIsImZlIiwiaWQiLCJ2ZXJzaW9uIiwiYyIsImNhbnZhcyIsImwiLCJpbWFnZSIsInAiLCJ3aWR0aCIsIm9mZnNldCIsIkUiLCJoZWlnaHQiLCJoIiwicmVwZWF0IiwidSIsIm0iLCJaIiwic2F2ZSIsInRyYW5zbGF0ZSIsInJvdGF0aW9uIiwicm90YXRlIiwiZmlsbFJlY3QiLCJyZXN0b3JlIiwiZ2V0U3R5bGUiLCJ2IiwiaXNQb2ludHNNYXRlcmlhbCIsInNpemUiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJwb3NpdGlvblNjcmVlbiIsImxpbmVUbyIsImlzTGluZUJhc2ljTWF0ZXJpYWwiLCJsaW5ld2lkdGgiLCJsaW5lY2FwIiwibGluZWpvaW4iLCJ2ZXJ0ZXhDb2xvcnMiLCJWZXJ0ZXhDb2xvcnMiLCJjcmVhdGVMaW5lYXJHcmFkaWVudCIsImFkZENvbG9yU3RvcCIsImlzTGluZURhc2hlZE1hdGVyaWFsIiwiZGFzaFNpemUiLCJnYXBTaXplIiwic3Ryb2tlIiwiZXhwYW5kQnlTY2FsYXIiLCJBIiwiaW5mbyIsInJlbmRlciIsInZlcnRpY2VzIiwiZmFjZXMiLCJNIiwiQyIsImIiLCJ6IiwiViIsImoiLCJjbG9zZVBhdGgiLCJpc01lc2hMYW1iZXJ0TWF0ZXJpYWwiLCJpc01lc2hQaG9uZ01hdGVyaWFsIiwiaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCIsImNlIiwicGUiLCJlbWlzc2l2ZSIsIkZhY2VDb2xvcnMiLCJtdWx0aXBseSIsImxlIiwibWUiLCJSZSIsInBvc2l0aW9uV29ybGQiLCJhZGQiLCJkaXZpZGVTY2FsYXIiLCJnIiwibGVuZ3RoIiwiRWUiLCJpc0RpcmVjdGlvbmFsTGlnaHQiLCJ4ZSIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsIm1hdHJpeFdvcmxkIiwibm9ybWFsaXplIiwiZG90IiwiaW50ZW5zaXR5IiwibXVsdGlwbHlTY2FsYXIiLCJpc1BvaW50TGlnaHQiLCJzdWJWZWN0b3JzIiwiZGlzdGFuY2UiLCJkaXN0YW5jZVRvIiwibm9ybWFsTW9kZWwiLCJ3aXJlZnJhbWUiLCJ3aXJlZnJhbWVMaW5ld2lkdGgiLCJ3aXJlZnJhbWVMaW5lY2FwIiwid2lyZWZyYW1lTGluZWpvaW4iLCJpc01lc2hCYXNpY01hdGVyaWFsIiwibWFwcGluZyIsIlVWTWFwcGluZyIsIkwiLCJ1dnMiLCJlbnZNYXAiLCJTcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZyIsIlRlIiwidmVydGV4Tm9ybWFsc01vZGVsIiwiYXBwbHlNYXRyaXgzIiwiZ2UiLCJPIiwiQiIsIlAiLCJXIiwiTiIsImsiLCJpc01lc2hOb3JtYWxNYXRlcmlhbCIsInNldFJHQiIsImFkZFNjYWxhciIsImZpbGwiLCJDb21wcmVzc2VkVGV4dHVyZSIsIkRhdGFUZXh0dXJlIiwiY29tcGxldGUiLCJ3cmFwUyIsIlJlcGVhdFdyYXBwaW5nIiwiTWlycm9yZWRSZXBlYXRXcmFwcGluZyIsIndyYXBUIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiZ2V0Q29udGV4dCIsInNldFRyYW5zZm9ybSIsImRyYXdJbWFnZSIsImNyZWF0ZVBhdHRlcm4iLCJvblVwZGF0ZSIsIlIiLCJUIiwiUyIsIkgiLCJ3IiwidHJhbnNmb3JtIiwiZWUiLCJnbG9iYWxBbHBoYSIsInJlIiwiTm9ybWFsQmxlbmRpbmciLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJBZGRpdGl2ZUJsZW5kaW5nIiwiU3VidHJhY3RpdmVCbGVuZGluZyIsIk11bHRpcGx5QmxlbmRpbmciLCJvZSIsImxpbmVXaWR0aCIsIm5lIiwibGluZUNhcCIsImFlIiwibGluZUpvaW4iLCJ0ZSIsInN0cm9rZVN0eWxlIiwiaWUiLCJmaWxsU3R5bGUiLCJzZSIsInNldExpbmVEYXNoIiwiY29uc29sZSIsImxvZyIsIlJFVklTSU9OIiwiRiIsIlByb2plY3RvciIsIkQiLCJHIiwiSSIsImZsb29yIiwiSiIsIksiLCJRIiwiWCIsIlkiLCJhbHBoYSIsIiQiLCJfIiwiZGUiLCJCb3gyIiwiaGUiLCJ2ZSIsInllIiwiVmVjdG9yMyIsIk1hdHJpeDMiLCJkb21FbGVtZW50IiwiYXV0b0NsZWFyIiwic29ydE9iamVjdHMiLCJzb3J0RWxlbWVudHMiLCJnZXRDb250ZXh0QXR0cmlidXRlcyIsImdldFBpeGVsUmF0aW8iLCJzZXRQaXhlbFJhdGlvIiwic2V0U2l6ZSIsInN0eWxlIiwic2V0Vmlld3BvcnQiLCJzZXRTY2lzc29yIiwic2V0U2Npc3NvclRlc3QiLCJzZXRDbGVhckNvbG9yIiwic2V0Q2xlYXJDb2xvckhleCIsIndhcm4iLCJnZXRDbGVhckNvbG9yIiwiZ2V0Q2xlYXJBbHBoYSIsImdldE1heEFuaXNvdHJvcHkiLCJjbGVhciIsImlzRW1wdHkiLCJpbnRlcnNlY3QiLCJjbGVhclJlY3QiLCJtYWtlRW1wdHkiLCJjbGVhckNvbG9yIiwiY2xlYXJEZXB0aCIsImNsZWFyU3RlbmNpbCIsImlzQ2FtZXJhIiwiYmFja2dyb3VuZCIsImlzQ29sb3IiLCJwcm9qZWN0U2NlbmUiLCJlbGVtZW50cyIsImxpZ2h0cyIsImdldE5vcm1hbE1hdHJpeCIsIm1hdHJpeFdvcmxkSW52ZXJzZSIsImlzQW1iaWVudExpZ2h0IiwibWF0ZXJpYWwiLCJSZW5kZXJhYmxlU3ByaXRlIiwiUmVuZGVyYWJsZUxpbmUiLCJ2MSIsInYyIiwic2V0RnJvbVBvaW50cyIsImludGVyc2VjdHNCb3giLCJSZW5kZXJhYmxlRmFjZSIsInYzIiwib3ZlcmRyYXciLCJ1bmlvbiIsImVycm9yIiwiUmVuZGVyYWJsZU9iamVjdCIsIm9iamVjdCIsInJlbmRlck9yZGVyIiwiUmVuZGVyYWJsZVZlcnRleCIsInZlcnRleE5vcm1hbHNMZW5ndGgiLCJWZWN0b3IyIiwicG9zaXRpb24iLCJWZWN0b3I0IiwidmlzaWJsZSIsInB1c2giLCJhcHBseU1hdHJpeDQiLCJvYmplY3RzIiwiYWJzIiwicHJvamVjdGlvbk1hdHJpeCIsImxlcnAiLCJCb3gzIiwiQXJyYXkiLCJNYXRyaXg0IiwiRnJ1c3R1bSIsInByb2plY3RWZWN0b3IiLCJwcm9qZWN0IiwidW5wcm9qZWN0VmVjdG9yIiwidW5wcm9qZWN0IiwicGlja2luZ1JheSIsInNldE9iamVjdCIsInByb2plY3RWZXJ0ZXgiLCJjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eSIsImNoZWNrQmFja2ZhY2VDdWxsaW5nIiwicHVzaFZlcnRleCIsInB1c2hOb3JtYWwiLCJwdXNoQ29sb3IiLCJwdXNoVXYiLCJwdXNoTGluZSIsImZyb21BcnJheSIsInB1c2hUcmlhbmdsZSIsInNpZGUiLCJEb3VibGVTaWRlIiwiYXJndW1lbnRzIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZU1hdHJpeFdvcmxkIiwicGFyZW50IiwibXVsdGlwbHlNYXRyaWNlcyIsInNldEZyb21NYXRyaXgiLCJMaWdodCIsIk1lc2giLCJMaW5lIiwiUG9pbnRzIiwiZnJ1c3R1bUN1bGxlZCIsImludGVyc2VjdHNPYmplY3QiLCJTcHJpdGUiLCJpbnRlcnNlY3RzU3ByaXRlIiwiY2hpbGRyZW4iLCJzb3J0IiwiZ2VvbWV0cnkiLCJCdWZmZXJHZW9tZXRyeSIsImF0dHJpYnV0ZXMiLCJncm91cHMiLCJhcnJheSIsIm5vcm1hbCIsInV2IiwiaW5kZXgiLCJzdGFydCIsImNvdW50IiwiR2VvbWV0cnkiLCJmYWNlVmVydGV4VXZzIiwiaXNBcnJheSIsIm1vcnBoVGFyZ2V0cyIsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsIm1hdGVyaWFsSW5kZXgiLCJGcm9udFNpZGUiLCJCYWNrU2lkZSIsIm5lZ2F0ZSIsInZlcnRleE5vcm1hbHMiLCJMaW5lU2VnbWVudHMiLCJjb2xvcnMiXSwibWFwcGluZ3MiOiJhQUFBLElBQUlBLFFBQVEsU0FBU0MsTUFBTUMscUJBQXFCLFNBQVNDLEdBQUdGLE1BQU1HLFNBQVNDLEtBQUtDLE1BQU1BLEtBQUtDLEtBQUssdUJBQXVCRCxLQUFLRSxNQUFNLElBQUlQLE1BQU1RLE1BQU0sVUFBVUgsS0FBS0ksUUFBUSxhQUFhSixLQUFLSyxVQUFVUixJQUFJRixNQUFNQyxxQkFBcUJVLFVBQVVDLE9BQU9DLE9BQU9iLE1BQU1HLFNBQVNRLFdBQVdYLE1BQU1DLHFCQUFxQlUsVUFBVUcsWUFBWWQsTUFBTUMscUJBQXFCRCxNQUFNQyxxQkFBcUJVLFVBQVVJLHdCQUF1QixFQUFHZixNQUFNQyxxQkFBcUJVLFVBQVVLLE1BQU0sV0FBVyxJQUFJZCxFQUFFLElBQUlGLE1BQU1DLHFCQUFxQixPQUFPQyxFQUFFZSxLQUFLWixNQUFNSCxFQUFFSyxNQUFNVSxLQUFLWixLQUFLRSxPQUFPTCxFQUFFTyxRQUFRSixLQUFLSSxRQUFRUCxHQUFHRixNQUFNa0IsZUFBZSxTQUFTaEIsR0FBOHFCLFNBQVNpQixFQUFFakIsRUFBRWtCLEVBQUVDLEdBQUdDLEVBQUVELEVBQUVFLFNBQVNDLEVBQUVILEVBQUVJLFVBQVUsSUFBSU4sRUFBRUMsRUFBRU0sTUFBTUMsRUFBRUMsRUFBRUMsRUFBRVQsRUFBRU0sTUFBTUksRUFBRUMsRUFBRUMsRUFBRUMsS0FBS0MsS0FBS2YsRUFBRUEsRUFBRVUsRUFBRUEsR0FBRyxHQUFHTSxHQUFHQyxJQUFJQyxJQUFJbkMsRUFBRXlCLEVBQUVLLEVBQUU5QixFQUFFNEIsRUFBRUUsR0FBR0csR0FBR0csSUFBSUQsSUFBSW5DLEVBQUV5QixFQUFF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akgsTUFBTXVULFFBQVEsR0FBR2hPLEdBQUUyTixpQkFBaUI3SixHQUFFbUIsSUFBR0csYUFBYTNLLE1BQU13VSxTQUFTLElBQThCN1EsRUFBRSxFQUFFc0osR0FBMUJOLEVBQUUxRixFQUFFNk0sU0FBU3BPLFVBQWlCd0IsT0FBT3ZELEVBQUVzSixFQUFFdEosSUFBSSxDQUFLdUosRUFBRVAsRUFBRWhKLEdBQUdxRixHQUFFM0csSUFBSTZLLEVBQUV2TCxFQUFFdUwsRUFBRXBMLEVBQUVvTCxFQUFFbkgsRUFBRSxHQUFHaUQsR0FBRW1JLGFBQWE1TCxJQUFHbEUsRUFBRTJILEdBQUUvQixFQUFFOUYsUUFBUSxHQUFHd0osYUFBYTNLLE1BQU0rVCxlQUFlLENBQW9CLFFBQUcsS0FBbEJuSixFQUFFRCxFQUFFcUosWUFBeUJqRCxTQUFhLENBQUEsSUFBSWxMLEVBQVIsSUFBMkJDLEVBQUUsRUFBRUMsR0FBdkJGLEVBQUUrRSxFQUFFbUcsU0FBU21ELE9BQWNoTixPQUFPcEIsRUFBRUMsRUFBRUQsR0FBRyxFQUFFa0QsR0FBRTNHLElBQUl3RCxFQUFFQyxHQUFHRCxFQUFFQyxFQUFFLEdBQUdELEVBQUVDLEVBQUUsR0FBRyxHQUFHa0QsR0FBRW1JLGFBQWE1TCxJQUFHbEUsRUFBRTJILEdBQUUvQixFQUFFOUYsVUFBUzhGLGFBQWFqSCxNQUFNMFQsU0FBUzFLLEdBQUUzRyxJQUFJbUksR0FBRWdGLFNBQVMsSUFBSWhGLEdBQUVnRixTQUFTLElBQUloRixHQUFFZ0YsU0FBUyxJQUFJLEdBQUd4RyxHQUFFbUksYUFBYTlILElBQUdoSSxFQUFFMkgsR0FBRS9CLEVBQUU5RixJQUFJLE9BQU0sSUFBSytCLEdBQUcrQyxHQUFFdUosU0FBU3FFLEtBQUs3USxJQUFHaUQiLCJmaWxlIjoianMvY2FudmFzLXJlbmRlcmVyLWFuZC1wcm9qZWN0b3IubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJnQ29sb3I9MTY3NzcyMTU7VEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWw9ZnVuY3Rpb24oZSl7VEhSRUUuTWF0ZXJpYWwuY2FsbCh0aGlzKSx0aGlzLnR5cGU9XCJTcHJpdGVDYW52YXNNYXRlcmlhbFwiLHRoaXMuY29sb3I9bmV3IFRIUkVFLkNvbG9yKDE2Nzc3MjE1KSx0aGlzLnByb2dyYW09ZnVuY3Rpb24oKXt9LHRoaXMuc2V0VmFsdWVzKGUpfSxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShUSFJFRS5NYXRlcmlhbC5wcm90b3R5cGUpLFRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1USFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuaXNTcHJpdGVDYW52YXNNYXRlcmlhbD0hMCxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWw7cmV0dXJuIGUuY29weSh0aGlzKSxlLmNvbG9yLmNvcHkodGhpcy5jb2xvciksZS5wcm9ncmFtPXRoaXMucHJvZ3JhbSxlfSxUSFJFRS5DYW52YXNSZW5kZXJlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7bWUuc2V0UkdCKDAsMCwwKSx2ZS5zZXRSR0IoMCwwLDApLHllLnNldFJHQigwLDAsMCk7Zm9yKHZhciBlPTAscj1nLmxlbmd0aDtlPHI7ZSsrKXt2YXIgdD1nW2VdLGk9dC5jb2xvcjt0LmlzQW1iaWVudExpZ2h0P21lLmFkZChpKTp0LmlzRGlyZWN0aW9uYWxMaWdodD92ZS5hZGQoaSk6dC5pc1BvaW50TGlnaHQmJnllLmFkZChpKX19ZnVuY3Rpb24gdChlLHIsdCl7Zm9yKHZhciBpPTAsbz1nLmxlbmd0aDtpPG87aSsrKXt2YXIgbj1nW2ldO2lmKEVlLmNvcHkobi5jb2xvciksbi5pc0RpcmVjdGlvbmFsTGlnaHQpe3ZhciBhPXhlLnNldEZyb21NYXRyaXhQb3NpdGlvbihuLm1hdHJpeFdvcmxkKS5ub3JtYWxpemUoKSxzPXIuZG90KGEpO2lmKHM8PTApY29udGludWU7cyo9bi5pbnRlbnNpdHksdC5hZGQoRWUubXVsdGlwbHlTY2FsYXIocykpfWVsc2UgaWYobi5pc1BvaW50TGlnaHQpe3ZhciBhPXhlLnNldEZyb21NYXRyaXhQb3NpdGlvbihuLm1hdHJpeFdvcmxkKSxzPXIuZG90KHhlLnN1YlZlY3RvcnMoYSxlKS5ub3JtYWxpemUoKSk7aWYoczw9MCljb250aW51ZTtpZigwPT0ocyo9MD09bi5kaXN0YW5jZT8xOjEtTWF0aC5taW4oZS5kaXN0YW5jZVRvKGEpL24uZGlzdGFuY2UsMSkpKWNvbnRpbnVlO3MqPW4uaW50ZW5zaXR5LHQuYWRkKEVlLm11bHRpcGx5U2NhbGFyKHMpKX19fWZ1bmN0aW9uIGkoZSxyLHQpe2YodC5vcGFjaXR5KSxkKHQuYmxlbmRpbmcpO3ZhciBpPXIuc2NhbGUueCpVLG89ci5zY2FsZS55KnEsbj1NYXRoLnNxcnQoaSppK28qbyk7aWYodWUubWluLnNldChlLngtbixlLnktbiksdWUubWF4LnNldChlLngrbixlLnkrbiksdC5pc1Nwcml0ZU1hdGVyaWFsKXt2YXIgYT10Lm1hcDtpZihudWxsIT09YSl7dmFyIHM9ZmVbYS5pZF07aWYodm9pZCAwIT09cyYmcy52ZXJzaW9uPT09YS52ZXJzaW9ufHwocz1jKGEpLGZlW2EuaWRdPXMpLHZvaWQgMCE9PXMuY2FudmFzKXt5KHMuY2FudmFzKTt2YXIgbD1hLmltYWdlLHA9bC53aWR0aCphLm9mZnNldC54LEU9bC5oZWlnaHQqYS5vZmZzZXQueSxoPWwud2lkdGgqYS5yZXBlYXQueCx1PWwuaGVpZ2h0KmEucmVwZWF0LnksbT1pL2gseD1vL3U7Wi5zYXZlKCksWi50cmFuc2xhdGUoZS54LGUueSksMCE9PXQucm90YXRpb24mJloucm90YXRlKHQucm90YXRpb24pLFoudHJhbnNsYXRlKC1pLzIsLW8vMiksWi5zY2FsZShtLHgpLFoudHJhbnNsYXRlKC1wLC1FKSxaLmZpbGxSZWN0KHAsRSxoLHUpLFoucmVzdG9yZSgpfX1lbHNlIHkodC5jb2xvci5nZXRTdHlsZSgpKSxaLnNhdmUoKSxaLnRyYW5zbGF0ZShlLngsZS55KSwwIT09dC5yb3RhdGlvbiYmWi5yb3RhdGUodC5yb3RhdGlvbiksWi5zY2FsZShpLC1vKSxaLmZpbGxSZWN0KC0uNSwtLjUsMSwxKSxaLnJlc3RvcmUoKX1lbHNlIHQuaXNTcHJpdGVDYW52YXNNYXRlcmlhbD8odih0LmNvbG9yLmdldFN0eWxlKCkpLHkodC5jb2xvci5nZXRTdHlsZSgpKSxaLnNhdmUoKSxaLnRyYW5zbGF0ZShlLngsZS55KSwwIT09dC5yb3RhdGlvbiYmWi5yb3RhdGUodC5yb3RhdGlvbiksWi5zY2FsZShpLG8pLHQucHJvZ3JhbShaKSxaLnJlc3RvcmUoKSk6dC5pc1BvaW50c01hdGVyaWFsJiYoeSh0LmNvbG9yLmdldFN0eWxlKCkpLFouc2F2ZSgpLFoudHJhbnNsYXRlKGUueCxlLnkpLDAhPT10LnJvdGF0aW9uJiZaLnJvdGF0ZSh0LnJvdGF0aW9uKSxaLnNjYWxlKGkqdC5zaXplLC1vKnQuc2l6ZSksWi5maWxsUmVjdCgtLjUsLS41LDEsMSksWi5yZXN0b3JlKCkpfWZ1bmN0aW9uIG8oZSxyLHQsaSl7aWYoZihpLm9wYWNpdHkpLGQoaS5ibGVuZGluZyksWi5iZWdpblBhdGgoKSxaLm1vdmVUbyhlLnBvc2l0aW9uU2NyZWVuLngsZS5wb3NpdGlvblNjcmVlbi55KSxaLmxpbmVUbyhyLnBvc2l0aW9uU2NyZWVuLngsci5wb3NpdGlvblNjcmVlbi55KSxpLmlzTGluZUJhc2ljTWF0ZXJpYWwpe2lmKGgoaS5saW5ld2lkdGgpLHUoaS5saW5lY2FwKSxtKGkubGluZWpvaW4pLGkudmVydGV4Q29sb3JzIT09VEhSRUUuVmVydGV4Q29sb3JzKXYoaS5jb2xvci5nZXRTdHlsZSgpKTtlbHNle3ZhciBvPXQudmVydGV4Q29sb3JzWzBdLmdldFN0eWxlKCksbj10LnZlcnRleENvbG9yc1sxXS5nZXRTdHlsZSgpO2lmKG89PT1uKXYobyk7ZWxzZXt0cnl7dmFyIGE9Wi5jcmVhdGVMaW5lYXJHcmFkaWVudChlLnBvc2l0aW9uU2NyZWVuLngsZS5wb3NpdGlvblNjcmVlbi55LHIucG9zaXRpb25TY3JlZW4ueCxyLnBvc2l0aW9uU2NyZWVuLnkpO2EuYWRkQ29sb3JTdG9wKDAsbyksYS5hZGRDb2xvclN0b3AoMSxuKX1jYXRjaChlKXthPW99dihhKX19aS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmeChbaS5kYXNoU2l6ZSxpLmdhcFNpemVdKSxaLnN0cm9rZSgpLHVlLmV4cGFuZEJ5U2NhbGFyKDIqaS5saW5ld2lkdGgpLGkuaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJngoW10pfX1mdW5jdGlvbiBuKGUscixpLG8sbixjLEUsaCl7aWYoQS5pbmZvLnJlbmRlci52ZXJ0aWNlcys9MyxBLmluZm8ucmVuZGVyLmZhY2VzKyssZihoLm9wYWNpdHkpLGQoaC5ibGVuZGluZyksTT1lLnBvc2l0aW9uU2NyZWVuLngsQz1lLnBvc2l0aW9uU2NyZWVuLnksYj1yLnBvc2l0aW9uU2NyZWVuLngsej1yLnBvc2l0aW9uU2NyZWVuLnksVj1pLnBvc2l0aW9uU2NyZWVuLngsaj1pLnBvc2l0aW9uU2NyZWVuLnksYShNLEMsYix6LFYsaiksKGguaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxoLmlzTWVzaFBob25nTWF0ZXJpYWx8fGguaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCkmJm51bGw9PT1oLm1hcCljZS5jb3B5KGguY29sb3IpLHBlLmNvcHkoaC5lbWlzc2l2ZSksaC52ZXJ0ZXhDb2xvcnM9PT1USFJFRS5GYWNlQ29sb3JzJiZjZS5tdWx0aXBseShFLmNvbG9yKSxsZS5jb3B5KG1lKSxSZS5jb3B5KGUucG9zaXRpb25Xb3JsZCkuYWRkKHIucG9zaXRpb25Xb3JsZCkuYWRkKGkucG9zaXRpb25Xb3JsZCkuZGl2aWRlU2NhbGFyKDMpLHQoUmUsRS5ub3JtYWxNb2RlbCxsZSksbGUubXVsdGlwbHkoY2UpLmFkZChwZSksITA9PT1oLndpcmVmcmFtZT9zKGxlLGgud2lyZWZyYW1lTGluZXdpZHRoLGgud2lyZWZyYW1lTGluZWNhcCxoLndpcmVmcmFtZUxpbmVqb2luKTpsKGxlKTtlbHNlIGlmKGguaXNNZXNoQmFzaWNNYXRlcmlhbHx8aC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fGguaXNNZXNoUGhvbmdNYXRlcmlhbHx8aC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsKWlmKG51bGwhPT1oLm1hcCl7dmFyIHU9aC5tYXAubWFwcGluZzt1PT09VEhSRUUuVVZNYXBwaW5nJiYoTD1FLnV2cyxwKE0sQyxiLHosVixqLExbb10ueCxMW29dLnksTFtuXS54LExbbl0ueSxMW2NdLngsTFtjXS55LGgubWFwKSl9ZWxzZSBudWxsIT09aC5lbnZNYXA/aC5lbnZNYXAubWFwcGluZz09PVRIUkVFLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nJiYoVGUuY29weShFLnZlcnRleE5vcm1hbHNNb2RlbFtvXSkuYXBwbHlNYXRyaXgzKGdlKSxPPS41KlRlLngrLjUsQj0uNSpUZS55Ky41LFRlLmNvcHkoRS52ZXJ0ZXhOb3JtYWxzTW9kZWxbbl0pLmFwcGx5TWF0cml4MyhnZSksUD0uNSpUZS54Ky41LFc9LjUqVGUueSsuNSxUZS5jb3B5KEUudmVydGV4Tm9ybWFsc01vZGVsW2NdKS5hcHBseU1hdHJpeDMoZ2UpLE49LjUqVGUueCsuNSxrPS41KlRlLnkrLjUscChNLEMsYix6LFYsaixPLEIsUCxXLE4sayxoLmVudk1hcCkpOihsZS5jb3B5KGguY29sb3IpLGgudmVydGV4Q29sb3JzPT09VEhSRUUuRmFjZUNvbG9ycyYmbGUubXVsdGlwbHkoRS5jb2xvciksITA9PT1oLndpcmVmcmFtZT9zKGxlLGgud2lyZWZyYW1lTGluZXdpZHRoLGgud2lyZWZyYW1lTGluZWNhcCxoLndpcmVmcmFtZUxpbmVqb2luKTpsKGxlKSk7ZWxzZSBoLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhUZS5jb3B5KEUubm9ybWFsTW9kZWwpLmFwcGx5TWF0cml4MyhnZSksbGUuc2V0UkdCKFRlLngsVGUueSxUZS56KS5tdWx0aXBseVNjYWxhciguNSkuYWRkU2NhbGFyKC41KSwhMD09PWgud2lyZWZyYW1lP3MobGUsaC53aXJlZnJhbWVMaW5ld2lkdGgsaC53aXJlZnJhbWVMaW5lY2FwLGgud2lyZWZyYW1lTGluZWpvaW4pOmwobGUpKToobGUuc2V0UkdCKDEsMSwxKSwhMD09PWgud2lyZWZyYW1lP3MobGUsaC53aXJlZnJhbWVMaW5ld2lkdGgsaC53aXJlZnJhbWVMaW5lY2FwLGgud2lyZWZyYW1lTGluZWpvaW4pOmwobGUpKX1mdW5jdGlvbiBhKGUscix0LGksbyxuKXtaLmJlZ2luUGF0aCgpLFoubW92ZVRvKGUsciksWi5saW5lVG8odCxpKSxaLmxpbmVUbyhvLG4pLFouY2xvc2VQYXRoKCl9ZnVuY3Rpb24gcyhlLHIsdCxpKXtoKHIpLHUodCksbShpKSx2KGUuZ2V0U3R5bGUoKSksWi5zdHJva2UoKSx1ZS5leHBhbmRCeVNjYWxhcigyKnIpfWZ1bmN0aW9uIGwoZSl7eShlLmdldFN0eWxlKCkpLFouZmlsbCgpfWZ1bmN0aW9uIGMoZSl7aWYoMD09PWUudmVyc2lvbnx8ZSBpbnN0YW5jZW9mIFRIUkVFLkNvbXByZXNzZWRUZXh0dXJlfHxlIGluc3RhbmNlb2YgVEhSRUUuRGF0YVRleHR1cmUpcmV0dXJue2NhbnZhczp2b2lkIDAsdmVyc2lvbjplLnZlcnNpb259O3ZhciByPWUuaW1hZ2U7aWYoITE9PT1yLmNvbXBsZXRlKXJldHVybntjYW52YXM6dm9pZCAwLHZlcnNpb246MH07dmFyIHQ9ZS53cmFwUz09PVRIUkVFLlJlcGVhdFdyYXBwaW5nfHxlLndyYXBTPT09VEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZyxpPWUud3JhcFQ9PT1USFJFRS5SZXBlYXRXcmFwcGluZ3x8ZS53cmFwVD09PVRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmcsbz1lLndyYXBTPT09VEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZyxuPWUud3JhcFQ9PT1USFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTthLndpZHRoPXIud2lkdGgqKG8/MjoxKSxhLmhlaWdodD1yLmhlaWdodCoobj8yOjEpO3ZhciBzPWEuZ2V0Q29udGV4dChcIjJkXCIpO3Muc2V0VHJhbnNmb3JtKDEsMCwwLC0xLDAsci5oZWlnaHQpLHMuZHJhd0ltYWdlKHIsMCwwKSwhMD09PW8mJihzLnNldFRyYW5zZm9ybSgtMSwwLDAsLTEsci53aWR0aCxyLmhlaWdodCkscy5kcmF3SW1hZ2Uociwtci53aWR0aCwwKSksITA9PT1uJiYocy5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHMuZHJhd0ltYWdlKHIsMCxyLmhlaWdodCkpLCEwPT09byYmITA9PT1uJiYocy5zZXRUcmFuc2Zvcm0oLTEsMCwwLDEsci53aWR0aCwwKSxzLmRyYXdJbWFnZShyLC1yLndpZHRoLHIuaGVpZ2h0KSk7dmFyIGw9XCJuby1yZXBlYXRcIjshMD09PXQmJiEwPT09aT9sPVwicmVwZWF0XCI6ITA9PT10P2w9XCJyZXBlYXQteFwiOiEwPT09aSYmKGw9XCJyZXBlYXQteVwiKTt2YXIgYz1aLmNyZWF0ZVBhdHRlcm4oYSxsKTtyZXR1cm4gZS5vblVwZGF0ZSYmZS5vblVwZGF0ZShlKSx7Y2FudmFzOmMsdmVyc2lvbjplLnZlcnNpb259fWZ1bmN0aW9uIHAoZSxyLHQsaSxvLG4sYSxzLGwscCxFLGYsZCl7dmFyIGg9ZmVbZC5pZF07aWYodm9pZCAwIT09aCYmaC52ZXJzaW9uPT09ZC52ZXJzaW9ufHwoaD1jKGQpLGZlW2QuaWRdPWgpLHZvaWQgMD09PWguY2FudmFzKXJldHVybiB5KFwicmdiYSggMCwgMCwgMCwgMSlcIiksdm9pZCBaLmZpbGwoKTt5KGguY2FudmFzKTt2YXIgdSxtLHYseCxSLFQsZyxTLEg9ZC5vZmZzZXQueC9kLnJlcGVhdC54LHc9ZC5vZmZzZXQueS9kLnJlcGVhdC55LE09ZC5pbWFnZS53aWR0aCpkLnJlcGVhdC54LEM9ZC5pbWFnZS5oZWlnaHQqZC5yZXBlYXQueTthPShhK0gpKk0scz0ocyt3KSpDLGw9KGwrSCkqTSxwPShwK3cpKkMsRT0oRStIKSpNLGY9KGYrdykqQyx0LT1lLGktPXIsby09ZSxuLT1yLGwtPWEscC09cyxFLT1hLGYtPXMsMCE9PShnPWwqZi1FKnApJiYoUz0xL2csdT0oZip0LXAqbykqUyxtPShmKmktcCpuKSpTLHY9KGwqby1FKnQpKlMseD0obCpuLUUqaSkqUyxSPWUtdSphLXYqcyxUPXItbSphLXgqcyxaLnNhdmUoKSxaLnRyYW5zZm9ybSh1LG0sdix4LFIsVCksWi5maWxsKCksWi5yZXN0b3JlKCkpfWZ1bmN0aW9uIEUoZSxyLHQpe3ZhciBpLG89ci54LWUueCxuPXIueS1lLnksYT1vKm8rbipuOzAhPT1hJiYoaT10L01hdGguc3FydChhKSxvKj1pLG4qPWksci54Kz1vLHIueSs9bixlLngtPW8sZS55LT1uKX1mdW5jdGlvbiBmKGUpe2VlIT09ZSYmKFouZ2xvYmFsQWxwaGE9ZSxlZT1lKX1mdW5jdGlvbiBkKGUpe3JlIT09ZSYmKGU9PT1USFJFRS5Ob3JtYWxCbGVuZGluZz9aLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cInNvdXJjZS1vdmVyXCI6ZT09PVRIUkVFLkFkZGl0aXZlQmxlbmRpbmc/Wi5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJsaWdodGVyXCI6ZT09PVRIUkVFLlN1YnRyYWN0aXZlQmxlbmRpbmc/Wi5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJkYXJrZXJcIjplPT09VEhSRUUuTXVsdGlwbHlCbGVuZGluZyYmKFouZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwibXVsdGlwbHlcIikscmU9ZSl9ZnVuY3Rpb24gaChlKXtvZSE9PWUmJihaLmxpbmVXaWR0aD1lLG9lPWUpfWZ1bmN0aW9uIHUoZSl7bmUhPT1lJiYoWi5saW5lQ2FwPWUsbmU9ZSl9ZnVuY3Rpb24gbShlKXthZSE9PWUmJihaLmxpbmVKb2luPWUsYWU9ZSl9ZnVuY3Rpb24gdihlKXt0ZSE9PWUmJihaLnN0cm9rZVN0eWxlPWUsdGU9ZSl9ZnVuY3Rpb24geShlKXtpZSE9PWUmJihaLmZpbGxTdHlsZT1lLGllPWUpfWZ1bmN0aW9uIHgoZSl7c2UubGVuZ3RoIT09ZS5sZW5ndGgmJihaLnNldExpbmVEYXNoKGUpLHNlPWUpfWNvbnNvbGUubG9nKFwiVEhSRUUuQ2FudmFzUmVuZGVyZXJcIixUSFJFRS5SRVZJU0lPTiksZT1lfHx7fTt2YXIgUixULGcsUyxILHcsTSxDLGIseixWLGosTCxPLEIsUCxXLE4sayxBPXRoaXMsRj1uZXcgVEhSRUUuUHJvamVjdG9yLEQ9dm9pZCAwIT09ZS5jYW52YXM/ZS5jYW52YXM6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxHPUQud2lkdGgsST1ELmhlaWdodCxVPU1hdGguZmxvb3IoRy8yKSxxPU1hdGguZmxvb3IoSS8yKSxKPTAsSz0wLFE9RyxYPUksWT0xLFo9RC5nZXRDb250ZXh0KFwiMmRcIix7YWxwaGE6ITA9PT1lLmFscGhhfSksJD1uZXcgVEhSRUUuQ29sb3IoYmdDb2xvciksXz0hMD09PWUuYWxwaGE/MDoxLGVlPTEscmU9MCx0ZT1udWxsLGllPW51bGwsb2U9bnVsbCxuZT1udWxsLGFlPW51bGwsc2U9W10sbGU9bmV3IFRIUkVFLkNvbG9yLGNlPW5ldyBUSFJFRS5Db2xvcixwZT1uZXcgVEhSRUUuQ29sb3IsRWU9bmV3IFRIUkVFLkNvbG9yLGZlPXt9LGRlPW5ldyBUSFJFRS5Cb3gyLGhlPW5ldyBUSFJFRS5Cb3gyLHVlPW5ldyBUSFJFRS5Cb3gyLG1lPW5ldyBUSFJFRS5Db2xvcix2ZT1uZXcgVEhSRUUuQ29sb3IseWU9bmV3IFRIUkVFLkNvbG9yLHhlPW5ldyBUSFJFRS5WZWN0b3IzLFJlPW5ldyBUSFJFRS5WZWN0b3IzLFRlPW5ldyBUSFJFRS5WZWN0b3IzLGdlPW5ldyBUSFJFRS5NYXRyaXgzO3ZvaWQgMD09PVouc2V0TGluZURhc2gmJihaLnNldExpbmVEYXNoPWZ1bmN0aW9uKCl7fSksdGhpcy5kb21FbGVtZW50PUQsdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLnNvcnRFbGVtZW50cz0hMCx0aGlzLmluZm89e3JlbmRlcjp7dmVydGljZXM6MCxmYWNlczowfX0sdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFp9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gWi5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gWX0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUmJihZPWUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oZSxyLHQpe0c9ZSpZLEk9cipZLEQud2lkdGg9RyxELmhlaWdodD1JLFU9TWF0aC5mbG9vcihHLzIpLHE9TWF0aC5mbG9vcihJLzIpLCExIT09dCYmKEQuc3R5bGUud2lkdGg9ZStcInB4XCIsRC5zdHlsZS5oZWlnaHQ9citcInB4XCIpLGRlLm1pbi5zZXQoLVUsLXEpLGRlLm1heC5zZXQoVSxxKSxoZS5taW4uc2V0KC1VLC1xKSxoZS5tYXguc2V0KFUscSksZWU9MSxyZT0wLHRlPW51bGwsaWU9bnVsbCxvZT1udWxsLG5lPW51bGwsYWU9bnVsbCx0aGlzLnNldFZpZXdwb3J0KDAsMCxlLHIpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKGUscix0LGkpe0o9ZSpZLEs9cipZLFE9dCpZLFg9aSpZfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oKXt9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXt9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihlLHIpeyQuc2V0KGUpLF89dm9pZCAwIT09cj9yOjEsaGUubWluLnNldCgtVSwtcSksaGUubWF4LnNldChVLHEpfSx0aGlzLnNldENsZWFyQ29sb3JIZXg9ZnVuY3Rpb24oZSxyKXtjb25zb2xlLndhcm4oXCJUSFJFRS5DYW52YXNSZW5kZXJlcjogLnNldENsZWFyQ29sb3JIZXgoKSBpcyBiZWluZyByZW1vdmVkLiBVc2UgLnNldENsZWFyQ29sb3IoKSBpbnN0ZWFkLlwiKSx0aGlzLnNldENsZWFyQ29sb3IoZSxyKX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7cmV0dXJuICR9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBffSx0aGlzLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpeyExPT09aGUuaXNFbXB0eSgpJiYoaGUuaW50ZXJzZWN0KGRlKSxoZS5leHBhbmRCeVNjYWxhcigyKSxoZS5taW4ueD1oZS5taW4ueCtVLGhlLm1pbi55PS1oZS5taW4ueStxLGhlLm1heC54PWhlLm1heC54K1UsaGUubWF4Lnk9LWhlLm1heC55K3EsXzwxJiZaLmNsZWFyUmVjdCgwfGhlLm1pbi54LDB8aGUubWF4LnksaGUubWF4LngtaGUubWluLnh8MCxoZS5taW4ueS1oZS5tYXgueXwwKSxfPjAmJihmKDEpLGQoVEhSRUUuTm9ybWFsQmxlbmRpbmcpLHkoXCJyZ2JhKFwiK01hdGguZmxvb3IoMjU1KiQucikrXCIsXCIrTWF0aC5mbG9vcigyNTUqJC5nKStcIixcIitNYXRoLmZsb29yKDI1NSokLmIpK1wiLFwiK18rXCIpXCIpLFouZmlsbFJlY3QoMHxoZS5taW4ueCwwfGhlLm1heC55LGhlLm1heC54LWhlLm1pbi54fDAsaGUubWluLnktaGUubWF4Lnl8MCkpLGhlLm1ha2VFbXB0eSgpKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7fSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7fSx0aGlzLnJlbmRlcj1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQuaXNDYW1lcmEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcIlRIUkVFLkNhbnZhc1JlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuXCIpO3ZhciBhPWUuYmFja2dyb3VuZDthJiZhLmlzQ29sb3I/KGYoMSksZChUSFJFRS5Ob3JtYWxCbGVuZGluZykseShhLmdldFN0eWxlKCkpLFouZmlsbFJlY3QoMCwwLEcsSSkpOiEwPT09dGhpcy5hdXRvQ2xlYXImJnRoaXMuY2xlYXIoKSxBLmluZm8ucmVuZGVyLnZlcnRpY2VzPTAsQS5pbmZvLnJlbmRlci5mYWNlcz0wLFouc2V0VHJhbnNmb3JtKFEvRywwLDAsLVgvSSxKLEktSyksWi50cmFuc2xhdGUoVSxxKSxSPUYucHJvamVjdFNjZW5lKGUsdCx0aGlzLnNvcnRPYmplY3RzLHRoaXMuc29ydEVsZW1lbnRzKSxUPVIuZWxlbWVudHMsZz1SLmxpZ2h0cyxnZS5nZXROb3JtYWxNYXRyaXgodC5tYXRyaXhXb3JsZEludmVyc2UpLHIoKTtmb3IodmFyIHM9MCxsPVQubGVuZ3RoO3M8bDtzKyspe3ZhciBjPVRbc10scD1jLm1hdGVyaWFsO2lmKHZvaWQgMCE9PXAmJjAhPT1wLm9wYWNpdHkpe2lmKHVlLm1ha2VFbXB0eSgpLGMgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlKVM9YyxTLngqPVUsUy55Kj1xLGkoUyxjLHApO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIFRIUkVFLlJlbmRlcmFibGVMaW5lKVM9Yy52MSxIPWMudjIsUy5wb3NpdGlvblNjcmVlbi54Kj1VLFMucG9zaXRpb25TY3JlZW4ueSo9cSxILnBvc2l0aW9uU2NyZWVuLngqPVUsSC5wb3NpdGlvblNjcmVlbi55Kj1xLHVlLnNldEZyb21Qb2ludHMoW1MucG9zaXRpb25TY3JlZW4sSC5wb3NpdGlvblNjcmVlbl0pLCEwPT09ZGUuaW50ZXJzZWN0c0JveCh1ZSkmJm8oUyxILGMscCk7ZWxzZSBpZihjIGluc3RhbmNlb2YgVEhSRUUuUmVuZGVyYWJsZUZhY2Upe2lmKFM9Yy52MSxIPWMudjIsdz1jLnYzLFMucG9zaXRpb25TY3JlZW4uejwtMXx8Uy5wb3NpdGlvblNjcmVlbi56PjEpY29udGludWU7aWYoSC5wb3NpdGlvblNjcmVlbi56PC0xfHxILnBvc2l0aW9uU2NyZWVuLno+MSljb250aW51ZTtpZih3LnBvc2l0aW9uU2NyZWVuLno8LTF8fHcucG9zaXRpb25TY3JlZW4uej4xKWNvbnRpbnVlO1MucG9zaXRpb25TY3JlZW4ueCo9VSxTLnBvc2l0aW9uU2NyZWVuLnkqPXEsSC5wb3NpdGlvblNjcmVlbi54Kj1VLEgucG9zaXRpb25TY3JlZW4ueSo9cSx3LnBvc2l0aW9uU2NyZWVuLngqPVUsdy5wb3NpdGlvblNjcmVlbi55Kj1xLHAub3ZlcmRyYXc+MCYmKEUoUy5wb3NpdGlvblNjcmVlbixILnBvc2l0aW9uU2NyZWVuLHAub3ZlcmRyYXcpLEUoSC5wb3NpdGlvblNjcmVlbix3LnBvc2l0aW9uU2NyZWVuLHAub3ZlcmRyYXcpLEUody5wb3NpdGlvblNjcmVlbixTLnBvc2l0aW9uU2NyZWVuLHAub3ZlcmRyYXcpKSx1ZS5zZXRGcm9tUG9pbnRzKFtTLnBvc2l0aW9uU2NyZWVuLEgucG9zaXRpb25TY3JlZW4sdy5wb3NpdGlvblNjcmVlbl0pLCEwPT09ZGUuaW50ZXJzZWN0c0JveCh1ZSkmJm4oUyxILHcsMCwxLDIsYyxwKX1oZS51bmlvbih1ZSl9fVouc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKX19LFRIUkVFLlJlbmRlcmFibGVPYmplY3Q9ZnVuY3Rpb24oKXt0aGlzLmlkPTAsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLno9MCx0aGlzLnJlbmRlck9yZGVyPTB9LFRIUkVFLlJlbmRlcmFibGVGYWNlPWZ1bmN0aW9uKCl7dGhpcy5pZD0wLHRoaXMudjE9bmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgsdGhpcy52Mj1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCx0aGlzLnYzPW5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4LHRoaXMubm9ybWFsTW9kZWw9bmV3IFRIUkVFLlZlY3RvcjMsdGhpcy52ZXJ0ZXhOb3JtYWxzTW9kZWw9W25ldyBUSFJFRS5WZWN0b3IzLG5ldyBUSFJFRS5WZWN0b3IzLG5ldyBUSFJFRS5WZWN0b3IzXSx0aGlzLnZlcnRleE5vcm1hbHNMZW5ndGg9MCx0aGlzLmNvbG9yPW5ldyBUSFJFRS5Db2xvcix0aGlzLm1hdGVyaWFsPW51bGwsdGhpcy51dnM9W25ldyBUSFJFRS5WZWN0b3IyLG5ldyBUSFJFRS5WZWN0b3IyLG5ldyBUSFJFRS5WZWN0b3IyXSx0aGlzLno9MCx0aGlzLnJlbmRlck9yZGVyPTB9LFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXg9ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uPW5ldyBUSFJFRS5WZWN0b3IzLHRoaXMucG9zaXRpb25Xb3JsZD1uZXcgVEhSRUUuVmVjdG9yMyx0aGlzLnBvc2l0aW9uU2NyZWVuPW5ldyBUSFJFRS5WZWN0b3I0LHRoaXMudmlzaWJsZT0hMH0sVEhSRUUuUmVuZGVyYWJsZVZlcnRleC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uV29ybGQuY29weShlLnBvc2l0aW9uV29ybGQpLHRoaXMucG9zaXRpb25TY3JlZW4uY29weShlLnBvc2l0aW9uU2NyZWVuKX0sVEhSRUUuUmVuZGVyYWJsZUxpbmU9ZnVuY3Rpb24oKXt0aGlzLmlkPTAsdGhpcy52MT1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCx0aGlzLnYyPW5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4LHRoaXMudmVydGV4Q29sb3JzPVtuZXcgVEhSRUUuQ29sb3IsbmV3IFRIUkVFLkNvbG9yXSx0aGlzLm1hdGVyaWFsPW51bGwsdGhpcy56PTAsdGhpcy5yZW5kZXJPcmRlcj0wfSxUSFJFRS5SZW5kZXJhYmxlU3ByaXRlPWZ1bmN0aW9uKCl7dGhpcy5pZD0wLHRoaXMub2JqZWN0PW51bGwsdGhpcy54PTAsdGhpcy55PTAsdGhpcy56PTAsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2NhbGU9bmV3IFRIUkVFLlZlY3RvcjIsdGhpcy5tYXRlcmlhbD1udWxsLHRoaXMucmVuZGVyT3JkZXI9MH0sVEhSRUUuUHJvamVjdG9yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZighMSE9PXQudmlzaWJsZSl7aWYodCBpbnN0YW5jZW9mIFRIUkVFLkxpZ2h0KWoubGlnaHRzLnB1c2godCk7ZWxzZSBpZih0IGluc3RhbmNlb2YgVEhSRUUuTWVzaHx8dCBpbnN0YW5jZW9mIFRIUkVFLkxpbmV8fHQgaW5zdGFuY2VvZiBUSFJFRS5Qb2ludHMpe2lmKCExPT09dC5tYXRlcmlhbC52aXNpYmxlKXJldHVybjtpZighMD09PXQuZnJ1c3R1bUN1bGxlZCYmITE9PT1ELmludGVyc2VjdHNPYmplY3QodCkpcmV0dXJuO3IodCl9ZWxzZSBpZih0IGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlKXtpZighMT09PXQubWF0ZXJpYWwudmlzaWJsZSlyZXR1cm47aWYoITA9PT10LmZydXN0dW1DdWxsZWQmJiExPT09RC5pbnRlcnNlY3RzU3ByaXRlKHQpKXJldHVybjtyKHQpfWZvcih2YXIgaT10LmNoaWxkcmVuLG89MCxuPWkubGVuZ3RoO288bjtvKyspZShpW29dKX19ZnVuY3Rpb24gcihlKXtwPWkoKSxwLmlkPWUuaWQscC5vYmplY3Q9ZSxMLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSxMLmFwcGx5TWF0cml4NChrKSxwLno9TC56LHAucmVuZGVyT3JkZXI9ZS5yZW5kZXJPcmRlcixqLm9iamVjdHMucHVzaChwKX1mdW5jdGlvbiB0KGUscix0KXt2YXIgaT0xL2UudztlLnoqPWksZS56Pj0tMSYmZS56PD0xJiYoeT1zKCkseS5pZD1yLmlkLHkueD1lLngqaSx5Lnk9ZS55KmkseS56PWUueix5LnJlbmRlck9yZGVyPXIucmVuZGVyT3JkZXIseS5vYmplY3Q9cix5LnJvdGF0aW9uPXIucm90YXRpb24seS5zY2FsZS54PXIuc2NhbGUueCpNYXRoLmFicyh5LngtKGUueCt0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF0pLyhlLncrdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEyXSkpLHkuc2NhbGUueT1yLnNjYWxlLnkqTWF0aC5hYnMoeS55LShlLnkrdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdKS8oZS53K3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxM10pKSx5Lm1hdGVyaWFsPXIubWF0ZXJpYWwsai5lbGVtZW50cy5wdXNoKHkpKX1mdW5jdGlvbiBpKCl7aWYoRT09PWcpe3ZhciBlPW5ldyBUSFJFRS5SZW5kZXJhYmxlT2JqZWN0O3JldHVybiBULnB1c2goZSksZysrLEUrKyxlfXJldHVybiBUW0UrK119ZnVuY3Rpb24gbygpe2lmKGQ9PT1IKXt2YXIgZT1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleDtyZXR1cm4gUy5wdXNoKGUpLEgrKyxkKyssZX1yZXR1cm4gU1tkKytdfWZ1bmN0aW9uIG4oKXtpZih1PT09TSl7dmFyIGU9bmV3IFRIUkVFLlJlbmRlcmFibGVGYWNlO3JldHVybiB3LnB1c2goZSksTSsrLHUrKyxlfXJldHVybiB3W3UrK119ZnVuY3Rpb24gYSgpe2lmKHY9PT1iKXt2YXIgZT1uZXcgVEhSRUUuUmVuZGVyYWJsZUxpbmU7cmV0dXJuIEMucHVzaChlKSxiKyssdisrLGV9cmV0dXJuIENbdisrXX1mdW5jdGlvbiBzKCl7aWYoeD09PVYpe3ZhciBlPW5ldyBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlO3JldHVybiB6LnB1c2goZSksVisrLHgrKyxlfXJldHVybiB6W3grK119ZnVuY3Rpb24gbChlLHIpe3JldHVybiBlLnJlbmRlck9yZGVyIT09ci5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXIucmVuZGVyT3JkZXI6ZS56IT09ci56P3Iuei1lLno6ZS5pZCE9PXIuaWQ/ZS5pZC1yLmlkOjB9ZnVuY3Rpb24gYyhlLHIpe3ZhciB0PTAsaT0xLG89ZS56K2UudyxuPXIueityLncsYT0tZS56K2UudyxzPS1yLnorci53O3JldHVybiBvPj0wJiZuPj0wJiZhPj0wJiZzPj0wfHwhKG88MCYmbjwwfHxhPDAmJnM8MCkmJihvPDA/dD1NYXRoLm1heCh0LG8vKG8tbikpOm48MCYmKGk9TWF0aC5taW4oaSxvLyhvLW4pKSksYTwwP3Q9TWF0aC5tYXgodCxhLyhhLXMpKTpzPDAmJihpPU1hdGgubWluKGksYS8oYS1zKSkpLCEoaTx0KSYmKGUubGVycChyLHQpLHIubGVycChlLDEtaSksITApKX12YXIgcCxFLGYsZCxoLHUsbSx2LHkseCxSLFQ9W10sZz0wLFM9W10sSD0wLHc9W10sTT0wLEM9W10sYj0wLHo9W10sVj0wLGo9e29iamVjdHM6W10sbGlnaHRzOltdLGVsZW1lbnRzOltdfSxMPW5ldyBUSFJFRS5WZWN0b3IzLE89bmV3IFRIUkVFLlZlY3RvcjQsQj1uZXcgVEhSRUUuQm94MyhuZXcgVEhSRUUuVmVjdG9yMygtMSwtMSwtMSksbmV3IFRIUkVFLlZlY3RvcjMoMSwxLDEpKSxQPW5ldyBUSFJFRS5Cb3gzLFc9bmV3IEFycmF5KDMpLE49bmV3IFRIUkVFLk1hdHJpeDQsaz1uZXcgVEhSRUUuTWF0cml4NCxBPW5ldyBUSFJFRS5NYXRyaXg0LEY9bmV3IFRIUkVFLk1hdHJpeDMsRD1uZXcgVEhSRUUuRnJ1c3R1bSxHPW5ldyBUSFJFRS5WZWN0b3I0LEk9bmV3IFRIUkVFLlZlY3RvcjQ7dGhpcy5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKGUscil7Y29uc29sZS53YXJuKFwiVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLlwiKSxlLnByb2plY3Qocil9LHRoaXMudW5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKGUscil7Y29uc29sZS53YXJuKFwiVEhSRUUuUHJvamVjdG9yOiAudW5wcm9qZWN0VmVjdG9yKCkgaXMgbm93IHZlY3Rvci51bnByb2plY3QoKS5cIiksZS51bnByb2plY3Qocil9LHRoaXMucGlja2luZ1JheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJUSFJFRS5Qcm9qZWN0b3I6IC5waWNraW5nUmF5KCkgaXMgbm93IHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKCkuXCIpfTt2YXIgVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7VD1lLGc9VC5tYXRlcmlhbCxILmdldE5vcm1hbE1hdHJpeChULm1hdHJpeFdvcmxkKSx2Lmxlbmd0aD0wLHkubGVuZ3RoPTAseC5sZW5ndGg9MH1mdW5jdGlvbiByKGUpe3ZhciByPWUucG9zaXRpb24sdD1lLnBvc2l0aW9uV29ybGQsaT1lLnBvc2l0aW9uU2NyZWVuO3QuY29weShyKS5hcHBseU1hdHJpeDQoUiksaS5jb3B5KHQpLmFwcGx5TWF0cml4NChrKTt2YXIgbz0xL2kudztpLngqPW8saS55Kj1vLGkueio9byxlLnZpc2libGU9aS54Pj0tMSYmaS54PD0xJiZpLnk+PS0xJiZpLnk8PTEmJmkuej49LTEmJmkuejw9MX1mdW5jdGlvbiB0KGUsdCxpKXtmPW8oKSxmLnBvc2l0aW9uLnNldChlLHQsaSkscihmKX1mdW5jdGlvbiBpKGUscix0KXt2LnB1c2goZSxyLHQpfWZ1bmN0aW9uIHMoZSxyLHQpe3kucHVzaChlLHIsdCl9ZnVuY3Rpb24gbChlLHIpe3gucHVzaChlLHIpfWZ1bmN0aW9uIHAoZSxyLHQpe3JldHVybiEwPT09ZS52aXNpYmxlfHwhMD09PXIudmlzaWJsZXx8ITA9PT10LnZpc2libGV8fChXWzBdPWUucG9zaXRpb25TY3JlZW4sV1sxXT1yLnBvc2l0aW9uU2NyZWVuLFdbMl09dC5wb3NpdGlvblNjcmVlbixCLmludGVyc2VjdHNCb3goUC5zZXRGcm9tUG9pbnRzKFcpKSl9ZnVuY3Rpb24gRShlLHIsdCl7cmV0dXJuKHQucG9zaXRpb25TY3JlZW4ueC1lLnBvc2l0aW9uU2NyZWVuLngpKihyLnBvc2l0aW9uU2NyZWVuLnktZS5wb3NpdGlvblNjcmVlbi55KS0odC5wb3NpdGlvblNjcmVlbi55LWUucG9zaXRpb25TY3JlZW4ueSkqKHIucG9zaXRpb25TY3JlZW4ueC1lLnBvc2l0aW9uU2NyZWVuLngpPDB9ZnVuY3Rpb24gZChlLHIpe3ZhciB0PVNbZV0saT1TW3JdO3QucG9zaXRpb25TY3JlZW4uY29weSh0LnBvc2l0aW9uKS5hcHBseU1hdHJpeDQoQSksaS5wb3NpdGlvblNjcmVlbi5jb3B5KGkucG9zaXRpb24pLmFwcGx5TWF0cml4NChBKSwhMD09PWModC5wb3NpdGlvblNjcmVlbixpLnBvc2l0aW9uU2NyZWVuKSYmKHQucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoMS90LnBvc2l0aW9uU2NyZWVuLncpLGkucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoMS9pLnBvc2l0aW9uU2NyZWVuLncpLG09YSgpLG0uaWQ9VC5pZCxtLnYxLmNvcHkodCksbS52Mi5jb3B5KGkpLG0uej1NYXRoLm1heCh0LnBvc2l0aW9uU2NyZWVuLnosaS5wb3NpdGlvblNjcmVlbi56KSxtLnJlbmRlck9yZGVyPVQucmVuZGVyT3JkZXIsbS5tYXRlcmlhbD1ULm1hdGVyaWFsLFQubWF0ZXJpYWwudmVydGV4Q29sb3JzPT09VEhSRUUuVmVydGV4Q29sb3JzJiYobS52ZXJ0ZXhDb2xvcnNbMF0uZnJvbUFycmF5KHksMyplKSxtLnZlcnRleENvbG9yc1sxXS5mcm9tQXJyYXkoeSwzKnIpKSxqLmVsZW1lbnRzLnB1c2gobSkpfWZ1bmN0aW9uIHUoZSxyLHQpe3ZhciBpPVNbZV0sbz1TW3JdLGE9U1t0XTtpZighMSE9PXAoaSxvLGEpJiYoZy5zaWRlPT09VEhSRUUuRG91YmxlU2lkZXx8ITA9PT1FKGksbyxhKSkpe2g9bigpLGguaWQ9VC5pZCxoLnYxLmNvcHkoaSksaC52Mi5jb3B5KG8pLGgudjMuY29weShhKSxoLno9KGkucG9zaXRpb25TY3JlZW4ueitvLnBvc2l0aW9uU2NyZWVuLnorYS5wb3NpdGlvblNjcmVlbi56KS8zLGgucmVuZGVyT3JkZXI9VC5yZW5kZXJPcmRlcixoLm5vcm1hbE1vZGVsLmZyb21BcnJheSh2LDMqZSksaC5ub3JtYWxNb2RlbC5hcHBseU1hdHJpeDMoSCkubm9ybWFsaXplKCk7Zm9yKHZhciBzPTA7czwzO3MrKyl7dmFyIGw9aC52ZXJ0ZXhOb3JtYWxzTW9kZWxbc107bC5mcm9tQXJyYXkodiwzKmFyZ3VtZW50c1tzXSksbC5hcHBseU1hdHJpeDMoSCkubm9ybWFsaXplKCk7aC51dnNbc10uZnJvbUFycmF5KHgsMiphcmd1bWVudHNbc10pfWgudmVydGV4Tm9ybWFsc0xlbmd0aD0zLGgubWF0ZXJpYWw9VC5tYXRlcmlhbCxqLmVsZW1lbnRzLnB1c2goaCl9fXZhciB2PVtdLHk9W10seD1bXSxUPW51bGwsZz1udWxsLEg9bmV3IFRIUkVFLk1hdHJpeDM7cmV0dXJue3NldE9iamVjdDplLHByb2plY3RWZXJ0ZXg6cixjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eTpwLGNoZWNrQmFja2ZhY2VDdWxsaW5nOkUscHVzaFZlcnRleDp0LHB1c2hOb3JtYWw6aSxwdXNoQ29sb3I6cyxwdXNoVXY6bCxwdXNoTGluZTpkLHB1c2hUcmlhbmdsZTp1fX0scT1uZXcgVTt0aGlzLnByb2plY3RTY2VuZT1mdW5jdGlvbihyLGkscyxwKXt1PTAsdj0wLHg9MCxqLmVsZW1lbnRzLmxlbmd0aD0wLCEwPT09ci5hdXRvVXBkYXRlJiZyLnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWkucGFyZW50JiZpLnVwZGF0ZU1hdHJpeFdvcmxkKCksTi5jb3B5KGkubWF0cml4V29ybGRJbnZlcnNlKSxrLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LE4pLEQuc2V0RnJvbU1hdHJpeChrKSxFPTAsai5vYmplY3RzLmxlbmd0aD0wLGoubGlnaHRzLmxlbmd0aD0wLGUociksITA9PT1zJiZqLm9iamVjdHMuc29ydChsKTtmb3IodmFyIGY9ai5vYmplY3RzLHk9MCxUPWYubGVuZ3RoO3k8VDt5Kyspe3ZhciBnPWZbeV0ub2JqZWN0LEg9Zy5nZW9tZXRyeTtpZihxLnNldE9iamVjdChnKSxSPWcubWF0cml4V29ybGQsZD0wLGcgaW5zdGFuY2VvZiBUSFJFRS5NZXNoKXtpZihIIGluc3RhbmNlb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkpe3ZhciB3PUguYXR0cmlidXRlcyxNPUguZ3JvdXBzO2lmKHZvaWQgMD09PXcucG9zaXRpb24pY29udGludWU7Zm9yKHZhciBDPXcucG9zaXRpb24uYXJyYXksYj0wLHo9Qy5sZW5ndGg7Yjx6O2IrPTMpcS5wdXNoVmVydGV4KENbYl0sQ1tiKzFdLENbYisyXSk7aWYodm9pZCAwIT09dy5ub3JtYWwpZm9yKHZhciBWPXcubm9ybWFsLmFycmF5LGI9MCx6PVYubGVuZ3RoO2I8ejtiKz0zKXEucHVzaE5vcm1hbChWW2JdLFZbYisxXSxWW2IrMl0pO2lmKHZvaWQgMCE9PXcudXYpZm9yKHZhciBCPXcudXYuYXJyYXksYj0wLHo9Qi5sZW5ndGg7Yjx6O2IrPTIpcS5wdXNoVXYoQltiXSxCW2IrMV0pO2lmKG51bGwhPT1ILmluZGV4KXt2YXIgUD1ILmluZGV4LmFycmF5O2lmKE0ubGVuZ3RoPjApZm9yKHZhciBXPTA7VzxNLmxlbmd0aDtXKyspZm9yKHZhciBVPU1bV10sYj1VLnN0YXJ0LHo9VS5zdGFydCtVLmNvdW50O2I8ejtiKz0zKXEucHVzaFRyaWFuZ2xlKFBbYl0sUFtiKzFdLFBbYisyXSk7ZWxzZSBmb3IodmFyIGI9MCx6PVAubGVuZ3RoO2I8ejtiKz0zKXEucHVzaFRyaWFuZ2xlKFBbYl0sUFtiKzFdLFBbYisyXSl9ZWxzZSBmb3IodmFyIGI9MCx6PUMubGVuZ3RoLzM7Yjx6O2IrPTMpcS5wdXNoVHJpYW5nbGUoYixiKzEsYisyKX1lbHNlIGlmKEggaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSl7dmFyIEo9SC52ZXJ0aWNlcyxLPUguZmFjZXMsUT1ILmZhY2VWZXJ0ZXhVdnNbMF07Ri5nZXROb3JtYWxNYXRyaXgoUik7Zm9yKHZhciBYPWcubWF0ZXJpYWwsWT1BcnJheS5pc0FycmF5KFgpLFo9MCwkPUoubGVuZ3RoO1o8JDtaKyspe3ZhciBfPUpbWl07aWYoTC5jb3B5KF8pLCEwPT09WC5tb3JwaFRhcmdldHMpZm9yKHZhciBlZT1ILm1vcnBoVGFyZ2V0cyxyZT1nLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyx0ZT0wLGllPWVlLmxlbmd0aDt0ZTxpZTt0ZSsrKXt2YXIgb2U9cmVbdGVdO2lmKDAhPT1vZSl7dmFyIG5lPWVlW3RlXSxhZT1uZS52ZXJ0aWNlc1taXTtMLngrPShhZS54LV8ueCkqb2UsTC55Kz0oYWUueS1fLnkpKm9lLEwueis9KGFlLnotXy56KSpvZX19cS5wdXNoVmVydGV4KEwueCxMLnksTC56KX1mb3IodmFyIHNlPTAsbGU9Sy5sZW5ndGg7c2U8bGU7c2UrKyl7dmFyIGNlPUtbc2VdO2lmKHZvaWQgMCE9PShYPSEwPT09WT9nLm1hdGVyaWFsW2NlLm1hdGVyaWFsSW5kZXhdOmcubWF0ZXJpYWwpKXt2YXIgcGU9WC5zaWRlLEVlPVNbY2UuYV0sZmU9U1tjZS5iXSxkZT1TW2NlLmNdO2lmKCExIT09cS5jaGVja1RyaWFuZ2xlVmlzaWJpbGl0eShFZSxmZSxkZSkpe3ZhciBoZT1xLmNoZWNrQmFja2ZhY2VDdWxsaW5nKEVlLGZlLGRlKTtpZihwZSE9PVRIUkVFLkRvdWJsZVNpZGUpe2lmKHBlPT09VEhSRUUuRnJvbnRTaWRlJiYhMT09PWhlKWNvbnRpbnVlO2lmKHBlPT09VEhSRUUuQmFja1NpZGUmJiEwPT09aGUpY29udGludWV9aD1uKCksaC5pZD1nLmlkLGgudjEuY29weShFZSksaC52Mi5jb3B5KGZlKSxoLnYzLmNvcHkoZGUpLGgubm9ybWFsTW9kZWwuY29weShjZS5ub3JtYWwpLCExIT09aGV8fHBlIT09VEhSRUUuQmFja1NpZGUmJnBlIT09VEhSRUUuRG91YmxlU2lkZXx8aC5ub3JtYWxNb2RlbC5uZWdhdGUoKSxoLm5vcm1hbE1vZGVsLmFwcGx5TWF0cml4MyhGKS5ub3JtYWxpemUoKTtmb3IodmFyIHVlPWNlLnZlcnRleE5vcm1hbHMsbWU9MCx2ZT1NYXRoLm1pbih1ZS5sZW5ndGgsMyk7bWU8dmU7bWUrKyl7dmFyIHllPWgudmVydGV4Tm9ybWFsc01vZGVsW21lXTt5ZS5jb3B5KHVlW21lXSksITEhPT1oZXx8cGUhPT1USFJFRS5CYWNrU2lkZSYmcGUhPT1USFJFRS5Eb3VibGVTaWRlfHx5ZS5uZWdhdGUoKSx5ZS5hcHBseU1hdHJpeDMoRikubm9ybWFsaXplKCl9aC52ZXJ0ZXhOb3JtYWxzTGVuZ3RoPXVlLmxlbmd0aDt2YXIgeGU9UVtzZV07aWYodm9pZCAwIT09eGUpZm9yKHZhciBSZT0wO1JlPDM7UmUrKyloLnV2c1tSZV0uY29weSh4ZVtSZV0pO2guY29sb3I9Y2UuY29sb3IsaC5tYXRlcmlhbD1YLGguej0oRWUucG9zaXRpb25TY3JlZW4ueitmZS5wb3NpdGlvblNjcmVlbi56K2RlLnBvc2l0aW9uU2NyZWVuLnopLzMsaC5yZW5kZXJPcmRlcj1nLnJlbmRlck9yZGVyLGouZWxlbWVudHMucHVzaChoKX19fX19ZWxzZSBpZihnIGluc3RhbmNlb2YgVEhSRUUuTGluZSl7aWYoQS5tdWx0aXBseU1hdHJpY2VzKGssUiksSCBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5KXt2YXIgdz1ILmF0dHJpYnV0ZXM7aWYodm9pZCAwIT09dy5wb3NpdGlvbil7Zm9yKHZhciBDPXcucG9zaXRpb24uYXJyYXksYj0wLHo9Qy5sZW5ndGg7Yjx6O2IrPTMpcS5wdXNoVmVydGV4KENbYl0sQ1tiKzFdLENbYisyXSk7aWYodm9pZCAwIT09dy5jb2xvcilmb3IodmFyIFRlPXcuY29sb3IuYXJyYXksYj0wLHo9VGUubGVuZ3RoO2I8ejtiKz0zKXEucHVzaENvbG9yKFRlW2JdLFRlW2IrMV0sVGVbYisyXSk7aWYobnVsbCE9PUguaW5kZXgpZm9yKHZhciBQPUguaW5kZXguYXJyYXksYj0wLHo9UC5sZW5ndGg7Yjx6O2IrPTIpcS5wdXNoTGluZShQW2JdLFBbYisxXSk7ZWxzZSBmb3IodmFyIGdlPWcgaW5zdGFuY2VvZiBUSFJFRS5MaW5lU2VnbWVudHM/MjoxLGI9MCx6PUMubGVuZ3RoLzMtMTtiPHo7Yis9Z2UpcS5wdXNoTGluZShiLGIrMSl9fWVsc2UgaWYoSCBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5KXt2YXIgSj1nLmdlb21ldHJ5LnZlcnRpY2VzO2lmKDA9PT1KLmxlbmd0aCljb250aW51ZTtFZT1vKCksRWUucG9zaXRpb25TY3JlZW4uY29weShKWzBdKS5hcHBseU1hdHJpeDQoQSk7Zm9yKHZhciBnZT1nIGluc3RhbmNlb2YgVEhSRUUuTGluZVNlZ21lbnRzPzI6MSxaPTEsJD1KLmxlbmd0aDtaPCQ7WisrKUVlPW8oKSxFZS5wb3NpdGlvblNjcmVlbi5jb3B5KEpbWl0pLmFwcGx5TWF0cml4NChBKSwoWisxKSVnZT4wfHwoZmU9U1tkLTJdLEcuY29weShFZS5wb3NpdGlvblNjcmVlbiksSS5jb3B5KGZlLnBvc2l0aW9uU2NyZWVuKSwhMD09PWMoRyxJKSYmKEcubXVsdGlwbHlTY2FsYXIoMS9HLncpLEkubXVsdGlwbHlTY2FsYXIoMS9JLncpLG09YSgpLG0uaWQ9Zy5pZCxtLnYxLnBvc2l0aW9uU2NyZWVuLmNvcHkoRyksbS52Mi5wb3NpdGlvblNjcmVlbi5jb3B5KEkpLG0uej1NYXRoLm1heChHLnosSS56KSxtLnJlbmRlck9yZGVyPWcucmVuZGVyT3JkZXIsbS5tYXRlcmlhbD1nLm1hdGVyaWFsLGcubWF0ZXJpYWwudmVydGV4Q29sb3JzPT09VEhSRUUuVmVydGV4Q29sb3JzJiYobS52ZXJ0ZXhDb2xvcnNbMF0uY29weShnLmdlb21ldHJ5LmNvbG9yc1taXSksbS52ZXJ0ZXhDb2xvcnNbMV0uY29weShnLmdlb21ldHJ5LmNvbG9yc1taLTFdKSksai5lbGVtZW50cy5wdXNoKG0pKSl9fWVsc2UgaWYoZyBpbnN0YW5jZW9mIFRIUkVFLlBvaW50cyl7aWYoQS5tdWx0aXBseU1hdHJpY2VzKGssUiksSCBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5KWZvcih2YXIgSj1nLmdlb21ldHJ5LnZlcnRpY2VzLFo9MCwkPUoubGVuZ3RoO1o8JDtaKyspe3ZhciBfPUpbWl07Ty5zZXQoXy54LF8ueSxfLnosMSksTy5hcHBseU1hdHJpeDQoQSksdChPLGcsaSl9ZWxzZSBpZihIIGluc3RhbmNlb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkpe3ZhciB3PUguYXR0cmlidXRlcztpZih2b2lkIDAhPT13LnBvc2l0aW9uKWZvcih2YXIgQz13LnBvc2l0aW9uLmFycmF5LGI9MCx6PUMubGVuZ3RoO2I8ejtiKz0zKU8uc2V0KENbYl0sQ1tiKzFdLENbYisyXSwxKSxPLmFwcGx5TWF0cml4NChBKSx0KE8sZyxpKX19ZWxzZSBnIGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlJiYoTy5zZXQoUi5lbGVtZW50c1sxMl0sUi5lbGVtZW50c1sxM10sUi5lbGVtZW50c1sxNF0sMSksTy5hcHBseU1hdHJpeDQoayksdChPLGcsaSkpfXJldHVybiEwPT09cCYmai5lbGVtZW50cy5zb3J0KGwpLGp9fTsiXX0= 2 + //# sourceMappingURL=canvas-renderer-and-projector.min.js.map
+1
docs/js/canvas-renderer-and-projector.min.js.map
··· 1 + {"version":3,"sources":["js/canvas-renderer-and-projector.min.js"],"names":["bgColor","THREE","SpriteCanvasMaterial","e","Material","call","this","type","color","Color","program","setValues","prototype","Object","create","constructor","isSpriteCanvasMaterial","clone","copy","CanvasRenderer","i","r","t","f","opacity","d","blending","scale","x","U","o","y","q","n","Math","sqrt","ue","min","set","max","isSpriteMaterial","a","map","s","fe","id","version","c","canvas","l","image","p","width","offset","E","height","h","repeat","u","m","Z","save","translate","rotation","rotate","fillRect","restore","getStyle","v","isPointsMaterial","size","beginPath","moveTo","positionScreen","lineTo","isLineBasicMaterial","linewidth","linecap","linejoin","vertexColors","VertexColors","createLinearGradient","addColorStop","isLineDashedMaterial","dashSize","gapSize","stroke","expandByScalar","A","info","render","vertices","faces","M","C","b","z","V","j","closePath","isMeshLambertMaterial","isMeshPhongMaterial","isMeshStandardMaterial","ce","pe","emissive","FaceColors","multiply","le","me","Re","positionWorld","add","divideScalar","g","length","Ee","isDirectionalLight","xe","setFromMatrixPosition","matrixWorld","normalize","dot","intensity","multiplyScalar","isPointLight","subVectors","distance","distanceTo","normalModel","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","isMeshBasicMaterial","mapping","UVMapping","L","uvs","envMap","SphericalReflectionMapping","Te","vertexNormalsModel","applyMatrix3","ge","O","B","P","W","N","k","isMeshNormalMaterial","setRGB","addScalar","fill","CompressedTexture","DataTexture","complete","wrapS","RepeatWrapping","MirroredRepeatWrapping","wrapT","document","createElement","getContext","setTransform","drawImage","createPattern","onUpdate","R","T","S","H","w","transform","ee","globalAlpha","re","NormalBlending","globalCompositeOperation","AdditiveBlending","SubtractiveBlending","MultiplyBlending","oe","lineWidth","ne","lineCap","ae","lineJoin","te","strokeStyle","ie","fillStyle","se","setLineDash","console","log","REVISION","F","Projector","D","G","I","floor","J","K","Q","X","Y","alpha","$","_","de","Box2","he","ve","ye","Vector3","Matrix3","domElement","autoClear","sortObjects","sortElements","getContextAttributes","getPixelRatio","setPixelRatio","setSize","style","setViewport","setScissor","setScissorTest","setClearColor","setClearColorHex","warn","getClearColor","getClearAlpha","getMaxAnisotropy","clear","isEmpty","intersect","clearRect","makeEmpty","clearColor","clearDepth","clearStencil","isCamera","background","isColor","projectScene","elements","lights","getNormalMatrix","matrixWorldInverse","isAmbientLight","material","RenderableSprite","RenderableLine","v1","v2","setFromPoints","intersectsBox","RenderableFace","v3","overdraw","union","error","RenderableObject","object","renderOrder","RenderableVertex","vertexNormalsLength","Vector2","position","Vector4","visible","push","applyMatrix4","objects","abs","projectionMatrix","lerp","Box3","Array","Matrix4","Frustum","projectVector","project","unprojectVector","unproject","pickingRay","setObject","projectVertex","checkTriangleVisibility","checkBackfaceCulling","pushVertex","pushNormal","pushColor","pushUv","pushLine","fromArray","pushTriangle","side","DoubleSide","arguments","autoUpdate","updateMatrixWorld","parent","multiplyMatrices","setFromMatrix","Light","Mesh","Line","Points","frustumCulled","intersectsObject","Sprite","intersectsSprite","children","sort","geometry","BufferGeometry","attributes","groups","array","normal","uv","index","start","count","Geometry","faceVertexUvs","isArray","morphTargets","morphTargetInfluences","materialIndex","FrontSide","BackSide","negate","vertexNormals","LineSegments","colors"],"mappings":"aAAA,IAAIA,QAAQ,SAASC,MAAMC,qBAAqB,SAASC,GAAGF,MAAMG,SAASC,KAAKC,MAAMA,KAAKC,KAAK,uBAAuBD,KAAKE,MAAM,IAAIP,MAAMQ,MAAM,UAAUH,KAAKI,QAAQ,aAAaJ,KAAKK,UAAUR,IAAIF,MAAMC,qBAAqBU,UAAUC,OAAOC,OAAOb,MAAMG,SAASQ,WAAWX,MAAMC,qBAAqBU,UAAUG,YAAYd,MAAMC,qBAAqBD,MAAMC,qBAAqBU,UAAUI,wBAAuB,EAAGf,MAAMC,qBAAqBU,UAAUK,MAAM,WAAW,IAAId,EAAE,IAAIF,MAAMC,qBAAqB,OAAOC,EAAEe,KAAKZ,MAAMH,EAAEK,MAAMU,KAAKZ,KAAKE,OAAOL,EAAEO,QAAQJ,KAAKI,QAAQP,GAAGF,MAAMkB,eAAe,SAAShB,GAA8qB,SAASiB,EAAEjB,EAAEkB,EAAEC,GAAGC,EAAED,EAAEE,SAASC,EAAEH,EAAEI,UAAU,IAAIN,EAAEC,EAAEM,MAAMC,EAAEC,EAAEC,EAAET,EAAEM,MAAMI,EAAEC,EAAEC,EAAEC,KAAKC,KAAKf,EAAEA,EAAEU,EAAEA,GAAG,GAAGM,GAAGC,IAAIC,IAAInC,EAAEyB,EAAEK,EAAE9B,EAAE4B,EAAEE,GAAGG,GAAGG,IAAID,IAAInC,EAAEyB,EAAEK,EAAE9B,EAAE4B,EAAEE,GAAGX,EAAEkB,iBAAiB,CAAC,IAAIC,EAAEnB,EAAEoB,IAAI,GAAG,OAAOD,EAAE,CAAC,IAAIE,EAAEC,GAAGH,EAAEI,IAAI,QAAG,IAASF,GAAGA,EAAEG,UAAUL,EAAEK,UAAUH,EAAEI,EAAEN,GAAGG,GAAGH,EAAEI,IAAIF,QAAG,IAASA,EAAEK,OAAO,CAACjB,EAAEY,EAAEK,QAAQ,IAAIC,EAAER,EAAES,MAAMC,EAAEF,EAAEG,MAAMX,EAAEY,OAAOzB,EAAE0B,EAAEL,EAAEM,OAAOd,EAAEY,OAAOtB,EAAEyB,EAAEP,EAAEG,MAAMX,EAAEgB,OAAO7B,EAAE8B,EAAET,EAAEM,OAAOd,EAAEgB,OAAO1B,EAAE4B,EAAEvC,EAAEoC,EAAE5B,EAAEE,EAAE4B,EAAEE,EAAEC,OAAOD,EAAEE,UAAU3D,EAAEyB,EAAEzB,EAAE4B,GAAG,IAAIT,EAAEyC,UAAUH,EAAEI,OAAO1C,EAAEyC,UAAUH,EAAEE,WAAW1C,EAAE,GAAGU,EAAE,GAAG8B,EAAEjC,MAAMgC,EAAE/B,GAAGgC,EAAEE,WAAWX,GAAGG,GAAGM,EAAEK,SAASd,EAAEG,EAAEE,EAAEE,GAAGE,EAAEM,gBAAgBnC,EAAET,EAAEd,MAAM2D,YAAYP,EAAEC,OAAOD,EAAEE,UAAU3D,EAAEyB,EAAEzB,EAAE4B,GAAG,IAAIT,EAAEyC,UAAUH,EAAEI,OAAO1C,EAAEyC,UAAUH,EAAEjC,MAAMP,GAAGU,GAAG8B,EAAEK,UAAU,IAAI,GAAG,EAAE,GAAGL,EAAEM,eAAe5C,EAAEN,wBAAwBoD,EAAE9C,EAAEd,MAAM2D,YAAYpC,EAAET,EAAEd,MAAM2D,YAAYP,EAAEC,OAAOD,EAAEE,UAAU3D,EAAEyB,EAAEzB,EAAE4B,GAAG,IAAIT,EAAEyC,UAAUH,EAAEI,OAAO1C,EAAEyC,UAAUH,EAAEjC,MAAMP,EAAEU,GAAGR,EAAEZ,QAAQkD,GAAGA,EAAEM,WAAW5C,EAAE+C,mBAAmBtC,EAAET,EAAEd,MAAM2D,YAAYP,EAAEC,OAAOD,EAAEE,UAAU3D,EAAEyB,EAAEzB,EAAE4B,GAAG,IAAIT,EAAEyC,UAAUH,EAAEI,OAAO1C,EAAEyC,UAAUH,EAAEjC,MAAMP,EAAEE,EAAEgD,MAAMxC,EAAER,EAAEgD,MAAMV,EAAEK,UAAU,IAAI,GAAG,EAAE,GAAGL,EAAEM,WAAW,SAASpC,EAAE3B,EAAEkB,EAAEC,EAAEF,GAAG,GAAGG,EAAEH,EAAEI,SAASC,EAAEL,EAAEM,UAAUkC,EAAEW,YAAYX,EAAEY,OAAOrE,EAAEsE,eAAe7C,EAAEzB,EAAEsE,eAAe1C,GAAG6B,EAAEc,OAAOrD,EAAEoD,eAAe7C,EAAEP,EAAEoD,eAAe1C,GAAGX,EAAEuD,oBAAoB,CAAC,GAAGnB,EAAEpC,EAAEwD,WAAWlB,EAAEtC,EAAEyD,SAASlB,EAAEvC,EAAE0D,UAAU1D,EAAE2D,eAAe9E,MAAM+E,aAAaZ,EAAEhD,EAAEZ,MAAM2D,gBAAgB,CAAC,IAAIrC,EAAER,EAAEyD,aAAa,GAAGZ,WAAWlC,EAAEX,EAAEyD,aAAa,GAAGZ,WAAW,GAAGrC,IAAIG,EAAEmC,EAAEtC,OAAO,CAAC,IAAI,IAAIW,EAAEmB,EAAEqB,qBAAqB9E,EAAEsE,eAAe7C,EAAEzB,EAAEsE,eAAe1C,EAAEV,EAAEoD,eAAe7C,EAAEP,EAAEoD,eAAe1C,GAAGU,EAAEyC,aAAa,EAAEpD,GAAGW,EAAEyC,aAAa,EAAEjD,GAAG,MAAM9B,GAAGsC,EAAEX,EAAEsC,EAAE3B,IAAIrB,EAAE+D,sBAAsBvD,EAAE,CAACR,EAAEgE,SAAShE,EAAEiE,UAAUzB,EAAE0B,SAASlD,GAAGmD,eAAe,EAAEnE,EAAEwD,WAAWxD,EAAE+D,sBAAsBvD,EAAE,KAAK,SAASK,EAAE9B,EAAEkB,EAAED,EAAEU,EAAEG,EAAEc,EAAEO,EAAEE,GAAG,GAAGgC,EAAEC,KAAKC,OAAOC,UAAU,EAAEH,EAAEC,KAAKC,OAAOE,QAAQrE,EAAEiC,EAAEhC,SAASC,EAAE+B,EAAE9B,UAAUmE,EAAE1F,EAAEsE,eAAe7C,EAAEkE,EAAE3F,EAAEsE,eAAe1C,EAAEgE,EAAE1E,EAAEoD,eAAe7C,EAAEoE,EAAE3E,EAAEoD,eAAe1C,EAAEkE,EAAE7E,EAAEqD,eAAe7C,EAAEsE,EAAE9E,EAAEqD,eAAe1C,EAAk+C5B,EAA99C0F,EAAg+CxE,EAA99CyE,EAAg+CxE,EAA99CyE,EAAg+C3E,EAA99C4E,EAAg+ClE,EAA99CmE,EAAg+ChE,EAA99CiE,EAAi+CtC,EAAEW,YAAYX,EAAEY,OAAOrE,EAAEkB,GAAGuC,EAAEc,OAAOpD,EAAEF,GAAGwC,EAAEc,OAAO5C,EAAEG,GAAG2B,EAAEuC,aAAvhD3C,EAAE4C,uBAAuB5C,EAAE6C,qBAAqB7C,EAAE8C,yBAAyB,OAAO9C,EAAEd,IAAI6D,GAAGrF,KAAKsC,EAAEhD,OAAOgG,GAAGtF,KAAKsC,EAAEiD,UAAUjD,EAAEuB,eAAe9E,MAAMyG,YAAYH,GAAGI,SAASrD,EAAE9C,OAAOoG,GAAG1F,KAAK2F,IAAIC,GAAG5F,KAAKf,EAAE4G,eAAeC,IAAI3F,EAAE0F,eAAeC,IAAI5F,EAAE2F,eAAeE,aAAa,GAAjrF,SAAW9G,EAAEkB,EAAEC,GAAG,IAAI,IAAIF,EAAE,EAAEU,EAAEoF,EAAEC,OAAO/F,EAAEU,EAAEV,IAAI,CAAC,IAAIa,EAAEiF,EAAE9F,GAAG,GAAGgG,GAAGlG,KAAKe,EAAEzB,OAAOyB,EAAEoF,mBAAmB,CAAC,IAAI5E,EAAE6E,GAAGC,sBAAsBtF,EAAEuF,aAAaC,YAAuB,IAAX9E,EAAEtB,EAAEqG,IAAIjF,KAAS,EAAE,SAASE,GAAGV,EAAE0F,UAAUrG,EAAE0F,IAAII,GAAGQ,eAAejF,SAAS,GAAGV,EAAE4F,aAAa,CAAC,IAA8ClF,EAAwC,GAAlFF,EAAE6E,GAAGC,sBAAsBtF,EAAEuF,cAAa7E,EAAEtB,EAAEqG,IAAIJ,GAAGQ,WAAWrF,EAAEtC,GAAGsH,eAAmB,EAAE,SAAS,GAAG,IAAI9E,GAAG,GAAGV,EAAE8F,SAAS,EAAE,EAAE7F,KAAKG,IAAIlC,EAAE6H,WAAWvF,GAAGR,EAAE8F,SAAS,IAAI,SAASpF,GAAGV,EAAE0F,UAAUrG,EAAE0F,IAAII,GAAGQ,eAAejF,MAAytErB,CAAEwF,GAAGxD,EAAE2E,YAAYrB,IAAIA,GAAGD,SAASJ,IAAIS,IAAIR,KAAI,IAAKhD,EAAE0E,UAAUvF,EAAEiE,GAAGpD,EAAE2E,mBAAmB3E,EAAE4E,iBAAiB5E,EAAE6E,mBAAmBpF,EAAE2D,SAAS,GAAGpD,EAAE8E,qBAAqB9E,EAAE4C,uBAAuB5C,EAAE6C,qBAAqB7C,EAAE8C,uBAA5E,CAAmG,GAAG,OAAO9C,EAAEd,IAAWc,EAAEd,IAAI6F,UAAYtI,MAAMuI,YAAYC,EAAEnF,EAAEoF,IAAIvF,EAAE0C,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEuC,EAAE3G,GAAGF,EAAE6G,EAAE3G,GAAGC,EAAE0G,EAAExG,GAAGL,EAAE6G,EAAExG,GAAGF,EAAE0G,EAAE1F,GAAGnB,EAAE6G,EAAE1F,GAAGhB,EAAEyB,EAAEd,WAAW,OAAOc,EAAEmF,OAAOnF,EAAEmF,OAAOJ,UAAUtI,MAAM2I,6BAA6BC,GAAG3H,KAAKoC,EAAEwF,mBAAmBhH,IAAIiH,aAAaC,IAAIC,EAAE,GAAGJ,GAAGjH,EAAE,GAAGsH,EAAE,GAAGL,GAAG9G,EAAE,GAAG8G,GAAG3H,KAAKoC,EAAEwF,mBAAmB7G,IAAI8G,aAAaC,IAAIG,EAAE,GAAGN,GAAGjH,EAAE,GAAGwH,EAAE,GAAGP,GAAG9G,EAAE,GAAG8G,GAAG3H,KAAKoC,EAAEwF,mBAAmB/F,IAAIgG,aAAaC,IAAIK,EAAE,GAAGR,GAAGjH,EAAE,GAAG0H,EAAE,GAAGT,GAAG9G,EAAE,GAAGoB,EAAE0C,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE+C,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE9F,EAAEmF,UAAU/B,GAAG1F,KAAKsC,EAAEhD,OAAOgD,EAAEuB,eAAe9E,MAAMyG,YAAYE,GAAGD,SAASrD,EAAE9C,QAAO,IAAKgD,EAAE0E,UAAUvF,EAAEiE,GAAGpD,EAAE2E,mBAAmB3E,EAAE4E,iBAAiB5E,EAAE6E,mBAAmBpF,EAAE2D,UAAUpD,EAAE+F,sBAAsBV,GAAG3H,KAAKoC,EAAE2E,aAAac,aAAaC,IAAIpC,GAAG4C,OAAOX,GAAGjH,EAAEiH,GAAG9G,EAAE8G,GAAG7C,GAAG4B,eAAe,IAAI6B,UAAU,KAA+F7C,GAAG4C,OAAO,EAAE,EAAE,IAAzG,IAAKhG,EAAE0E,UAAUvF,EAAEiE,GAAGpD,EAAE2E,mBAAmB3E,EAAE4E,iBAAiB5E,EAAE6E,mBAAmBpF,EAAE2D,IAAiH,IAAWzG,EAAEkB,EAAEC,EAAEF,EAAEU,EAAEG,EAAyE,SAASU,EAAExC,EAAEkB,EAAEC,EAAEF,GAAGoC,EAAEnC,GAAGqC,EAAEpC,GAAGqC,EAAEvC,GAAGgD,EAAEjE,EAAEgE,YAAYP,EAAE0B,SAASlD,GAAGmD,eAAe,EAAElE,GAAG,SAAS4B,EAAE9C,GAAG4B,EAAE5B,EAAEgE,YAAYP,EAAE8F,OAAO,SAAS3G,EAAE5C,GAAG,GAAG,IAAIA,EAAE2C,SAAS3C,aAAaF,MAAM0J,mBAAmBxJ,aAAaF,MAAM2J,YAAY,MAAM,CAAC5G,YAAO,EAAOF,QAAQ3C,EAAE2C,SAAS,IAAIzB,EAAElB,EAAE+C,MAAM,IAAG,IAAK7B,EAAEwI,SAAS,MAAM,CAAC7G,YAAO,EAAOF,QAAQ,GAAG,IAAIxB,EAAEnB,EAAE2J,QAAQ7J,MAAM8J,gBAAgB5J,EAAE2J,QAAQ7J,MAAM+J,uBAAuB5I,EAAEjB,EAAE8J,QAAQhK,MAAM8J,gBAAgB5J,EAAE8J,QAAQhK,MAAM+J,uBAAuBlI,EAAE3B,EAAE2J,QAAQ7J,MAAM+J,uBAAuB/H,EAAE9B,EAAE8J,QAAQhK,MAAM+J,uBAAuBvH,EAAEyH,SAASC,cAAc,UAAU1H,EAAEW,MAAM/B,EAAE+B,OAAOtB,EAAE,EAAE,GAAGW,EAAEc,OAAOlC,EAAEkC,QAAQtB,EAAE,EAAE,GAAG,IAAIU,EAAEF,EAAE2H,WAAW,MAAMzH,EAAE0H,aAAa,EAAE,EAAE,GAAG,EAAE,EAAEhJ,EAAEkC,QAAQZ,EAAE2H,UAAUjJ,EAAE,EAAE,IAAG,IAAKS,IAAIa,EAAE0H,cAAc,EAAE,EAAE,GAAG,EAAEhJ,EAAE+B,MAAM/B,EAAEkC,QAAQZ,EAAE2H,UAAUjJ,GAAGA,EAAE+B,MAAM,KAAI,IAAKnB,IAAIU,EAAE0H,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG1H,EAAE2H,UAAUjJ,EAAE,EAAEA,EAAEkC,UAAS,IAAKzB,IAAG,IAAKG,IAAIU,EAAE0H,cAAc,EAAE,EAAE,EAAE,EAAEhJ,EAAE+B,MAAM,GAAGT,EAAE2H,UAAUjJ,GAAGA,EAAE+B,MAAM/B,EAAEkC,SAAS,IAAIN,EAAE,aAAY,IAAK3B,IAAG,IAAKF,EAAE6B,EAAE,UAAS,IAAK3B,EAAE2B,EAAE,YAAW,IAAK7B,IAAI6B,EAAE,YAAY,IAAIF,EAAEa,EAAE2G,cAAc9H,EAAEQ,GAAG,OAAO9C,EAAEqK,UAAUrK,EAAEqK,SAASrK,GAAG,CAAC6C,OAAOD,EAAED,QAAQ3C,EAAE2C,SAAS,SAASK,EAAEhD,EAAEkB,EAAEC,EAAEF,EAAEU,EAAEG,EAAEQ,EAAEE,EAAEM,EAAEE,EAAEG,EAAE/B,EAAEE,GAAG,IAAI+B,EAAEZ,GAAGnB,EAAEoB,IAAI,QAAG,IAASW,GAAGA,EAAEV,UAAUrB,EAAEqB,UAAUU,EAAET,EAAEtB,GAAGmB,GAAGnB,EAAEoB,IAAIW,QAAG,IAASA,EAAER,OAAO,OAAOjB,EAAE,0BAA0B6B,EAAE8F,OAAO3H,EAAEyB,EAAER,QAAQ,IAAIU,EAAEC,EAAES,EAAExC,EAAE6I,EAAEC,EAAExD,EAAEyD,EAAEC,EAAEnJ,EAAE4B,OAAOzB,EAAEH,EAAEgC,OAAO7B,EAAEiJ,EAAEpJ,EAAE4B,OAAOtB,EAAEN,EAAEgC,OAAO1B,EAAE8D,EAAEpE,EAAEyB,MAAME,MAAM3B,EAAEgC,OAAO7B,EAAEkE,EAAErE,EAAEyB,MAAMK,OAAO9B,EAAEgC,OAAO1B,EAAsBkB,GAAGA,EAAE2H,GAAG/E,EAAE1C,GAAGA,EAAE0H,GAAG/E,EAAExC,GAAGA,EAAEsH,GAAG/E,EAAEtE,GAAGA,EAAEsJ,GAAG/E,EAAExE,GAAGnB,EAAEiB,GAAGC,EAAES,GAAG3B,EAAE8B,GAAGZ,EAAsB,IAAK6F,GAAzBjE,GAAhFR,GAAGA,EAAEmI,GAAG/E,IAAuFtE,GAArFoB,GAAGA,EAAEkI,GAAG/E,IAAwExC,GAAGb,IAARU,GAAGR,MAA4F8H,EAAEtK,GAA1DuD,GAAGnC,EAAED,EAAE6B,EAAErB,IAAf6I,EAAE,EAAEzD,IAAgEzE,GAAlC2B,GAAGnB,EAAEnB,EAAEwB,EAAEhC,GAAGqJ,GAA0BhI,EAAE+H,EAAErJ,GAAxDsC,GAAGpC,EAAEH,EAAE+B,EAAElB,GAAG0I,GAAgDlI,GAAhCb,GAAGqB,EAAEhB,EAAEqB,EAAElC,GAAGuJ,GAAwBhI,EAAEiB,EAAEC,OAAOD,EAAEkH,UAAUpH,EAAEC,EAAES,EAAExC,EAAE6I,EAAEC,GAAG9G,EAAE8F,OAAO9F,EAAEM,WAAW,SAASZ,EAAEnD,EAAEkB,EAAEC,GAAG,IAAIF,EAAEU,EAAET,EAAEO,EAAEzB,EAAEyB,EAAEK,EAAEZ,EAAEU,EAAE5B,EAAE4B,EAAEU,EAAEX,EAAEA,EAAEG,EAAEA,EAAE,IAAIQ,IAAqBX,GAAjBV,EAAEE,EAAEY,KAAKC,KAAKM,GAAQR,GAAGb,EAAEC,EAAEO,GAAGE,EAAET,EAAEU,GAAGE,EAAE9B,EAAEyB,GAAGE,EAAE3B,EAAE4B,GAAGE,GAAG,SAASV,EAAEpB,GAAG4K,IAAK5K,IAAIyD,EAAEoH,YAAY7K,EAAE4K,EAAG5K,GAAG,SAASsB,EAAEtB,GAAG8K,IAAK9K,IAAIA,IAAIF,MAAMiL,eAAetH,EAAEuH,yBAAyB,cAAchL,IAAIF,MAAMmL,iBAAiBxH,EAAEuH,yBAAyB,UAAUhL,IAAIF,MAAMoL,oBAAoBzH,EAAEuH,yBAAyB,SAAShL,IAAIF,MAAMqL,mBAAmB1H,EAAEuH,yBAAyB,YAAYF,EAAG9K,GAAG,SAASqD,EAAErD,GAAGoL,KAAKpL,IAAIyD,EAAE4H,UAAUrL,EAAEoL,GAAGpL,GAAG,SAASuD,EAAEvD,GAAGsL,KAAKtL,IAAIyD,EAAE8H,QAAQvL,EAAEsL,GAAGtL,GAAG,SAASwD,EAAExD,GAAGwL,KAAKxL,IAAIyD,EAAEgI,SAASzL,EAAEwL,GAAGxL,GAAG,SAASiE,EAAEjE,GAAG0L,KAAK1L,IAAIyD,EAAEkI,YAAY3L,EAAE0L,GAAG1L,GAAG,SAAS4B,EAAE5B,GAAG4L,KAAK5L,IAAIyD,EAAEoI,UAAU7L,EAAE4L,GAAG5L,GAAG,SAASyB,EAAEzB,GAAG8L,EAAG9E,SAAShH,EAAEgH,SAASvD,EAAEsI,YAAY/L,GAAG8L,EAAG9L,GAAGgM,QAAQC,IAAI,uBAAuBnM,MAAMoM,UAAUlM,EAAEA,GAAG,GAAG,IAAIsK,EAAEC,EAAExD,EAAEyD,EAAEC,EAAEC,EAAEhF,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEuC,EAAEQ,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE9D,EAAElF,KAAKgM,EAAE,IAAIrM,MAAMsM,UAAUC,OAAE,IAASrM,EAAE6C,OAAO7C,EAAE6C,OAAOkH,SAASC,cAAc,UAAUsC,EAAED,EAAEpJ,MAAMsJ,EAAEF,EAAEjJ,OAAO1B,EAAEK,KAAKyK,MAAMF,EAAE,GAAGzK,EAAEE,KAAKyK,MAAMD,EAAE,GAAGE,EAAE,EAAEC,EAAE,EAAEC,EAAEL,EAAEM,EAAEL,EAAEM,EAAE,EAAEpJ,EAAE4I,EAAEpC,WAAW,KAAK,CAAC6C,OAAM,IAAK9M,EAAE8M,QAAQC,EAAE,IAAIjN,MAAMQ,MAAMT,SAASmN,GAAE,IAAKhN,EAAE8M,MAAM,EAAE,EAAElC,EAAG,EAAEE,EAAG,EAAEY,GAAG,KAAKE,GAAG,KAAKR,GAAG,KAAKE,GAAG,KAAKE,GAAG,KAAKM,EAAG,GAAGrF,GAAG,IAAI3G,MAAMQ,MAAM8F,GAAG,IAAItG,MAAMQ,MAAM+F,GAAG,IAAIvG,MAAMQ,MAAM2G,GAAG,IAAInH,MAAMQ,MAAMmC,GAAG,GAAGwK,GAAG,IAAInN,MAAMoN,KAAKC,GAAG,IAAIrN,MAAMoN,KAAKjL,GAAG,IAAInC,MAAMoN,KAAKxG,GAAG,IAAI5G,MAAMQ,MAAM8M,GAAG,IAAItN,MAAMQ,MAAM+M,GAAG,IAAIvN,MAAMQ,MAAM6G,GAAG,IAAIrH,MAAMwN,QAAQ3G,GAAG,IAAI7G,MAAMwN,QAAQ5E,GAAG,IAAI5I,MAAMwN,QAAQzE,GAAG,IAAI/I,MAAMyN,aAAQ,IAAS9J,EAAEsI,cAActI,EAAEsI,YAAY,cAAc5L,KAAKqN,WAAWnB,EAAElM,KAAKsN,WAAU,EAAGtN,KAAKuN,aAAY,EAAGvN,KAAKwN,cAAa,EAAGxN,KAAKmF,KAAK,CAACC,OAAO,CAACC,SAAS,EAAEC,MAAM,IAAItF,KAAK8J,WAAW,WAAW,OAAOxG,GAAGtD,KAAKyN,qBAAqB,WAAW,OAAOnK,EAAEmK,wBAAwBzN,KAAK0N,cAAc,WAAW,OAAOhB,GAAG1M,KAAK2N,cAAc,SAAS9N,QAAG,IAASA,IAAI6M,EAAE7M,IAAIG,KAAK4N,QAAQ,SAAS/N,EAAEkB,EAAEC,GAAGmL,EAAEtM,EAAE6M,EAAEN,EAAErL,EAAE2L,EAAER,EAAEpJ,MAAMqJ,EAAED,EAAEjJ,OAAOmJ,EAAE7K,EAAEK,KAAKyK,MAAMF,EAAE,GAAGzK,EAAEE,KAAKyK,MAAMD,EAAE,IAAG,IAAKpL,IAAIkL,EAAE2B,MAAM/K,MAAMjD,EAAE,KAAKqM,EAAE2B,MAAM5K,OAAOlC,EAAE,MAAM+L,GAAG/K,IAAIC,KAAKT,GAAGG,GAAGoL,GAAG7K,IAAID,IAAIT,EAAEG,GAAGsL,GAAGjL,IAAIC,KAAKT,GAAGG,GAAGsL,GAAG/K,IAAID,IAAIT,EAAEG,GAAG+I,EAAG,EAAEE,EAAG,EAAkCU,GAARF,GAARF,GAARQ,GAARF,GAAG,KAAqCvL,KAAK8N,YAAY,EAAE,EAAEjO,EAAEkB,IAAIf,KAAK8N,YAAY,SAASjO,EAAEkB,EAAEC,EAAEF,GAAGwL,EAAEzM,EAAE6M,EAAEH,EAAExL,EAAE2L,EAAEF,EAAExL,EAAE0L,EAAED,EAAE3L,EAAE4L,GAAG1M,KAAK+N,WAAW,aAAa/N,KAAKgO,eAAe,aAAahO,KAAKiO,cAAc,SAASpO,EAAEkB,GAAG6L,EAAE5K,IAAInC,GAAGgN,OAAE,IAAS9L,EAAEA,EAAE,EAAEiM,GAAGjL,IAAIC,KAAKT,GAAGG,GAAGsL,GAAG/K,IAAID,IAAIT,EAAEG,IAAI1B,KAAKkO,iBAAiB,SAASrO,EAAEkB,GAAG8K,QAAQsC,KAAK,6FAA6FnO,KAAKiO,cAAcpO,EAAEkB,IAAIf,KAAKoO,cAAc,WAAW,OAAOxB,GAAG5M,KAAKqO,cAAc,WAAW,OAAOxB,GAAG7M,KAAKsO,iBAAiB,WAAW,OAAO,GAAGtO,KAAKuO,MAAM,YAAW,IAAKvB,GAAGwB,YAAYxB,GAAGyB,UAAU3B,IAAIE,GAAG/H,eAAe,GAAG+H,GAAGjL,IAAIT,EAAE0L,GAAGjL,IAAIT,EAAEC,EAAEyL,GAAGjL,IAAIN,GAAGuL,GAAGjL,IAAIN,EAAEC,EAAEsL,GAAG/K,IAAIX,EAAE0L,GAAG/K,IAAIX,EAAEC,EAAEyL,GAAG/K,IAAIR,GAAGuL,GAAG/K,IAAIR,EAAEC,EAAEmL,EAAE,GAAGvJ,EAAEoL,UAAU,EAAE1B,GAAGjL,IAAIT,EAAE,EAAE0L,GAAG/K,IAAIR,EAAEuL,GAAG/K,IAAIX,EAAE0L,GAAGjL,IAAIT,EAAE,EAAE0L,GAAGjL,IAAIN,EAAEuL,GAAG/K,IAAIR,EAAE,GAAK,EAAFoL,IAAM5L,EAAE,GAAGE,EAAExB,MAAMiL,gBAAgBnJ,EAAE,QAAQG,KAAKyK,MAAM,IAAIO,EAAE7L,GAAG,IAAIa,KAAKyK,MAAM,IAAIO,EAAEhG,GAAG,IAAIhF,KAAKyK,MAAM,IAAIO,EAAEnH,GAAG,IAAIoH,EAAE,KAAKvJ,EAAEK,SAAS,EAAEqJ,GAAGjL,IAAIT,EAAE,EAAE0L,GAAG/K,IAAIR,EAAEuL,GAAG/K,IAAIX,EAAE0L,GAAGjL,IAAIT,EAAE,EAAE0L,GAAGjL,IAAIN,EAAEuL,GAAG/K,IAAIR,EAAE,IAAIuL,GAAG2B,cAAc3O,KAAK4O,WAAW,aAAa5O,KAAK6O,WAAW,aAAa7O,KAAK8O,aAAa,aAAa9O,KAAKoF,OAAO,SAASvF,EAAEmB,GAAG,QAAG,IAASA,EAAE+N,SAAd,CAA4H,IAAI5M,EAAEtC,EAAEmP,WAAW7M,GAAGA,EAAE8M,SAAShO,EAAE,GAAGE,EAAExB,MAAMiL,gBAAgBnJ,EAAEU,EAAE0B,YAAYP,EAAEK,SAAS,EAAE,EAAEwI,EAAEC,KAAI,IAAKpM,KAAKsN,WAAWtN,KAAKuO,QAAQrJ,EAAEC,KAAKC,OAAOC,SAAS,EAAEH,EAAEC,KAAKC,OAAOE,MAAM,EAAEhC,EAAEyG,aAAayC,EAAEL,EAAE,EAAE,GAAGM,EAAEL,EAAEE,EAAEF,EAAEG,GAAGjJ,EAAEE,UAAUjC,EAAEG,GAAGyI,EAAE6B,EAAEkD,aAAarP,EAAEmB,EAAEhB,KAAKuN,YAAYvN,KAAKwN,cAAcpD,EAAED,EAAEgF,SAASvI,EAAEuD,EAAEiF,OAAO1G,GAAG2G,gBAAgBrO,EAAEsO,oBAAr1S,WAAa/I,GAAG2C,OAAO,EAAE,EAAE,GAAG+D,GAAG/D,OAAO,EAAE,EAAE,GAAGgE,GAAGhE,OAAO,EAAE,EAAE,GAAG,IAAI,IAAIrJ,EAAE,EAAEkB,EAAE6F,EAAEC,OAAOhH,EAAEkB,EAAElB,IAAI,CAAC,IAAImB,EAAE4F,EAAE/G,GAAGiB,EAAEE,EAAEd,MAAMc,EAAEuO,eAAehJ,GAAGG,IAAI5F,GAAGE,EAAE+F,mBAAmBkG,GAAGvG,IAAI5F,GAAGE,EAAEuG,cAAc2F,GAAGxG,IAAI5F,IAAmqSC,GAAI,IAAI,IAAIsB,EAAE,EAAEM,EAAEyH,EAAEvD,OAAOxE,EAAEM,EAAEN,IAAI,CAAC,IAAII,EAAE2H,EAAE/H,GAAGQ,EAAEJ,EAAE+M,SAAS,QAAG,IAAS3M,GAAG,IAAIA,EAAE3B,QAAQ,CAAC,GAAGY,GAAG6M,YAAYlM,aAAa9C,MAAM8P,kBAAiBpF,EAAE5H,GAAInB,GAAGC,EAAE8I,EAAE5I,GAAGC,EAAEZ,EAAEuJ,EAAE5H,EAAEI,QAAQ,GAAGJ,aAAa9C,MAAM+P,eAAerF,EAAE5H,EAAEkN,GAAGrF,EAAE7H,EAAEmN,GAAGvF,EAAElG,eAAe7C,GAAGC,EAAE8I,EAAElG,eAAe1C,GAAGC,EAAE4I,EAAEnG,eAAe7C,GAAGC,EAAE+I,EAAEnG,eAAe1C,GAAGC,EAAEI,GAAG+N,cAAc,CAACxF,EAAElG,eAAemG,EAAEnG,kBAAiB,IAAK2I,GAAGgD,cAAchO,KAAKN,EAAE6I,EAAEC,EAAE7H,EAAEI,QAAQ,GAAGJ,aAAa9C,MAAMoQ,eAAe,CAAC,GAAG1F,EAAE5H,EAAEkN,GAAGrF,EAAE7H,EAAEmN,GAAGrF,EAAE9H,EAAEuN,GAAG3F,EAAElG,eAAeuB,GAAG,GAAsB,EAAnB2E,EAAElG,eAAeuB,EAAI,SAAS,GAAG4E,EAAEnG,eAAeuB,GAAG,GAAsB,EAAnB4E,EAAEnG,eAAeuB,EAAI,SAAS,GAAG6E,EAAEpG,eAAeuB,GAAG,GAAsB,EAAnB6E,EAAEpG,eAAeuB,EAAI,SAAS2E,EAAElG,eAAe7C,GAAGC,EAAE8I,EAAElG,eAAe1C,GAAGC,EAAE4I,EAAEnG,eAAe7C,GAAGC,EAAE+I,EAAEnG,eAAe1C,GAAGC,EAAE6I,EAAEpG,eAAe7C,GAAGC,EAAEgJ,EAAEpG,eAAe1C,GAAGC,EAAa,EAAXmB,EAAEoN,WAAajN,EAAEqH,EAAElG,eAAemG,EAAEnG,eAAetB,EAAEoN,UAAUjN,EAAEsH,EAAEnG,eAAeoG,EAAEpG,eAAetB,EAAEoN,UAAUjN,EAAEuH,EAAEpG,eAAekG,EAAElG,eAAetB,EAAEoN,WAAWnO,GAAG+N,cAAc,CAACxF,EAAElG,eAAemG,EAAEnG,eAAeoG,EAAEpG,kBAAiB,IAAK2I,GAAGgD,cAAchO,KAAKH,EAAE0I,EAAEC,EAAEC,EAAE,EAAE,EAAE,EAAE9H,EAAEI,GAAGmK,GAAGkD,MAAMpO,KAAKwB,EAAEyG,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,QAA1/C8B,QAAQsE,MAAM,6EAAi/CxQ,MAAMyQ,iBAAiB,WAAWpQ,KAAKuC,GAAG,EAAEvC,KAAKqQ,OAAO,KAAKrQ,KAAK0F,EAAE,EAAE1F,KAAKsQ,YAAY,GAAG3Q,MAAMoQ,eAAe,WAAW/P,KAAKuC,GAAG,EAAEvC,KAAK2P,GAAG,IAAIhQ,MAAM4Q,iBAAiBvQ,KAAK4P,GAAG,IAAIjQ,MAAM4Q,iBAAiBvQ,KAAKgQ,GAAG,IAAIrQ,MAAM4Q,iBAAiBvQ,KAAK2H,YAAY,IAAIhI,MAAMwN,QAAQnN,KAAKwI,mBAAmB,CAAC,IAAI7I,MAAMwN,QAAQ,IAAIxN,MAAMwN,QAAQ,IAAIxN,MAAMwN,SAASnN,KAAKwQ,oBAAoB,EAAExQ,KAAKE,MAAM,IAAIP,MAAMQ,MAAMH,KAAKwP,SAAS,KAAKxP,KAAKoI,IAAI,CAAC,IAAIzI,MAAM8Q,QAAQ,IAAI9Q,MAAM8Q,QAAQ,IAAI9Q,MAAM8Q,SAASzQ,KAAK0F,EAAE,EAAE1F,KAAKsQ,YAAY,GAAG3Q,MAAM4Q,iBAAiB,WAAWvQ,KAAK0Q,SAAS,IAAI/Q,MAAMwN,QAAQnN,KAAKyG,cAAc,IAAI9G,MAAMwN,QAAQnN,KAAKmE,eAAe,IAAIxE,MAAMgR,QAAQ3Q,KAAK4Q,SAAQ,GAAIjR,MAAM4Q,iBAAiBjQ,UAAUM,KAAK,SAASf,GAAGG,KAAKyG,cAAc7F,KAAKf,EAAE4G,eAAezG,KAAKmE,eAAevD,KAAKf,EAAEsE,iBAAiBxE,MAAM+P,eAAe,WAAW1P,KAAKuC,GAAG,EAAEvC,KAAK2P,GAAG,IAAIhQ,MAAM4Q,iBAAiBvQ,KAAK4P,GAAG,IAAIjQ,MAAM4Q,iBAAiBvQ,KAAKyE,aAAa,CAAC,IAAI9E,MAAMQ,MAAM,IAAIR,MAAMQ,OAAOH,KAAKwP,SAAS,KAAKxP,KAAK0F,EAAE,EAAE1F,KAAKsQ,YAAY,GAAG3Q,MAAM8P,iBAAiB,WAAWzP,KAAKuC,GAAG,EAAEvC,KAAKqQ,OAAO,KAAKrQ,KAAKsB,EAAE,EAAEtB,KAAKyB,EAAE,EAAEzB,KAAK0F,EAAE,EAAE1F,KAAKyD,SAAS,EAAEzD,KAAKqB,MAAM,IAAI1B,MAAM8Q,QAAQzQ,KAAKwP,SAAS,KAAKxP,KAAKsQ,YAAY,GAAG3Q,MAAMsM,UAAU,WAA0c,SAASlL,EAAElB,IAAGgD,EAA8iB,WAAa,GAAGG,KAAI4D,EAA+D,OAAOwD,EAAEpH,MAArE,IAAInD,EAAE,IAAIF,MAAMyQ,iBAAiB,OAAOhG,EAAEyG,KAAKhR,GAAG+G,IAAI5D,KAAInD,EAA7nBiB,IAAMyB,GAAG1C,EAAE0C,GAAGM,EAAEwN,OAAOxQ,EAAEsI,GAAElB,sBAAsBpH,EAAEqH,aAAaiB,GAAE2I,aAAa9H,IAAGnG,EAAE6C,EAAEyC,GAAEzC,EAAE7C,EAAEyN,YAAYzQ,EAAEyQ,YAAY1K,GAAEmL,QAAQF,KAAKhO,GAAG,SAAS7B,EAAEnB,EAAEkB,EAAEC,GAAG,IAAIF,EAAE,EAAEjB,EAAE0K,EAAE1K,EAAE6F,GAAG5E,GAAQ,GAANjB,EAAE6F,GAAO7F,EAAE6F,GAAG,KAAIjE,EAA6uB,WAAa,GAAGH,KAAIqE,EAA+D,OAAOD,EAAEpE,MAArE,IAAIzB,EAAE,IAAIF,MAAM8P,iBAAiB,OAAO/J,EAAEmL,KAAKhR,GAAG8F,IAAIrE,KAAIzB,EAA5zBwC,IAAME,GAAGxB,EAAEwB,GAAGd,EAAEH,EAAEzB,EAAEyB,EAAER,EAAEW,EAAEA,EAAE5B,EAAE4B,EAAEX,EAAEW,EAAEiE,EAAE7F,EAAE6F,EAAEjE,EAAE6O,YAAYvP,EAAEuP,YAAY7O,EAAE4O,OAAOtP,EAAEU,EAAEgC,SAAS1C,EAAE0C,SAAShC,EAAEJ,MAAMC,EAAEP,EAAEM,MAAMC,EAAEM,KAAKoP,IAAIvP,EAAEH,GAAGzB,EAAEyB,EAAEN,EAAEiQ,iBAAiB9B,SAAS,KAAKtP,EAAE0K,EAAEvJ,EAAEiQ,iBAAiB9B,SAAS,MAAM1N,EAAEJ,MAAMI,EAAEV,EAAEM,MAAMI,EAAEG,KAAKoP,IAAIvP,EAAEA,GAAG5B,EAAE4B,EAAET,EAAEiQ,iBAAiB9B,SAAS,KAAKtP,EAAE0K,EAAEvJ,EAAEiQ,iBAAiB9B,SAAS,MAAM1N,EAAE+N,SAASzO,EAAEyO,SAAS5J,GAAEuJ,SAAS0B,KAAKpP,IAAqG,SAASD,IAAI,GAAGL,KAAImJ,EAA+D,OAAOD,GAAElJ,MAArE,IAAItB,EAAE,IAAIF,MAAM4Q,iBAAiB,OAAOlG,GAAEwG,KAAKhR,GAAGyK,IAAInJ,KAAItB,EAAgB,SAAS8B,IAAI,GAAGyB,KAAImC,EAA6D,OAAOgF,EAAEnH,MAAnE,IAAIvD,EAAE,IAAIF,MAAMoQ,eAAe,OAAOxF,EAAEsG,KAAKhR,GAAG0F,IAAInC,KAAIvD,EAAgB,SAASsC,IAAI,GAAG2B,KAAI2B,EAA6D,OAAOD,EAAE1B,MAAnE,IAAIjE,EAAE,IAAIF,MAAM+P,eAAe,OAAOlK,EAAEqL,KAAKhR,GAAG4F,IAAI3B,KAAIjE,EAAiH,SAAS8C,GAAE9C,EAAEkB,GAAG,OAAOlB,EAAEyQ,cAAcvP,EAAEuP,YAAYzQ,EAAEyQ,YAAYvP,EAAEuP,YAAYzQ,EAAE6F,IAAI3E,EAAE2E,EAAE3E,EAAE2E,EAAE7F,EAAE6F,EAAE7F,EAAE0C,KAAKxB,EAAEwB,GAAG1C,EAAE0C,GAAGxB,EAAEwB,GAAG,EAAE,SAASE,GAAE5C,EAAEkB,GAAG,IAAIC,EAAE,EAAEF,EAAE,EAAEU,EAAE3B,EAAE6F,EAAE7F,EAAE0K,EAAE5I,EAAEZ,EAAE2E,EAAE3E,EAAEwJ,EAAEpI,GAAGtC,EAAE6F,EAAE7F,EAAE0K,EAAElI,GAAGtB,EAAE2E,EAAE3E,EAAEwJ,EAAE,OAAU,GAAH/I,GAAS,GAAHG,GAAS,GAAHQ,GAAS,GAAHE,KAAQb,EAAE,GAAGG,EAAE,GAAGQ,EAAE,GAAGE,EAAE,KAAKb,EAAE,EAAER,EAAEY,KAAKK,IAAIjB,EAAEQ,GAAGA,EAAEG,IAAIA,EAAE,IAAIb,EAAEc,KAAKG,IAAIjB,EAAEU,GAAGA,EAAEG,KAAKQ,EAAE,EAAEnB,EAAEY,KAAKK,IAAIjB,EAAEmB,GAAGA,EAAEE,IAAIA,EAAE,IAAIvB,EAAEc,KAAKG,IAAIjB,EAAEqB,GAAGA,EAAEE,OAAOvB,EAAEE,IAAKnB,EAAEqR,KAAKnQ,EAAEC,GAAGD,EAAEmQ,KAAKrR,EAAE,EAAEiB,GAAG,KAAK,IAAI+B,EAAEG,GAAE/B,EAAEE,GAAE+B,GAAEE,GAAEC,GAAES,GAAErC,EAAEH,GAAE6I,GAAEC,EAAE,GAAGxD,EAAE,EAAEyD,GAAE,GAAGC,EAAE,EAAEC,EAAE,GAAGhF,EAAE,EAAEC,EAAE,GAAGC,EAAE,EAAEC,EAAE,GAAGC,EAAE,EAAEC,GAAE,CAACmL,QAAQ,GAAG3B,OAAO,GAAGD,SAAS,IAAIhH,GAAE,IAAIxI,MAAMwN,QAAQxE,GAAE,IAAIhJ,MAAMgR,QAAQ/H,EAAE,IAAIjJ,MAAMwR,KAAK,IAAIxR,MAAMwN,SAAS,GAAG,GAAG,GAAG,IAAIxN,MAAMwN,QAAQ,EAAE,EAAE,IAAItE,EAAE,IAAIlJ,MAAMwR,KAAKrI,EAAE,IAAIsI,MAAM,GAAGrI,GAAE,IAAIpJ,MAAM0R,QAAQrI,GAAE,IAAIrJ,MAAM0R,QAAQnM,GAAE,IAAIvF,MAAM0R,QAAQrF,GAAE,IAAIrM,MAAMyN,QAAQlB,GAAE,IAAIvM,MAAM2R,QAAQnF,GAAE,IAAIxM,MAAMgR,QAAQvE,GAAE,IAAIzM,MAAMgR,QAAQ3Q,KAAKuR,cAAc,SAAS1R,EAAEkB,GAAG8K,QAAQsC,KAAK,8DAA8DtO,EAAE2R,QAAQzQ,IAAIf,KAAKyR,gBAAgB,SAAS5R,EAAEkB,GAAG8K,QAAQsC,KAAK,kEAAkEtO,EAAE6R,UAAU3Q,IAAIf,KAAK2R,WAAW,WAAW9F,QAAQsE,MAAM,qEAAqE,IAAwmEzO,GAAE,IAApmE,WAA4G,SAASX,EAAElB,GAAG,IAAIkB,EAAElB,EAAE6Q,SAAS1P,EAAEnB,EAAE4G,cAAc3F,EAAEjB,EAAEsE,eAAenD,EAAEJ,KAAKG,GAAG+P,aAAa3G,IAAGrJ,EAAEF,KAAKI,GAAG8P,aAAa9H,IAAG,IAAIxH,EAAE,EAAEV,EAAEyJ,EAAEzJ,EAAEQ,GAAGE,EAAEV,EAAEW,GAAGD,EAAEV,EAAE4E,GAAGlE,EAAE3B,EAAE+Q,SAAc,GAAN9P,EAAEQ,GAAOR,EAAEQ,GAAG,IAAS,GAANR,EAAEW,GAAOX,EAAEW,GAAG,IAAS,GAANX,EAAE4E,GAAO5E,EAAE4E,GAAG,EAAiJ,SAAS7C,EAAEhD,EAAEkB,EAAEC,GAAG,OAAM,IAAKnB,EAAE+Q,UAAS,IAAK7P,EAAE6P,UAAS,IAAK5P,EAAE4P,UAAU9H,EAAE,GAAGjJ,EAAEsE,eAAe2E,EAAE,GAAG/H,EAAEoD,eAAe2E,EAAE,GAAG9H,EAAEmD,eAAeyE,EAAEkH,cAAcjH,EAAEgH,cAAc/G,KAAK,SAAS9F,EAAEnD,EAAEkB,EAAEC,GAAG,OAAOA,EAAEmD,eAAe7C,EAAEzB,EAAEsE,eAAe7C,IAAIP,EAAEoD,eAAe1C,EAAE5B,EAAEsE,eAAe1C,IAAIT,EAAEmD,eAAe1C,EAAE5B,EAAEsE,eAAe1C,IAAIV,EAAEoD,eAAe7C,EAAEzB,EAAEsE,eAAe7C,GAAG,EAAslC,IAAIwC,EAAE,GAAGrC,EAAE,GAAGH,EAAE,GAAG8I,EAAE,KAAKxD,EAAE,KAAK0D,EAAE,IAAI3K,MAAMyN,QAAQ,MAAM,CAACwE,UAA/7D,SAAW/R,GAAO+G,GAAJwD,EAAEvK,GAAM2P,SAASlF,EAAE+E,gBAAgBjF,EAAElD,aAAapD,EAAE+C,OAAO,EAAEpF,EAAEoF,OAAO,EAAEvF,EAAEuF,OAAO,GAA42DgL,cAAc9Q,EAAE+Q,wBAAwBjP,EAAEkP,qBAAqB/O,EAAEgP,WAAttD,SAAWnS,EAAEmB,EAAEF,IAAGG,EAAEO,KAAMkP,SAAS1O,IAAInC,EAAEmB,EAAEF,GAAGC,EAAEE,IAAmrDgR,WAAhrD,SAAWpS,EAAEkB,EAAEC,GAAG8C,EAAE+M,KAAKhR,EAAEkB,EAAEC,IAAgqDkR,UAA7pD,SAAWrS,EAAEkB,EAAEC,GAAGS,EAAEoP,KAAKhR,EAAEkB,EAAEC,IAA4oDmR,OAAzoD,SAAWtS,EAAEkB,GAAGO,EAAEuP,KAAKhR,EAAEkB,IAAynDqR,SAA5wC,SAAWvS,EAAEkB,GAAG,IAAIC,EAAEqJ,GAAExK,GAAGiB,EAAEuJ,GAAEtJ,GAAGC,EAAEmD,eAAevD,KAAKI,EAAE0P,UAAUI,aAAa5L,IAAGpE,EAAEqD,eAAevD,KAAKE,EAAE4P,UAAUI,aAAa5L,KAAG,IAAKzC,GAAEzB,EAAEmD,eAAerD,EAAEqD,kBAAkBnD,EAAEmD,eAAemD,eAAe,EAAEtG,EAAEmD,eAAeoG,GAAGzJ,EAAEqD,eAAemD,eAAe,EAAExG,EAAEqD,eAAeoG,IAAGlH,GAAElB,KAAMI,GAAG6H,EAAE7H,GAAGc,GAAEsM,GAAG/O,KAAKI,GAAGqC,GAAEuM,GAAGhP,KAAKE,GAAGuC,GAAEqC,EAAE9D,KAAKK,IAAIjB,EAAEmD,eAAeuB,EAAE5E,EAAEqD,eAAeuB,GAAGrC,GAAEiN,YAAYlG,EAAEkG,YAAYjN,GAAEmM,SAASpF,EAAEoF,SAASpF,EAAEoF,SAAS/K,eAAe9E,MAAM+E,eAAerB,GAAEoB,aAAa,GAAG4N,UAAU5Q,EAAE,EAAE5B,GAAGwD,GAAEoB,aAAa,GAAG4N,UAAU5Q,EAAE,EAAEV,IAAI6E,GAAEuJ,SAAS0B,KAAKxN,MAAmuBiP,aAA/tB,SAAWzS,EAAEkB,EAAEC,GAAG,IAAIF,EAAEuJ,GAAExK,GAAG2B,EAAE6I,GAAEtJ,GAAGoB,EAAEkI,GAAErJ,GAAG,IAAG,IAAK6B,EAAE/B,EAAEU,EAAEW,KAAKyE,EAAE2L,OAAO5S,MAAM6S,aAAY,IAAKxP,EAAElC,EAAEU,EAAEW,IAAI,EAACe,GAAEvB,KAAMY,GAAG6H,EAAE7H,GAAGW,GAAEyM,GAAG/O,KAAKE,GAAGoC,GAAE0M,GAAGhP,KAAKY,GAAG0B,GAAE8M,GAAGpP,KAAKuB,GAAGe,GAAEwC,GAAG5E,EAAEqD,eAAeuB,EAAElE,EAAE2C,eAAeuB,EAAEvD,EAAEgC,eAAeuB,GAAG,EAAExC,GAAEoN,YAAYlG,EAAEkG,YAAYpN,GAAEyE,YAAY0K,UAAUvO,EAAE,EAAEjE,GAAGqD,GAAEyE,YAAYc,aAAa6B,GAAGnD,YAAY,IAAI,IAAI9E,EAAE,EAAEA,EAAE,EAAEA,IAAI,CAAC,IAAIM,EAAEO,GAAEsF,mBAAmBnG,GAAGM,EAAE0P,UAAUvO,EAAE,EAAE2O,UAAUpQ,IAAIM,EAAE8F,aAAa6B,GAAGnD,YAAYjE,GAAEkF,IAAI/F,GAAGgQ,UAAU/Q,EAAE,EAAEmR,UAAUpQ,IAAIa,GAAEsN,oBAAoB,EAAEtN,GAAEsM,SAASpF,EAAEoF,SAAS5J,GAAEuJ,SAAS0B,KAAK3N,QAAgOlD,KAAKkP,aAAa,SAASnO,EAAED,EAAEuB,EAAEQ,GAAWvB,GAAJwC,GAAJV,GAAE,IAAUwC,GAAEuJ,SAAStI,OAAO,KAAO9F,EAAE2R,YAAY3R,EAAE4R,oBAAoB,OAAO7R,EAAE8R,QAAQ9R,EAAE6R,oBAAoB5J,GAAEnI,KAAKE,EAAEwO,oBAAoBtG,GAAE6J,iBAAiB/R,EAAEmQ,iBAAiBlI,IAAGmD,GAAE4G,cAAc9J,IAAGhG,GAAE,EAAE4C,GAAEmL,QAAQlK,OAAO,EAAEjB,GAAEwJ,OAAOvI,OAAO,EAA/9J,SAAShH,EAAEmB,GAAG,IAAG,IAAKA,EAAE4P,QAAQ,CAAC,GAAG5P,aAAarB,MAAMoT,MAAMnN,GAAEwJ,OAAOyB,KAAK7P,QAAQ,GAAGA,aAAarB,MAAMqT,MAAMhS,aAAarB,MAAMsT,MAAMjS,aAAarB,MAAMuT,OAAO,CAAC,IAAG,IAAKlS,EAAEwO,SAASoB,QAAQ,OAAO,IAAG,IAAK5P,EAAEmS,gBAAe,IAAKjH,GAAEkH,iBAAiBpS,GAAG,OAAOD,EAAEC,QAAQ,GAAGA,aAAarB,MAAM0T,OAAO,CAAC,IAAG,IAAKrS,EAAEwO,SAASoB,QAAQ,OAAO,IAAG,IAAK5P,EAAEmS,gBAAe,IAAKjH,GAAEoH,iBAAiBtS,GAAG,OAAOD,EAAEC,GAAG,IAAI,IAAIF,EAAEE,EAAEuS,SAAS/R,EAAE,EAAEG,EAAEb,EAAE+F,OAAOrF,EAAEG,EAAEH,IAAI3B,EAAEiB,EAAEU,KAAuiJ3B,CAAEkB,IAAG,IAAKsB,GAAGuD,GAAEmL,QAAQyC,KAAK7Q,IAAG,IAAI,IAAI1B,EAAE2E,GAAEmL,QAAQtP,EAAE,EAAE2I,EAAEnJ,EAAE4F,OAAOpF,EAAE2I,EAAE3I,IAAI,CAAC,IAAImF,EAAE3F,EAAEQ,GAAG4O,OAAO/F,EAAE1D,EAAE6M,SAAS,GAAG/R,GAAEkQ,UAAUhL,GAAGuD,GAAEvD,EAAEM,YAAY/F,GAAE,EAAEyF,aAAajH,MAAMqT,MAAM,GAAG1I,aAAa3K,MAAM+T,eAAe,CAAC,IAAInJ,EAAED,EAAEqJ,WAAWpO,EAAE+E,EAAEsJ,OAAO,QAAG,IAASrJ,EAAEmG,SAAS,SAAS,IAAI,IAAuBjL,EAAE,EAAEC,GAAvBF,EAAE+E,EAAEmG,SAASmD,OAAchN,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAEsQ,WAAWxM,EAAEC,GAAGD,EAAEC,EAAE,GAAGD,EAAEC,EAAE,IAAI,QAAG,IAAS8E,EAAEuJ,OAAW,CAAA,IAAInO,EAAE4E,EAAEuJ,OAAOD,MAAnB,IAAyBpO,EAAE,EAAEC,EAAEC,EAAEkB,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAEuQ,WAAWtM,EAAEF,GAAGE,EAAEF,EAAE,GAAGE,EAAEF,EAAE,IAAI,QAAG,IAAS8E,EAAEwJ,GAAO,CAAA,IAAInL,EAAE2B,EAAEwJ,GAAGF,MAAf,IAAqBpO,EAAE,EAAEC,EAAEkD,EAAE/B,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAEyQ,OAAOvJ,EAAEnD,GAAGmD,EAAEnD,EAAE,IAAI,GAAG,OAAO6E,EAAE0J,MAAM,CAAC,IAAInL,EAAEyB,EAAE0J,MAAMH,MAAM,GAAY,EAATtO,EAAEsB,OAAS,IAAI,IAAIiC,EAAE,EAAEA,EAAEvD,EAAEsB,OAAOiC,IAAQ,CAAA,IAAIvH,EAAEgE,EAAEuD,GAAZ,IAAerD,EAAElE,EAAE0S,MAAMvO,EAAEnE,EAAE0S,MAAM1S,EAAE2S,MAAMzO,EAAEC,EAAED,GAAG,EAAE/D,GAAE4Q,aAAazJ,EAAEpD,GAAGoD,EAAEpD,EAAE,GAAGoD,EAAEpD,EAAE,SAAS,IAAQA,EAAE,EAAEC,EAAEmD,EAAEhC,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAE4Q,aAAazJ,EAAEpD,GAAGoD,EAAEpD,EAAE,GAAGoD,EAAEpD,EAAE,SAAS,IAAQA,EAAE,EAAEC,EAAEF,EAAEqB,OAAO,EAAEpB,EAAEC,EAAED,GAAG,EAAE/D,GAAE4Q,aAAa7M,EAAEA,EAAE,EAAEA,EAAE,QAAQ,GAAG6E,aAAa3K,MAAMwU,SAAS,CAAC,IAAI7H,EAAEhC,EAAEjF,SAASkH,EAAEjC,EAAEhF,MAAMkH,EAAElC,EAAE8J,cAAc,GAAGpI,GAAEqD,gBAAgBlF,IAAG,IAAI,IAAIsC,EAAE7F,EAAE4I,SAAS9C,EAAE0E,MAAMiD,QAAQ5H,GAAGnJ,EAAE,EAAEsJ,EAAEN,EAAEzF,OAAOvD,EAAEsJ,EAAEtJ,IAAI,CAAC,IAAIuJ,EAAEP,EAAEhJ,GAAG,GAAG6E,GAAEvH,KAAKiM,IAAG,IAAKJ,EAAE6H,aAAa,IAAI,IAAI7J,EAAGH,EAAEgK,aAAa3J,EAAG/D,EAAE2N,sBAAsBhJ,EAAG,EAAEE,EAAGhB,EAAG5D,OAAO0E,EAAGE,EAAGF,IAAK,CAAC,IAAIN,EAAGN,EAAGY,GAAI,GAAG,IAAIN,EAAG,CAAC,IAAcI,EAAPZ,EAAGc,GAAUlG,SAAS/B,GAAG6E,GAAE7G,IAAI+J,EAAG/J,EAAEuL,EAAEvL,GAAG2J,EAAG9C,GAAE1G,IAAI4J,EAAG5J,EAAEoL,EAAEpL,GAAGwJ,EAAG9C,GAAEzC,IAAI2F,EAAG3F,EAAEmH,EAAEnH,GAAGuF,GAAIvJ,GAAEsQ,WAAW7J,GAAE7G,EAAE6G,GAAE1G,EAAE0G,GAAEzC,GAAG,IAAI,IAAIiG,EAAG,EAAErF,EAAGiG,EAAE1F,OAAO8E,EAAGrF,EAAGqF,IAAK,CAAC,IAAI1F,EAAGsG,EAAEZ,GAAI,QAAG,KAAUc,GAAE,IAAKC,EAAE9F,EAAE4I,SAASvJ,EAAGuO,eAAe5N,EAAE4I,UAAU,CAAC,IAAItJ,EAAGuG,EAAE8F,KAAKzL,EAAGuD,GAAEpE,EAAG9D,GAAGG,EAAG+H,GAAEpE,EAAGR,GAAGqH,EAAGzC,GAAEpE,EAAGxD,GAAG,IAAG,IAAKf,GAAEoQ,wBAAwBhL,EAAGxE,EAAGwK,GAAI,CAAC,IAAIE,EAAGtL,GAAEqQ,qBAAqBjL,EAAGxE,EAAGwK,GAAI,GAAG5G,IAAKvG,MAAM6S,WAAW,CAAC,GAAGtM,IAAKvG,MAAM8U,YAAW,IAAKzH,EAAG,SAAS,GAAG9G,IAAKvG,MAAM+U,WAAU,IAAK1H,EAAG,UAAS9J,GAAEvB,KAAMY,GAAGqE,EAAErE,GAAGW,GAAEyM,GAAG/O,KAAKkG,GAAI5D,GAAE0M,GAAGhP,KAAK0B,GAAIY,GAAE8M,GAAGpP,KAAKkM,GAAI5J,GAAEyE,YAAY/G,KAAKqF,EAAG6N,SAAQ,IAAK9G,GAAI9G,IAAKvG,MAAM+U,UAAUxO,IAAKvG,MAAM6S,YAAYtP,GAAEyE,YAAYgN,SAASzR,GAAEyE,YAAYc,aAAauD,IAAG7E,YAAY,IAAI,IAAIrF,EAAGmE,EAAG2O,cAAcrO,EAAG,EAAE0G,EAAGrL,KAAKG,IAAID,EAAG+E,OAAO,GAAGN,EAAG0G,EAAG1G,IAAK,CAAC,IAAI2G,EAAGhK,GAAEsF,mBAAmBjC,GAAI2G,EAAGtM,KAAKkB,EAAGyE,KAAK,IAAKyG,GAAI9G,IAAKvG,MAAM+U,UAAUxO,IAAKvG,MAAM6S,YAAYtF,EAAGyH,SAASzH,EAAGzE,aAAauD,IAAG7E,YAAYjE,GAAEsN,oBAAoB1O,EAAG+E,OAAO,IAAIG,EAAGwF,EAAEb,GAAI,QAAG,IAAS3E,EAAG,IAAI,IAAIR,EAAG,EAAEA,EAAG,EAAEA,IAAKtD,GAAEkF,IAAI5B,GAAI5F,KAAKoG,EAAGR,IAAKtD,GAAEhD,MAAM+F,EAAG/F,MAAMgD,GAAEsM,SAAS/C,EAAEvJ,GAAEwC,GAAGoB,EAAG3C,eAAeuB,EAAEpD,EAAG6B,eAAeuB,EAAEoH,EAAG3I,eAAeuB,GAAG,EAAExC,GAAEoN,YAAY1J,EAAE0J,YAAY1K,GAAEuJ,SAAS0B,KAAK3N,aAAY,GAAG0D,aAAajH,MAAMsT,KAAK,CAAC,GAAG/N,GAAE2N,iBAAiB7J,GAAEmB,IAAGG,aAAa3K,MAAM+T,gBAAmC,QAAG,KAAlBnJ,EAAED,EAAEqJ,YAAyBjD,SAAS,CAAC,IAA2BjL,EAAE,EAAEC,GAAvBF,EAAE+E,EAAEmG,SAASmD,OAAchN,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAEsQ,WAAWxM,EAAEC,GAAGD,EAAEC,EAAE,GAAGD,EAAEC,EAAE,IAAI,QAAG,IAAS8E,EAAErK,MAAU,CAAA,IAAIqI,EAAGgC,EAAErK,MAAM2T,MAAnB,IAAyBpO,EAAE,EAAEC,EAAE6C,EAAG1B,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAEwQ,UAAU3J,EAAG9C,GAAG8C,EAAG9C,EAAE,GAAG8C,EAAG9C,EAAE,IAAI,GAAG,OAAO6E,EAAE0J,MAAM,IAAwBvO,EAAE,EAAEC,GAApBmD,EAAEyB,EAAE0J,MAAMH,OAAchN,OAAOpB,EAAEC,EAAED,GAAG,EAAE/D,GAAE0Q,SAASvJ,EAAEpD,GAAGoD,EAAEpD,EAAE,QAAa,CAAA,IAAIiD,EAAG9B,aAAajH,MAAMkV,aAAa,EAAE,EAA7C,IAA+CpP,EAAE,EAAEC,EAAEF,EAAEqB,OAAO,EAAE,EAAEpB,EAAEC,EAAED,GAAGiD,EAAGhH,GAAE0Q,SAAS3M,EAAEA,EAAE,UAAS,GAAG6E,aAAa3K,MAAMwU,SAAS,CAA2B,GAAG,KAAzB7H,EAAE1F,EAAE6M,SAASpO,UAAkBwB,OAAO,UAASC,EAAGtF,KAAO2C,eAAevD,KAAK0L,EAAE,IAAIwE,aAAa5L,IAAG,IAAQwD,EAAG9B,aAAajH,MAAMkV,aAAa,EAAE,EAAEvR,EAAE,EAAEsJ,EAAEN,EAAEzF,OAAOvD,EAAEsJ,EAAEtJ,KAAIwD,EAAGtF,KAAO2C,eAAevD,KAAK0L,EAAEhJ,IAAIwN,aAAa5L,IAAY,GAAR5B,EAAE,GAAGoF,IAAOpG,EAAG+H,GAAElJ,GAAE,GAAGgL,GAAEvL,KAAKkG,EAAG3C,gBAAgBiI,GAAExL,KAAK0B,EAAG6B,iBAAgB,IAAK1B,GAAE0J,GAAEC,MAAKD,GAAE7E,eAAe,EAAE6E,GAAE5B,GAAG6B,GAAE9E,eAAe,EAAE8E,GAAE7B,IAAGlH,GAAElB,KAAMI,GAAGqE,EAAErE,GAAGc,GAAEsM,GAAGxL,eAAevD,KAAKuL,IAAG9I,GAAEuM,GAAGzL,eAAevD,KAAKwL,IAAG/I,GAAEqC,EAAE9D,KAAKK,IAAIkK,GAAEzG,EAAE0G,GAAE1G,GAAGrC,GAAEiN,YAAY1J,EAAE0J,YAAYjN,GAAEmM,SAAS5I,EAAE4I,SAAS5I,EAAE4I,SAAS/K,eAAe9E,MAAM+E,eAAerB,GAAEoB,aAAa,GAAG7D,KAAKgG,EAAE6M,SAASqB,OAAOxR,IAAID,GAAEoB,aAAa,GAAG7D,KAAKgG,EAAE6M,SAASqB,OAAOxR,EAAE,KAAKsC,GAAEuJ,SAAS0B,KAAKxN,YAAW,GAAGuD,aAAajH,MAAMuT,QAAQ,GAAGhO,GAAE2N,iBAAiB7J,GAAEmB,IAAGG,aAAa3K,MAAMwU,SAAS,IAA8B7Q,EAAE,EAAEsJ,GAA1BN,EAAE1F,EAAE6M,SAASpO,UAAiBwB,OAAOvD,EAAEsJ,EAAEtJ,IAAI,CAAKuJ,EAAEP,EAAEhJ,GAAGqF,GAAE3G,IAAI6K,EAAEvL,EAAEuL,EAAEpL,EAAEoL,EAAEnH,EAAE,GAAGiD,GAAEmI,aAAa5L,IAAGlE,EAAE2H,GAAE/B,EAAE9F,QAAQ,GAAGwJ,aAAa3K,MAAM+T,eAAe,CAAoB,QAAG,KAAlBnJ,EAAED,EAAEqJ,YAAyBjD,SAAa,CAAA,IAAIlL,EAAR,IAA2BC,EAAE,EAAEC,GAAvBF,EAAE+E,EAAEmG,SAASmD,OAAchN,OAAOpB,EAAEC,EAAED,GAAG,EAAEkD,GAAE3G,IAAIwD,EAAEC,GAAGD,EAAEC,EAAE,GAAGD,EAAEC,EAAE,GAAG,GAAGkD,GAAEmI,aAAa5L,IAAGlE,EAAE2H,GAAE/B,EAAE9F,UAAS8F,aAAajH,MAAM0T,SAAS1K,GAAE3G,IAAImI,GAAEgF,SAAS,IAAIhF,GAAEgF,SAAS,IAAIhF,GAAEgF,SAAS,IAAI,GAAGxG,GAAEmI,aAAa9H,IAAGhI,EAAE2H,GAAE/B,EAAE9F,IAAI,OAAM,IAAK+B,GAAG+C,GAAEuJ,SAASqE,KAAK7Q,IAAGiD","file":"canvas-renderer-and-projector.min.js","sourcesContent":["var bgColor=16777215;THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type=\"SpriteCanvasMaterial\",this.color=new THREE.Color(16777215),this.program=function(){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial=!0,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){function r(){me.setRGB(0,0,0),ve.setRGB(0,0,0),ye.setRGB(0,0,0);for(var e=0,r=g.length;e<r;e++){var t=g[e],i=t.color;t.isAmbientLight?me.add(i):t.isDirectionalLight?ve.add(i):t.isPointLight&&ye.add(i)}}function t(e,r,t){for(var i=0,o=g.length;i<o;i++){var n=g[i];if(Ee.copy(n.color),n.isDirectionalLight){var a=xe.setFromMatrixPosition(n.matrixWorld).normalize(),s=r.dot(a);if(s<=0)continue;s*=n.intensity,t.add(Ee.multiplyScalar(s))}else if(n.isPointLight){var a=xe.setFromMatrixPosition(n.matrixWorld),s=r.dot(xe.subVectors(a,e).normalize());if(s<=0)continue;if(0==(s*=0==n.distance?1:1-Math.min(e.distanceTo(a)/n.distance,1)))continue;s*=n.intensity,t.add(Ee.multiplyScalar(s))}}}function i(e,r,t){f(t.opacity),d(t.blending);var i=r.scale.x*U,o=r.scale.y*q,n=Math.sqrt(i*i+o*o);if(ue.min.set(e.x-n,e.y-n),ue.max.set(e.x+n,e.y+n),t.isSpriteMaterial){var a=t.map;if(null!==a){var s=fe[a.id];if(void 0!==s&&s.version===a.version||(s=c(a),fe[a.id]=s),void 0!==s.canvas){y(s.canvas);var l=a.image,p=l.width*a.offset.x,E=l.height*a.offset.y,h=l.width*a.repeat.x,u=l.height*a.repeat.y,m=i/h,x=o/u;Z.save(),Z.translate(e.x,e.y),0!==t.rotation&&Z.rotate(t.rotation),Z.translate(-i/2,-o/2),Z.scale(m,x),Z.translate(-p,-E),Z.fillRect(p,E,h,u),Z.restore()}}else y(t.color.getStyle()),Z.save(),Z.translate(e.x,e.y),0!==t.rotation&&Z.rotate(t.rotation),Z.scale(i,-o),Z.fillRect(-.5,-.5,1,1),Z.restore()}else t.isSpriteCanvasMaterial?(v(t.color.getStyle()),y(t.color.getStyle()),Z.save(),Z.translate(e.x,e.y),0!==t.rotation&&Z.rotate(t.rotation),Z.scale(i,o),t.program(Z),Z.restore()):t.isPointsMaterial&&(y(t.color.getStyle()),Z.save(),Z.translate(e.x,e.y),0!==t.rotation&&Z.rotate(t.rotation),Z.scale(i*t.size,-o*t.size),Z.fillRect(-.5,-.5,1,1),Z.restore())}function o(e,r,t,i){if(f(i.opacity),d(i.blending),Z.beginPath(),Z.moveTo(e.positionScreen.x,e.positionScreen.y),Z.lineTo(r.positionScreen.x,r.positionScreen.y),i.isLineBasicMaterial){if(h(i.linewidth),u(i.linecap),m(i.linejoin),i.vertexColors!==THREE.VertexColors)v(i.color.getStyle());else{var o=t.vertexColors[0].getStyle(),n=t.vertexColors[1].getStyle();if(o===n)v(o);else{try{var a=Z.createLinearGradient(e.positionScreen.x,e.positionScreen.y,r.positionScreen.x,r.positionScreen.y);a.addColorStop(0,o),a.addColorStop(1,n)}catch(e){a=o}v(a)}}i.isLineDashedMaterial&&x([i.dashSize,i.gapSize]),Z.stroke(),ue.expandByScalar(2*i.linewidth),i.isLineDashedMaterial&&x([])}}function n(e,r,i,o,n,c,E,h){if(A.info.render.vertices+=3,A.info.render.faces++,f(h.opacity),d(h.blending),M=e.positionScreen.x,C=e.positionScreen.y,b=r.positionScreen.x,z=r.positionScreen.y,V=i.positionScreen.x,j=i.positionScreen.y,a(M,C,b,z,V,j),(h.isMeshLambertMaterial||h.isMeshPhongMaterial||h.isMeshStandardMaterial)&&null===h.map)ce.copy(h.color),pe.copy(h.emissive),h.vertexColors===THREE.FaceColors&&ce.multiply(E.color),le.copy(me),Re.copy(e.positionWorld).add(r.positionWorld).add(i.positionWorld).divideScalar(3),t(Re,E.normalModel,le),le.multiply(ce).add(pe),!0===h.wireframe?s(le,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(le);else if(h.isMeshBasicMaterial||h.isMeshLambertMaterial||h.isMeshPhongMaterial||h.isMeshStandardMaterial)if(null!==h.map){var u=h.map.mapping;u===THREE.UVMapping&&(L=E.uvs,p(M,C,b,z,V,j,L[o].x,L[o].y,L[n].x,L[n].y,L[c].x,L[c].y,h.map))}else null!==h.envMap?h.envMap.mapping===THREE.SphericalReflectionMapping&&(Te.copy(E.vertexNormalsModel[o]).applyMatrix3(ge),O=.5*Te.x+.5,B=.5*Te.y+.5,Te.copy(E.vertexNormalsModel[n]).applyMatrix3(ge),P=.5*Te.x+.5,W=.5*Te.y+.5,Te.copy(E.vertexNormalsModel[c]).applyMatrix3(ge),N=.5*Te.x+.5,k=.5*Te.y+.5,p(M,C,b,z,V,j,O,B,P,W,N,k,h.envMap)):(le.copy(h.color),h.vertexColors===THREE.FaceColors&&le.multiply(E.color),!0===h.wireframe?s(le,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(le));else h.isMeshNormalMaterial?(Te.copy(E.normalModel).applyMatrix3(ge),le.setRGB(Te.x,Te.y,Te.z).multiplyScalar(.5).addScalar(.5),!0===h.wireframe?s(le,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(le)):(le.setRGB(1,1,1),!0===h.wireframe?s(le,h.wireframeLinewidth,h.wireframeLinecap,h.wireframeLinejoin):l(le))}function a(e,r,t,i,o,n){Z.beginPath(),Z.moveTo(e,r),Z.lineTo(t,i),Z.lineTo(o,n),Z.closePath()}function s(e,r,t,i){h(r),u(t),m(i),v(e.getStyle()),Z.stroke(),ue.expandByScalar(2*r)}function l(e){y(e.getStyle()),Z.fill()}function c(e){if(0===e.version||e instanceof THREE.CompressedTexture||e instanceof THREE.DataTexture)return{canvas:void 0,version:e.version};var r=e.image;if(!1===r.complete)return{canvas:void 0,version:0};var t=e.wrapS===THREE.RepeatWrapping||e.wrapS===THREE.MirroredRepeatWrapping,i=e.wrapT===THREE.RepeatWrapping||e.wrapT===THREE.MirroredRepeatWrapping,o=e.wrapS===THREE.MirroredRepeatWrapping,n=e.wrapT===THREE.MirroredRepeatWrapping,a=document.createElement(\"canvas\");a.width=r.width*(o?2:1),a.height=r.height*(n?2:1);var s=a.getContext(\"2d\");s.setTransform(1,0,0,-1,0,r.height),s.drawImage(r,0,0),!0===o&&(s.setTransform(-1,0,0,-1,r.width,r.height),s.drawImage(r,-r.width,0)),!0===n&&(s.setTransform(1,0,0,1,0,0),s.drawImage(r,0,r.height)),!0===o&&!0===n&&(s.setTransform(-1,0,0,1,r.width,0),s.drawImage(r,-r.width,r.height));var l=\"no-repeat\";!0===t&&!0===i?l=\"repeat\":!0===t?l=\"repeat-x\":!0===i&&(l=\"repeat-y\");var c=Z.createPattern(a,l);return e.onUpdate&&e.onUpdate(e),{canvas:c,version:e.version}}function p(e,r,t,i,o,n,a,s,l,p,E,f,d){var h=fe[d.id];if(void 0!==h&&h.version===d.version||(h=c(d),fe[d.id]=h),void 0===h.canvas)return y(\"rgba( 0, 0, 0, 1)\"),void Z.fill();y(h.canvas);var u,m,v,x,R,T,g,S,H=d.offset.x/d.repeat.x,w=d.offset.y/d.repeat.y,M=d.image.width*d.repeat.x,C=d.image.height*d.repeat.y;a=(a+H)*M,s=(s+w)*C,l=(l+H)*M,p=(p+w)*C,E=(E+H)*M,f=(f+w)*C,t-=e,i-=r,o-=e,n-=r,l-=a,p-=s,E-=a,f-=s,0!==(g=l*f-E*p)&&(S=1/g,u=(f*t-p*o)*S,m=(f*i-p*n)*S,v=(l*o-E*t)*S,x=(l*n-E*i)*S,R=e-u*a-v*s,T=r-m*a-x*s,Z.save(),Z.transform(u,m,v,x,R,T),Z.fill(),Z.restore())}function E(e,r,t){var i,o=r.x-e.x,n=r.y-e.y,a=o*o+n*n;0!==a&&(i=t/Math.sqrt(a),o*=i,n*=i,r.x+=o,r.y+=n,e.x-=o,e.y-=n)}function f(e){ee!==e&&(Z.globalAlpha=e,ee=e)}function d(e){re!==e&&(e===THREE.NormalBlending?Z.globalCompositeOperation=\"source-over\":e===THREE.AdditiveBlending?Z.globalCompositeOperation=\"lighter\":e===THREE.SubtractiveBlending?Z.globalCompositeOperation=\"darker\":e===THREE.MultiplyBlending&&(Z.globalCompositeOperation=\"multiply\"),re=e)}function h(e){oe!==e&&(Z.lineWidth=e,oe=e)}function u(e){ne!==e&&(Z.lineCap=e,ne=e)}function m(e){ae!==e&&(Z.lineJoin=e,ae=e)}function v(e){te!==e&&(Z.strokeStyle=e,te=e)}function y(e){ie!==e&&(Z.fillStyle=e,ie=e)}function x(e){se.length!==e.length&&(Z.setLineDash(e),se=e)}console.log(\"THREE.CanvasRenderer\",THREE.REVISION),e=e||{};var R,T,g,S,H,w,M,C,b,z,V,j,L,O,B,P,W,N,k,A=this,F=new THREE.Projector,D=void 0!==e.canvas?e.canvas:document.createElement(\"canvas\"),G=D.width,I=D.height,U=Math.floor(G/2),q=Math.floor(I/2),J=0,K=0,Q=G,X=I,Y=1,Z=D.getContext(\"2d\",{alpha:!0===e.alpha}),$=new THREE.Color(bgColor),_=!0===e.alpha?0:1,ee=1,re=0,te=null,ie=null,oe=null,ne=null,ae=null,se=[],le=new THREE.Color,ce=new THREE.Color,pe=new THREE.Color,Ee=new THREE.Color,fe={},de=new THREE.Box2,he=new THREE.Box2,ue=new THREE.Box2,me=new THREE.Color,ve=new THREE.Color,ye=new THREE.Color,xe=new THREE.Vector3,Re=new THREE.Vector3,Te=new THREE.Vector3,ge=new THREE.Matrix3;void 0===Z.setLineDash&&(Z.setLineDash=function(){}),this.domElement=D,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.getContext=function(){return Z},this.getContextAttributes=function(){return Z.getContextAttributes()},this.getPixelRatio=function(){return Y},this.setPixelRatio=function(e){void 0!==e&&(Y=e)},this.setSize=function(e,r,t){G=e*Y,I=r*Y,D.width=G,D.height=I,U=Math.floor(G/2),q=Math.floor(I/2),!1!==t&&(D.style.width=e+\"px\",D.style.height=r+\"px\"),de.min.set(-U,-q),de.max.set(U,q),he.min.set(-U,-q),he.max.set(U,q),ee=1,re=0,te=null,ie=null,oe=null,ne=null,ae=null,this.setViewport(0,0,e,r)},this.setViewport=function(e,r,t,i){J=e*Y,K=r*Y,Q=t*Y,X=i*Y},this.setScissor=function(){},this.setScissorTest=function(){},this.setClearColor=function(e,r){$.set(e),_=void 0!==r?r:1,he.min.set(-U,-q),he.max.set(U,q)},this.setClearColorHex=function(e,r){console.warn(\"THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.\"),this.setClearColor(e,r)},this.getClearColor=function(){return $},this.getClearAlpha=function(){return _},this.getMaxAnisotropy=function(){return 0},this.clear=function(){!1===he.isEmpty()&&(he.intersect(de),he.expandByScalar(2),he.min.x=he.min.x+U,he.min.y=-he.min.y+q,he.max.x=he.max.x+U,he.max.y=-he.max.y+q,_<1&&Z.clearRect(0|he.min.x,0|he.max.y,he.max.x-he.min.x|0,he.min.y-he.max.y|0),_>0&&(f(1),d(THREE.NormalBlending),y(\"rgba(\"+Math.floor(255*$.r)+\",\"+Math.floor(255*$.g)+\",\"+Math.floor(255*$.b)+\",\"+_+\")\"),Z.fillRect(0|he.min.x,0|he.max.y,he.max.x-he.min.x|0,he.min.y-he.max.y|0)),he.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(e,t){if(void 0===t.isCamera)return void console.error(\"THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.\");var a=e.background;a&&a.isColor?(f(1),d(THREE.NormalBlending),y(a.getStyle()),Z.fillRect(0,0,G,I)):!0===this.autoClear&&this.clear(),A.info.render.vertices=0,A.info.render.faces=0,Z.setTransform(Q/G,0,0,-X/I,J,I-K),Z.translate(U,q),R=F.projectScene(e,t,this.sortObjects,this.sortElements),T=R.elements,g=R.lights,ge.getNormalMatrix(t.matrixWorldInverse),r();for(var s=0,l=T.length;s<l;s++){var c=T[s],p=c.material;if(void 0!==p&&0!==p.opacity){if(ue.makeEmpty(),c instanceof THREE.RenderableSprite)S=c,S.x*=U,S.y*=q,i(S,c,p);else if(c instanceof THREE.RenderableLine)S=c.v1,H=c.v2,S.positionScreen.x*=U,S.positionScreen.y*=q,H.positionScreen.x*=U,H.positionScreen.y*=q,ue.setFromPoints([S.positionScreen,H.positionScreen]),!0===de.intersectsBox(ue)&&o(S,H,c,p);else if(c instanceof THREE.RenderableFace){if(S=c.v1,H=c.v2,w=c.v3,S.positionScreen.z<-1||S.positionScreen.z>1)continue;if(H.positionScreen.z<-1||H.positionScreen.z>1)continue;if(w.positionScreen.z<-1||w.positionScreen.z>1)continue;S.positionScreen.x*=U,S.positionScreen.y*=q,H.positionScreen.x*=U,H.positionScreen.y*=q,w.positionScreen.x*=U,w.positionScreen.y*=q,p.overdraw>0&&(E(S.positionScreen,H.positionScreen,p.overdraw),E(H.positionScreen,w.positionScreen,p.overdraw),E(w.positionScreen,S.positionScreen,p.overdraw)),ue.setFromPoints([S.positionScreen,H.positionScreen,w.positionScreen]),!0===de.intersectsBox(ue)&&n(S,H,w,0,1,2,c,p)}he.union(ue)}}Z.setTransform(1,0,0,1,0,0)}},THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0,this.renderOrder=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0,this.renderOrder=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(e){this.positionWorld.copy(e.positionWorld),this.positionScreen.copy(e.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0,this.renderOrder=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null,this.renderOrder=0},THREE.Projector=function(){function e(t){if(!1!==t.visible){if(t instanceof THREE.Light)j.lights.push(t);else if(t instanceof THREE.Mesh||t instanceof THREE.Line||t instanceof THREE.Points){if(!1===t.material.visible)return;if(!0===t.frustumCulled&&!1===D.intersectsObject(t))return;r(t)}else if(t instanceof THREE.Sprite){if(!1===t.material.visible)return;if(!0===t.frustumCulled&&!1===D.intersectsSprite(t))return;r(t)}for(var i=t.children,o=0,n=i.length;o<n;o++)e(i[o])}}function r(e){p=i(),p.id=e.id,p.object=e,L.setFromMatrixPosition(e.matrixWorld),L.applyMatrix4(k),p.z=L.z,p.renderOrder=e.renderOrder,j.objects.push(p)}function t(e,r,t){var i=1/e.w;e.z*=i,e.z>=-1&&e.z<=1&&(y=s(),y.id=r.id,y.x=e.x*i,y.y=e.y*i,y.z=e.z,y.renderOrder=r.renderOrder,y.object=r,y.rotation=r.rotation,y.scale.x=r.scale.x*Math.abs(y.x-(e.x+t.projectionMatrix.elements[0])/(e.w+t.projectionMatrix.elements[12])),y.scale.y=r.scale.y*Math.abs(y.y-(e.y+t.projectionMatrix.elements[5])/(e.w+t.projectionMatrix.elements[13])),y.material=r.material,j.elements.push(y))}function i(){if(E===g){var e=new THREE.RenderableObject;return T.push(e),g++,E++,e}return T[E++]}function o(){if(d===H){var e=new THREE.RenderableVertex;return S.push(e),H++,d++,e}return S[d++]}function n(){if(u===M){var e=new THREE.RenderableFace;return w.push(e),M++,u++,e}return w[u++]}function a(){if(v===b){var e=new THREE.RenderableLine;return C.push(e),b++,v++,e}return C[v++]}function s(){if(x===V){var e=new THREE.RenderableSprite;return z.push(e),V++,x++,e}return z[x++]}function l(e,r){return e.renderOrder!==r.renderOrder?e.renderOrder-r.renderOrder:e.z!==r.z?r.z-e.z:e.id!==r.id?e.id-r.id:0}function c(e,r){var t=0,i=1,o=e.z+e.w,n=r.z+r.w,a=-e.z+e.w,s=-r.z+r.w;return o>=0&&n>=0&&a>=0&&s>=0||!(o<0&&n<0||a<0&&s<0)&&(o<0?t=Math.max(t,o/(o-n)):n<0&&(i=Math.min(i,o/(o-n))),a<0?t=Math.max(t,a/(a-s)):s<0&&(i=Math.min(i,a/(a-s))),!(i<t)&&(e.lerp(r,t),r.lerp(e,1-i),!0))}var p,E,f,d,h,u,m,v,y,x,R,T=[],g=0,S=[],H=0,w=[],M=0,C=[],b=0,z=[],V=0,j={objects:[],lights:[],elements:[]},L=new THREE.Vector3,O=new THREE.Vector4,B=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),P=new THREE.Box3,W=new Array(3),N=new THREE.Matrix4,k=new THREE.Matrix4,A=new THREE.Matrix4,F=new THREE.Matrix3,D=new THREE.Frustum,G=new THREE.Vector4,I=new THREE.Vector4;this.projectVector=function(e,r){console.warn(\"THREE.Projector: .projectVector() is now vector.project().\"),e.project(r)},this.unprojectVector=function(e,r){console.warn(\"THREE.Projector: .unprojectVector() is now vector.unproject().\"),e.unproject(r)},this.pickingRay=function(){console.error(\"THREE.Projector: .pickingRay() is now raycaster.setFromCamera().\")};var U=function(){function e(e){T=e,g=T.material,H.getNormalMatrix(T.matrixWorld),v.length=0,y.length=0,x.length=0}function r(e){var r=e.position,t=e.positionWorld,i=e.positionScreen;t.copy(r).applyMatrix4(R),i.copy(t).applyMatrix4(k);var o=1/i.w;i.x*=o,i.y*=o,i.z*=o,e.visible=i.x>=-1&&i.x<=1&&i.y>=-1&&i.y<=1&&i.z>=-1&&i.z<=1}function t(e,t,i){f=o(),f.position.set(e,t,i),r(f)}function i(e,r,t){v.push(e,r,t)}function s(e,r,t){y.push(e,r,t)}function l(e,r){x.push(e,r)}function p(e,r,t){return!0===e.visible||!0===r.visible||!0===t.visible||(W[0]=e.positionScreen,W[1]=r.positionScreen,W[2]=t.positionScreen,B.intersectsBox(P.setFromPoints(W)))}function E(e,r,t){return(t.positionScreen.x-e.positionScreen.x)*(r.positionScreen.y-e.positionScreen.y)-(t.positionScreen.y-e.positionScreen.y)*(r.positionScreen.x-e.positionScreen.x)<0}function d(e,r){var t=S[e],i=S[r];t.positionScreen.copy(t.position).applyMatrix4(A),i.positionScreen.copy(i.position).applyMatrix4(A),!0===c(t.positionScreen,i.positionScreen)&&(t.positionScreen.multiplyScalar(1/t.positionScreen.w),i.positionScreen.multiplyScalar(1/i.positionScreen.w),m=a(),m.id=T.id,m.v1.copy(t),m.v2.copy(i),m.z=Math.max(t.positionScreen.z,i.positionScreen.z),m.renderOrder=T.renderOrder,m.material=T.material,T.material.vertexColors===THREE.VertexColors&&(m.vertexColors[0].fromArray(y,3*e),m.vertexColors[1].fromArray(y,3*r)),j.elements.push(m))}function u(e,r,t){var i=S[e],o=S[r],a=S[t];if(!1!==p(i,o,a)&&(g.side===THREE.DoubleSide||!0===E(i,o,a))){h=n(),h.id=T.id,h.v1.copy(i),h.v2.copy(o),h.v3.copy(a),h.z=(i.positionScreen.z+o.positionScreen.z+a.positionScreen.z)/3,h.renderOrder=T.renderOrder,h.normalModel.fromArray(v,3*e),h.normalModel.applyMatrix3(H).normalize();for(var s=0;s<3;s++){var l=h.vertexNormalsModel[s];l.fromArray(v,3*arguments[s]),l.applyMatrix3(H).normalize();h.uvs[s].fromArray(x,2*arguments[s])}h.vertexNormalsLength=3,h.material=T.material,j.elements.push(h)}}var v=[],y=[],x=[],T=null,g=null,H=new THREE.Matrix3;return{setObject:e,projectVertex:r,checkTriangleVisibility:p,checkBackfaceCulling:E,pushVertex:t,pushNormal:i,pushColor:s,pushUv:l,pushLine:d,pushTriangle:u}},q=new U;this.projectScene=function(r,i,s,p){u=0,v=0,x=0,j.elements.length=0,!0===r.autoUpdate&&r.updateMatrixWorld(),null===i.parent&&i.updateMatrixWorld(),N.copy(i.matrixWorldInverse),k.multiplyMatrices(i.projectionMatrix,N),D.setFromMatrix(k),E=0,j.objects.length=0,j.lights.length=0,e(r),!0===s&&j.objects.sort(l);for(var f=j.objects,y=0,T=f.length;y<T;y++){var g=f[y].object,H=g.geometry;if(q.setObject(g),R=g.matrixWorld,d=0,g instanceof THREE.Mesh){if(H instanceof THREE.BufferGeometry){var w=H.attributes,M=H.groups;if(void 0===w.position)continue;for(var C=w.position.array,b=0,z=C.length;b<z;b+=3)q.pushVertex(C[b],C[b+1],C[b+2]);if(void 0!==w.normal)for(var V=w.normal.array,b=0,z=V.length;b<z;b+=3)q.pushNormal(V[b],V[b+1],V[b+2]);if(void 0!==w.uv)for(var B=w.uv.array,b=0,z=B.length;b<z;b+=2)q.pushUv(B[b],B[b+1]);if(null!==H.index){var P=H.index.array;if(M.length>0)for(var W=0;W<M.length;W++)for(var U=M[W],b=U.start,z=U.start+U.count;b<z;b+=3)q.pushTriangle(P[b],P[b+1],P[b+2]);else for(var b=0,z=P.length;b<z;b+=3)q.pushTriangle(P[b],P[b+1],P[b+2])}else for(var b=0,z=C.length/3;b<z;b+=3)q.pushTriangle(b,b+1,b+2)}else if(H instanceof THREE.Geometry){var J=H.vertices,K=H.faces,Q=H.faceVertexUvs[0];F.getNormalMatrix(R);for(var X=g.material,Y=Array.isArray(X),Z=0,$=J.length;Z<$;Z++){var _=J[Z];if(L.copy(_),!0===X.morphTargets)for(var ee=H.morphTargets,re=g.morphTargetInfluences,te=0,ie=ee.length;te<ie;te++){var oe=re[te];if(0!==oe){var ne=ee[te],ae=ne.vertices[Z];L.x+=(ae.x-_.x)*oe,L.y+=(ae.y-_.y)*oe,L.z+=(ae.z-_.z)*oe}}q.pushVertex(L.x,L.y,L.z)}for(var se=0,le=K.length;se<le;se++){var ce=K[se];if(void 0!==(X=!0===Y?g.material[ce.materialIndex]:g.material)){var pe=X.side,Ee=S[ce.a],fe=S[ce.b],de=S[ce.c];if(!1!==q.checkTriangleVisibility(Ee,fe,de)){var he=q.checkBackfaceCulling(Ee,fe,de);if(pe!==THREE.DoubleSide){if(pe===THREE.FrontSide&&!1===he)continue;if(pe===THREE.BackSide&&!0===he)continue}h=n(),h.id=g.id,h.v1.copy(Ee),h.v2.copy(fe),h.v3.copy(de),h.normalModel.copy(ce.normal),!1!==he||pe!==THREE.BackSide&&pe!==THREE.DoubleSide||h.normalModel.negate(),h.normalModel.applyMatrix3(F).normalize();for(var ue=ce.vertexNormals,me=0,ve=Math.min(ue.length,3);me<ve;me++){var ye=h.vertexNormalsModel[me];ye.copy(ue[me]),!1!==he||pe!==THREE.BackSide&&pe!==THREE.DoubleSide||ye.negate(),ye.applyMatrix3(F).normalize()}h.vertexNormalsLength=ue.length;var xe=Q[se];if(void 0!==xe)for(var Re=0;Re<3;Re++)h.uvs[Re].copy(xe[Re]);h.color=ce.color,h.material=X,h.z=(Ee.positionScreen.z+fe.positionScreen.z+de.positionScreen.z)/3,h.renderOrder=g.renderOrder,j.elements.push(h)}}}}}else if(g instanceof THREE.Line){if(A.multiplyMatrices(k,R),H instanceof THREE.BufferGeometry){var w=H.attributes;if(void 0!==w.position){for(var C=w.position.array,b=0,z=C.length;b<z;b+=3)q.pushVertex(C[b],C[b+1],C[b+2]);if(void 0!==w.color)for(var Te=w.color.array,b=0,z=Te.length;b<z;b+=3)q.pushColor(Te[b],Te[b+1],Te[b+2]);if(null!==H.index)for(var P=H.index.array,b=0,z=P.length;b<z;b+=2)q.pushLine(P[b],P[b+1]);else for(var ge=g instanceof THREE.LineSegments?2:1,b=0,z=C.length/3-1;b<z;b+=ge)q.pushLine(b,b+1)}}else if(H instanceof THREE.Geometry){var J=g.geometry.vertices;if(0===J.length)continue;Ee=o(),Ee.positionScreen.copy(J[0]).applyMatrix4(A);for(var ge=g instanceof THREE.LineSegments?2:1,Z=1,$=J.length;Z<$;Z++)Ee=o(),Ee.positionScreen.copy(J[Z]).applyMatrix4(A),(Z+1)%ge>0||(fe=S[d-2],G.copy(Ee.positionScreen),I.copy(fe.positionScreen),!0===c(G,I)&&(G.multiplyScalar(1/G.w),I.multiplyScalar(1/I.w),m=a(),m.id=g.id,m.v1.positionScreen.copy(G),m.v2.positionScreen.copy(I),m.z=Math.max(G.z,I.z),m.renderOrder=g.renderOrder,m.material=g.material,g.material.vertexColors===THREE.VertexColors&&(m.vertexColors[0].copy(g.geometry.colors[Z]),m.vertexColors[1].copy(g.geometry.colors[Z-1])),j.elements.push(m)))}}else if(g instanceof THREE.Points){if(A.multiplyMatrices(k,R),H instanceof THREE.Geometry)for(var J=g.geometry.vertices,Z=0,$=J.length;Z<$;Z++){var _=J[Z];O.set(_.x,_.y,_.z,1),O.applyMatrix4(A),t(O,g,i)}else if(H instanceof THREE.BufferGeometry){var w=H.attributes;if(void 0!==w.position)for(var C=w.position.array,b=0,z=C.length;b<z;b+=3)O.set(C[b],C[b+1],C[b+2],1),O.applyMatrix4(A),t(O,g,i)}}else g instanceof THREE.Sprite&&(O.set(R.elements[12],R.elements[13],R.elements[14],1),O.applyMatrix4(k),t(O,g,i))}return!0===p&&j.elements.sort(l),j}};"]}
+2 -2
docs/js/global.js
··· 1 - "use strict";function xhr(t,s){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];return new Promise(function(n,o){"function"==typeof r&&(i=r),"function"==typeof r&&(r={}),null==r.type&&(r.type="POST"),null==r.contentType&&(r.contentType="json");var e=new XMLHttpRequest;e.open(r.type,s,!0),"GET"==r.type?e.send():"form"==r.contentType?(e.setRequestHeader("Content-type","application/x-www-form-urlencoded"),e.send("data="+JSON.stringify(t))):"json"==r.contentType?(e.setRequestHeader("Content-type","application/json"),e.send(JSON.stringify(t))):"none"==r.contentType?e.send(t):r.contentType&&(e.setRequestHeader("Content-type",r.contentType),e.send(t)),e.onreadystatechange=function(){if(4==this.readyState){var e=JSON.parse(this.responseText),t=null;String(this.status).startsWith("2")||(console.error("HTTP error "+this.status),t=this.status),t?o(t):n(e),i&&i(e,t)}}})}window.xhr=xhr;var YTapiKey="AIzaSyBnQnpboWUfWyR8aW6HuQV5MAlxZ5FQ090";!function(){var e="https://www.googleapis.com/youtube/v3/playlistItems?key="+YTapiKey+"&part=snippet&maxResults=6&playlistId=",t=e+"PL84-DNDSU8p5WP6jA7hvOCV9dIKBNjdCS",n=xhr(null,e+"UUy6jcAF6fZGttRvihyQixbA",{type:"GET"}),o=xhr(null,t,{type:"GET"});Promise.all([n,o]).then(function(e){console.log("==--==--==--\x3e YouTube Personal + Commissions"),console.log(e);var t=e[0].items.concat(e[1].items);t.sort(function(e,t){var n=new Date(e.snippet.publishedAt);return new Date(t.snippet.publishedAt)-n}),t=t.splice(0,6);for(var n=0;n<t.length;n++){var o=t[n].snippet.resourceId.videoId,s=t[n].snippet.thumbnails.high.url,r=(t[n].snippet.title,document.querySelector("section.video .thumbnails a.item:nth-child("+(n+1)+")"));r.setAttribute("href","https://www.youtube.com/watch?v="+o),r.querySelector("img").setAttribute("src",s)}document.querySelector("section.video").classList.remove("hidden")},function(e){throw Error("Could not fetch YouTube playlistItems")})}(),xhr(null,"https://www.googleapis.com/youtube/v3/playlistItems?key="+YTapiKey+"&part=snippet&maxResults=6&playlistId=UUoMimPRPeR28TM3_0cinjVQ",{type:"GET"}).then(function(e){console.log("==--==--==--\x3eYouTube Synctan"),console.log(e);for(var t=e.items,n=0;n<t.length;n++){var o=t[n].snippet.resourceId.videoId,s=t[n].snippet.thumbnails.high.url,r=(t[n].snippet.title,document.querySelector("section.synctan .thumbnails .item:nth-child("+(n+1)+")"));r.setAttribute("href","https://www.youtube.com/watch?v="+o),r.querySelector("img").setAttribute("src",s)}document.querySelector("section.synctan").classList.remove("hidden")},function(e){throw Error("Could not fetch YouTube playlistItems")}),xhr(null,"https://api.soundcloud.com/users/247370320/tracks?limit=8&client_id=6ibYZTmF5qnpvp88S9V3werVrC18WCdC",{type:"GET"}).then(function(e){console.log("==--==--==--\x3e SoundCloud Lacuna"),console.log(e);for(var t=0;t<6;t++){var n=e[t].permalink_url,o=e[t].artwork_url.replace("large","t300x300"),s=document.querySelector("section.lacuna .thumbnails .item:nth-child("+(t+1)+")");s.setAttribute("href",n),s.querySelector("img").setAttribute("src",o)}document.querySelector("section.lacuna").classList.remove("hidden")},function(e){throw Error("Could not fetch SoundCloud tracks")}),fetch("https://api.github.com/graphql",{body:JSON.stringify({query:'\n query {\n user(login:"SpectralKH") {\n pinnedRepositories(first:6) {\n edges {\n node {\n description\n homepageUrl\n url\n name\n }\n }\n }\n }\n }\n '}),headers:{Authorization:"bearer 54269bc991628928680662193cad6c4203672f66","Content-Type":"application/x-www-form-urlencoded"},method:"POST"}).then(function(e){e.json().then(function(e){console.log("==--==--==--\x3e GitHub"),console.log(e.data);for(var t=e.data.user.pinnedRepositories.edges,n=0;n<6;n++){var o=t[n].node,s=o.description,r=o.homepageUrl,i=o.name,c=o.url,l=document.querySelector("section.github .cards .item:nth-child("+(n+1)+")");l.querySelector("p.title").innerHTML=i,l.querySelector("p.description").innerHTML=s,c&&(l.querySelector("a.repo-url").setAttribute("href",c),l.querySelector("a.repo-url").classList.remove("hidden")),r&&(l.querySelector("a.repo-website").setAttribute("href",r),l.querySelector("a.repo-website").classList.remove("hidden"))}document.querySelector("section.github").classList.remove("hidden")})}),document.addEventListener("click",function(e){function t(){for(var e=document.querySelectorAll("a.has-popup input"),t=0;t<e.length;t++)e[t].classList.add("hidden")}var n=e.target.classList.contains("has-popup"),o=e.target.classList.contains("popup");if(n||o){var s=e.target.querySelector("input");e.target.classList.contains("popup")&&(s=e.target);var r=e.target.classList.contains("popup");s.classList.contains("hidden")?(t(),s.select(),s.classList.remove("hidden")):r||s.classList.add("hidden")}else t()}); 2 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJ4aHIiLCJyZXFDb250ZW50IiwidXJsIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNhbGxiYWNrIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJvcGVuIiwiWE1MSHR0cFJlcXVlc3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VuZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJ0aGlzIiwicmVzcG9uc2VUZXh0IiwiU3RyaW5nIiwic3RhdHVzIiwic3RhcnRzV2l0aCIsImVyciIsInJlYWR5U3RhdGUiLCJyZXMiLCJjb25zb2xlIiwiZXJyb3IiLCJ3aW5kb3ciLCJZVGFwaUtleSIsIlZpZGVvIiwiY29tbWlzc2lvbnNVUkwiLCJwZXJzb25hbCIsImNvbW1pc3Npb25zIiwiYWxsIiwidGhlbiIsInJlc3VsdHMiLCJsb2ciLCJpdGVtcyIsImNvbmNhdCIsInNvcnQiLCJhIiwiYiIsImRhdGVBIiwiRGF0ZSIsInNuaXBwZXQiLCJwdWJsaXNoZWRBdCIsInNwbGljZSIsImkiLCJyZXNvdXJjZUlkIiwidmlkZW9JZCIsImltZyIsInRodW1ibmFpbHMiLCJoaWdoIiwiaXRlbSIsInRpdGxlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic2V0QXR0cmlidXRlIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiRXJyb3IiLCJ0cmFja3MiLCJwZXJtYWxpbmtfdXJsIiwiYXJ0d29ya191cmwiLCJyZXBsYWNlIiwiZmV0Y2giLCJib2R5IiwibWV0aG9kIiwiaGVhZGVycyIsInJlcG9VcmwiLCJyZXBvV2Vic2l0ZSIsInJlc3VsdCIsImRhdGEiLCJ1c2VyIiwicGlubmVkUmVwb3NpdG9yaWVzIiwiZWRnZXMiLCJyZXBvIiwicmVwb3MiLCJub2RlIiwiZGVzY3JpcHRpb24iLCJob21lcGFnZVVybCIsIm5hbWUiLCJhZGRFdmVudExpc3RlbmVyIiwiaW5wdXRzIiwicXVlcnlTZWxlY3RvckFsbCIsImFkZCIsImlubmVySFRNTCIsImhhc0NsYXNzSGFzUG9wdXAiLCJ0YXJnZXQiLCJoYXNDbGFzc1BvcHVwIiwiY29udGFpbnMiLCJpbnB1dCIsImNsaWNrZWRJbnB1dCIsImhpZGVBbGxJbnB1dHMiLCJlIiwic2VsZWN0Il0sIm1hcHBpbmdzIjoiYUFBQSxTQUFTQSxJQUFLQyxFQUFZQyxHQUE2QixJQUF4QkMsRUFBd0IsRUFBQUMsVUFBQUMsYUFBQUMsSUFBQUYsVUFBQSxHQUFBQSxVQUFBLEdBQWQsR0FBSUcsRUFBVUgsVUFBQSxHQUNyRCxPQUFPLElBQUlJLFFBQVEsU0FBQ0MsRUFBU0MsR0FETFIsbUJBQVpELElBQXlDTSxFQUFBSixHQUFBLG1CQUFBQSxJQUFBQSxFQUFBLElBQUFHLE1BQVZDLEVBQVVJLE9BQUFSLEVBQUFRLEtBQUEsUUFLeEJMLE1BQXZCSCxFQUFRUyxjQUEwQlQsRUFBUVMsWUFBYyxRQUo5RCxJQUFBWixFQUFXUSxJQUFBQSxlQUNUUixFQUFJYSxLQUFBVixFQUFPQSxLQUFZRCxHQUFBLEdBQ25CLE9BQUFDLEVBQU9BLEtBQ1hILEVBQUlHLE9BQ3VCRyxRQUF2QkgsRUFBUVMsYUFDWlosRUFBSUEsaUJBQVVjLGVBQWQscUNBQ0FkLEVBQUlhLEtBQUtWLFFBQVRZLEtBQUFDLFVBQUFmLEtBQzJCLFFBQXZCRSxFQUFBUyxhQUNGWixFQUFJaUIsaUJBQUosZUFBQSxvQkFERmpCLEVBQUFpQixLQUVXZCxLQUFBQSxVQUFRUyxLQUNJLFFBQWpCTSxFQUFBQSxZQUNKbEIsRUFBSWlCLEtBQUtoQixHQUVMaUIsRUFBQUEsY0FDSmxCLEVBQUlpQixpQkFBVUQsZUFBZGIsRUFBQVMsYUFGS1osRUFBQWlCLEtBR0lkLElBRVRILEVBQUFtQixtQkFBQSxXQUZLLEdBR1lQLEdBSFpRLEtBR0lqQixXQUFRUyxDQUNqQlosSUFBSWtCLEVBQUFBLEtBQUFBLE1BQWlCRSxLQUFBQyxjQUNqQkosRUFBS2hCLEtBQ1Zx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QUFtQk8sRUFBRU4sT0FBTzlCLFVBQVVnQyxTQUFTLGFBQy9DRCxFQUFnQkssRUFBRU4sT0FBTzlCLFVBQVVnQyxTQUFTLFNBQ2hELEdBQUlILEdBQW9CRSxFQUFlLENBQ3JDLElBQUlFLEVBQVFHLEVBQUVOLE9BQU9oQyxjQUFjLFNBQy9Cc0MsRUFBRU4sT0FBTzlCLFVBQVVnQyxTQUFTLFdBQVVDLEVBQVFHLEVBQUVOLFFBQ3BELElBQUlJLEVBQWVFLEVBQUVOLE9BQU85QixVQUFVZ0MsU0FBUyxTQUMzQkMsRUFBTWpDLFVBQVVnQyxTQUFTLFdBRTNDRyxJQUNBRixFQUFNSSxTQUNOSixFQUFNakMsVUFBVUMsT0FBTyxXQUNiaUMsR0FDVkQsRUFBTWpDLFVBQVUyQixJQUFJLGVBSXRCUSIsImZpbGUiOiJqcy9nbG9iYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiB4aHIgKHJlcUNvbnRlbnQsIHVybCwgb3B0aW9ucyA9IHt9LCBjYWxsYmFjaykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSBvcHRpb25zID0ge31cbiAgICBpZiAob3B0aW9ucy50eXBlID09IHVuZGVmaW5lZCkgb3B0aW9ucy50eXBlID0gJ1BPU1QnXG4gICAgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgPT0gdW5kZWZpbmVkKSBvcHRpb25zLmNvbnRlbnRUeXBlID0gJ2pzb24nXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gICAgeGhyLm9wZW4ob3B0aW9ucy50eXBlLCB1cmwsIHRydWUpXG4gICAgaWYgKG9wdGlvbnMudHlwZSA9PSAnR0VUJykge1xuICAgICAgeGhyLnNlbmQoKVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jb250ZW50VHlwZSA9PSAnZm9ybScpIHtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJylcbiAgICAgIHhoci5zZW5kKCdkYXRhPScgKyBKU09OLnN0cmluZ2lmeShyZXFDb250ZW50KSlcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgPT0gJ2pzb24nKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxQ29udGVudCkpXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlID09ICdub25lJykge1xuICAgICAgeGhyLnNlbmQocmVxQ29udGVudClcbiAgICAgIC8vIGZvciBmaWxlIHVwbG9hZHMgKG11bHRpcGFydC9mb3JtLWRhdGEpXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgb3B0aW9ucy5jb250ZW50VHlwZSlcbiAgICAgIHhoci5zZW5kKHJlcUNvbnRlbnQpXG4gICAgfVxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQpIHtcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpXG4gICAgICAgIGxldCBlcnIgPSBudWxsXG4gICAgICAgIGlmICghU3RyaW5nKHRoaXMuc3RhdHVzKS5zdGFydHNXaXRoKCcyJykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIGVycm9yICcgKyB0aGlzLnN0YXR1cylcbiAgICAgICAgICBlcnIgPSB0aGlzLnN0YXR1c1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpXG4gICAgICAgIGVsc2UgcmVzb2x2ZShyZXMpXG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2socmVzLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJlc29sdmUoNSk7XG4gIH0pXG59XG53aW5kb3cueGhyID0geGhyXG5cbnZhciBZVGFwaUtleSA9ICdBSXphU3lCblFucGJvV1VmV3lSOGFXNkh1UVY1TUFseFo1RlEwOTAnO1xuXG4oZnVuY3Rpb24gVmlkZW8gKCkge1xuICB2YXIgbWF4UmVzdWx0cyA9IDZcblxuICB2YXIgdXJsID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvcGxheWxpc3RJdGVtcycgK1xuICAgICc/a2V5PScgKyBZVGFwaUtleSArXG4gICAgJyZwYXJ0PXNuaXBwZXQnICtcbiAgICAnJm1heFJlc3VsdHM9JyArIG1heFJlc3VsdHMgK1xuICAgICcmcGxheWxpc3RJZD0nXG4gIHZhciBwZXJzb25hbFVSTCA9IHVybCArICdVVXk2amNBRjZmWkd0dFJ2aWh5UWl4YkEnXG4gIHZhciBjb21taXNzaW9uc1VSTCA9IHVybCArICdQTDg0LURORFNVOHA1V1A2akE3aHZPQ1Y5ZElLQk5qZENTJ1xuICB2YXIgcGVyc29uYWwgPSB4aHIobnVsbCwgcGVyc29uYWxVUkwsIHsgdHlwZTogJ0dFVCcgfSlcbiAgdmFyIGNvbW1pc3Npb25zID0geGhyKG51bGwsIGNvbW1pc3Npb25zVVJMLCB7IHR5cGU6ICdHRVQnIH0pXG4gIFByb21pc2UuYWxsKFtwZXJzb25hbCwgY29tbWlzc2lvbnNdKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgY29uc29sZS5sb2coJz09LS09PS0tPT0tLT4gWW91VHViZSBQZXJzb25hbCArIENvbW1pc3Npb25zJylcbiAgICBjb25zb2xlLmxvZyhyZXN1bHRzKVxuICAgIC8vIGNvbWJpbmUgdmlkZW8gYW5kIGNvbW1pc3Npb24gcmVzcG9uc2VzXG4gICAgdmFyIGl0ZW1zID0gcmVzdWx0c1swXS5pdGVtcy5jb25jYXQocmVzdWx0c1sxXS5pdGVtcylcbiAgICBpdGVtcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB2YXIgZGF0ZUEgPSBuZXcgRGF0ZShhLnNuaXBwZXQucHVibGlzaGVkQXQpXG4gICAgICB2YXIgZGF0ZUIgPSBuZXcgRGF0ZShiLnNuaXBwZXQucHVibGlzaGVkQXQpXG4gICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQSAvLyBzb3J0IGJ5IGRhdGUgYXNjZW5kaW5nXG4gICAgfSlcbiAgICBpdGVtcyA9IGl0ZW1zLnNwbGljZSgwLCBtYXhSZXN1bHRzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB1cmwgPSBpdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZFxuICAgICAgdmFyIGltZyA9IGl0ZW1zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybFxuICAgICAgdmFyIHRpdGxlID0gaXRlbXNbaV0uc25pcHBldC50aXRsZVxuICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnZpZGVvIC50aHVtYm5haWxzIGEuaXRlbTpudGgtY2hpbGQoJyArIChpICsgMSkgKyAnKScpXG4gICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsICdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PScgKyB1cmwpXG4gICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1nKVxuICAgIH1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnZpZGVvJykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJylcbiAgfSwgKGVycikgPT4ge1xuICAgIHRocm93IEVycm9yKCdDb3VsZCBub3QgZmV0Y2ggWW91VHViZSBwbGF5bGlzdEl0ZW1zJylcbiAgICBjb25zb2xlLmxvZyhlcnIpXG4gIH0pXG59KSgpO1xuXG4oZnVuY3Rpb24gU3luY3RhbiAoKSB7XG4gIHZhciBtYXhSZXN1bHRzID0gNlxuXG4gIHZhciB1cmwgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20veW91dHViZS92My9wbGF5bGlzdEl0ZW1zJyArXG4gICAgJz9rZXk9JyArIFlUYXBpS2V5ICtcbiAgICAnJnBhcnQ9c25pcHBldCcgK1xuICAgICcmbWF4UmVzdWx0cz0nICsgbWF4UmVzdWx0cyArXG4gICAgJyZwbGF5bGlzdElkPVVVb01pbVBSUGVSMjhUTTNfMGNpbmpWUSdcbiAgeGhyKG51bGwsIHVybCwgeyB0eXBlOiAnR0VUJyB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBjb25zb2xlLmxvZygnPT0tLT09LS09PS0tPllvdVR1YmUgU3luY3RhbicpXG4gICAgY29uc29sZS5sb2cocmVzdWx0KVxuICAgIHZhciBpdGVtcyA9IHJlc3VsdC5pdGVtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB1cmwgPSBpdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZFxuICAgICAgdmFyIGltZyA9IGl0ZW1zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybFxuICAgICAgdmFyIHRpdGxlID0gaXRlbXNbaV0uc25pcHBldC50aXRsZVxuICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnN5bmN0YW4gLnRodW1ibmFpbHMgLml0ZW06bnRoLWNoaWxkKCcgKyAoaSArIDEpICsgJyknKVxuICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nICsgdXJsKVxuICAgICAgaXRlbS5xdWVyeVNlbGVjdG9yKCdpbWcnKS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZylcbiAgICB9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbi5zeW5jdGFuJykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJylcbiAgfSwgKGVycikgPT4ge1xuICAgIHRocm93IEVycm9yKCdDb3VsZCBub3QgZmV0Y2ggWW91VHViZSBwbGF5bGlzdEl0ZW1zJylcbiAgICBjb25zb2xlLmxvZyhlcnIpXG4gIH0pXG59KSgpO1xuXG4oZnVuY3Rpb24gTGFjdW5hICgpIHtcbiAgdmFyIG1heFJlc3VsdHMgPSA4XG5cbiAgLy8gTGFjdW5hXG4gIHZhciBjbGllbnRJRCA9ICc2aWJZWlRtRjVxbnB2cDg4UzlWM3dlclZyQzE4V0NkQydcbiAgdmFyIHVybCA9ICdodHRwczovL2FwaS5zb3VuZGNsb3VkLmNvbS91c2Vycy8yNDczNzAzMjAvdHJhY2tzJyArXG4gICAgJz9saW1pdD0nICsgbWF4UmVzdWx0cyArXG4gICAgJyZjbGllbnRfaWQ9JyArIGNsaWVudElEXG4gIHhocihudWxsLCB1cmwsIHsgdHlwZTogJ0dFVCcgfSkudGhlbigodHJhY2tzKSA9PiB7XG4gICAgY29uc29sZS5sb2coJz09LS09PS0tPT0tLT4gU291bmRDbG91ZCBMYWN1bmEnKVxuICAgIGNvbnNvbGUubG9nKHRyYWNrcylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgdmFyIHVybCA9IHRyYWNrc1tpXS5wZXJtYWxpbmtfdXJsXG4gICAgICB2YXIgaW1nID0gdHJhY2tzW2ldLmFydHdvcmtfdXJsLnJlcGxhY2UoJ2xhcmdlJywgJ3QzMDB4MzAwJylcbiAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbi5sYWN1bmEgLnRodW1ibmFpbHMgLml0ZW06bnRoLWNoaWxkKCcgKyAoaSArIDEpICsgJyknKVxuICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpXG4gICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1nKVxuICAgIH1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLmxhY3VuYScpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpXG4gIH0sIChlcnIpID0+IHtcbiAgICB0aHJvdyBFcnJvcignQ291bGQgbm90IGZldGNoIFNvdW5kQ2xvdWQgdHJhY2tzJylcbiAgICBjb25zb2xlLmxvZyhlcnIpXG4gIH0pXG59KSgpO1xuXG4oZnVuY3Rpb24gR2l0SHViICgpIHtcbiAgLy8gR2l0SHViIEFQSVxuICBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsJywge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHF1ZXJ5OiBgXG4gICAgICAgICAgcXVlcnkge1xuICAgICAgICAgICAgICB1c2VyKGxvZ2luOlwiU3BlY3RyYWxLSFwiKSB7XG4gICAgICAgICAgICAgIHBpbm5lZFJlcG9zaXRvcmllcyhmaXJzdDo2KSB7XG4gICAgICAgICAgICAgICAgICBlZGdlcyB7XG4gICAgICAgICAgICAgICAgICBub2RlIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGhvbWVwYWdlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICBgXG4gICAgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogJ2JlYXJlciA1NDI2OWJjOTkxNjI4OTI4NjgwNicgKyAnNjIxOTNjYWQ2YzQyMDM2NzJmNjYnLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4gICAgfSxcbiAgICBtZXRob2Q6ICdQT1NUJ1xuICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCc9PS0tPT0tLT09LS0+IEdpdEh1YicpXG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQuZGF0YSlcbiAgICAgIGNvbnN0IHJlcG9zID0gcmVzdWx0LmRhdGEudXNlci5waW5uZWRSZXBvc2l0b3JpZXMuZWRnZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcG8gPSByZXBvc1tpXS5ub2RlXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcmVwby5kZXNjcmlwdGlvblxuICAgICAgICBjb25zdCByZXBvV2Vic2l0ZSA9IHJlcG8uaG9tZXBhZ2VVcmxcbiAgICAgICAgY29uc3QgbmFtZSA9IHJlcG8ubmFtZVxuICAgICAgICBjb25zdCByZXBvVXJsID0gcmVwby51cmxcbiAgICAgICAgLy8gY29uc3QgaW1nID0gdHJhY2tzW2ldLmFydHdvcmtfdXJsLnJlcGxhY2UoJ2xhcmdlJywgJ3QzMDB4MzAwJylcbiAgICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlY3Rpb24uZ2l0aHViIC5jYXJkcyAuaXRlbTpudGgtY2hpbGQoJyArIChpICsgMSkgKyAnKScpXG4gICAgICAgIC8vIGl0ZW0uc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKVxuICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3AudGl0bGUnKS5pbm5lckhUTUwgPSBuYW1lXG4gICAgICAgIGl0ZW0ucXVlcnlTZWxlY3RvcigncC5kZXNjcmlwdGlvbicpLmlubmVySFRNTCA9IGRlc2NyaXB0aW9uXG4gICAgICAgIGlmIChyZXBvVXJsKSB7XG4gICAgICAgICAgaXRlbS5xdWVyeVNlbGVjdG9yKCdhLnJlcG8tdXJsJykuc2V0QXR0cmlidXRlKCdocmVmJywgcmVwb1VybClcbiAgICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2EucmVwby11cmwnKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXBvV2Vic2l0ZSkge1xuICAgICAgICAgIGl0ZW0ucXVlcnlTZWxlY3RvcignYS5yZXBvLXdlYnNpdGUnKS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCByZXBvV2Vic2l0ZSlcbiAgICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2EucmVwby13ZWJzaXRlJykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbi5naXRodWInKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKVxuICAgIH0pXG4gIH0pXG59KSgpXG5cbi8vIGRpc2NvcmQvZW1haWwgcG9wdXBzXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gIGZ1bmN0aW9uIGhpZGVBbGxJbnB1dHMgKCkge1xuICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhLmhhcy1wb3B1cCBpbnB1dCcpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlucHV0c1tpXS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKVxuICAgIH1cbiAgfVxuICB2YXIgaGFzQ2xhc3NIYXNQb3B1cCA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaGFzLXBvcHVwJylcbiAgdmFyIGhhc0NsYXNzUG9wdXAgPSBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3BvcHVwJylcbiAgaWYgKGhhc0NsYXNzSGFzUG9wdXAgfHwgaGFzQ2xhc3NQb3B1cCkge1xuICAgIHZhciBpbnB1dCA9IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwb3B1cCcpKSBpbnB1dCA9IGUudGFyZ2V0XG4gICAgdmFyIGNsaWNrZWRJbnB1dCA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncG9wdXAnKVxuICAgIHZhciBpbnB1dElzSGlkZGVuID0gaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRkZW4nKVxuICAgIGlmIChpbnB1dElzSGlkZGVuKSB7XG4gICAgICBoaWRlQWxsSW5wdXRzKClcbiAgICAgIGlucHV0LnNlbGVjdCgpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKVxuICAgIH0gZWxzZSBpZiAoIWNsaWNrZWRJbnB1dCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY2xpY2tlZCBhbnl3aGVyZVxuICAgIGhpZGVBbGxJbnB1dHMoKVxuICB9XG59KVxuIl19 1 + "use strict";function xhr(t,s){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];return new Promise(function(n,o){"function"==typeof r&&(i=r),"function"==typeof r&&(r={}),null==r.type&&(r.type="POST"),null==r.contentType&&(r.contentType="json");var e=new XMLHttpRequest;e.open(r.type,s,!0),"GET"==r.type?e.send():"form"==r.contentType?(e.setRequestHeader("Content-type","application/x-www-form-urlencoded"),e.send("data="+JSON.stringify(t))):"json"==r.contentType?(e.setRequestHeader("Content-type","application/json"),e.send(JSON.stringify(t))):"none"==r.contentType?e.send(t):r.contentType&&(e.setRequestHeader("Content-type",r.contentType),e.send(t)),e.onreadystatechange=function(){if(4==this.readyState){var e=JSON.parse(this.responseText),t=null;String(this.status).startsWith("2")||(console.error("HTTP error "+this.status),t=this.status),t?o(t):n(e),i&&i(e,t)}}})}window.xhr=xhr;var YTapiKey="AIzaSyBnQnpboWUfWyR8aW6HuQV5MAlxZ5FQ090";!function(){var e="https://www.googleapis.com/youtube/v3/playlistItems?key="+YTapiKey+"&part=snippet&maxResults=6&playlistId=",t=e+"PL84-DNDSU8p5WP6jA7hvOCV9dIKBNjdCS",n=xhr(null,e+"UUy6jcAF6fZGttRvihyQixbA",{type:"GET"}),o=xhr(null,t,{type:"GET"});Promise.all([n,o]).then(function(e){console.log("==--==--==--\x3e YouTube Personal + Commissions"),console.log(e);var t=e[0].items.concat(e[1].items);t.sort(function(e,t){var n=new Date(e.snippet.publishedAt);return new Date(t.snippet.publishedAt)-n}),t=t.splice(0,6);for(var n=0;n<t.length;n++){var o=t[n].snippet.resourceId.videoId,s=t[n].snippet.thumbnails.high.url,r=(t[n].snippet.title,document.querySelector("section.video .thumbnails a.item:nth-child("+(n+1)+")"));r.setAttribute("href","https://www.youtube.com/watch?v="+o),r.querySelector("img").setAttribute("src",s)}document.querySelector("section.video").classList.remove("hidden")},function(e){throw document.querySelector("section.video").classList.add("removed"),console.log("Could not fetch Video YouTube playlistItems"),Error(e)})}(),xhr(null,"https://www.googleapis.com/youtube/v3/playlistItems?key="+YTapiKey+"&part=snippet&maxResults=6&playlistId=UUoMimPRPeR28TM3_0cinjVQ",{type:"GET"}).then(function(e){console.log("==--==--==--\x3eYouTube Synctan"),console.log(e);for(var t=e.items,n=0;n<t.length;n++){var o=t[n].snippet.resourceId.videoId,s=t[n].snippet.thumbnails.high.url,r=(t[n].snippet.title,document.querySelector("section.synctan .thumbnails .item:nth-child("+(n+1)+")"));r.setAttribute("href","https://www.youtube.com/watch?v="+o),r.querySelector("img").setAttribute("src",s)}document.querySelector("section.synctan").classList.remove("hidden")},function(e){throw document.querySelector("section.synctan").classList.add("removed"),console.log("Could not fetch Synctan YouTube playlistItems"),Error(e)}),xhr(null,"https://api.soundcloud.com/users/247370320/tracks?limit=8&client_id=6ibYZTmF5qnpvp88S9V3werVrC18WCdC",{type:"GET"}).then(function(e){console.log("==--==--==--\x3e SoundCloud Lacuna"),console.log(e);for(var t=0;t<6;t++){var n=e[t].permalink_url,o=e[t].artwork_url.replace("large","t300x300"),s=document.querySelector("section.lacuna .thumbnails .item:nth-child("+(t+1)+")");s.setAttribute("href",n),s.querySelector("img").setAttribute("src",o)}document.querySelector("section.lacuna").classList.remove("hidden")},function(e){throw document.querySelector("section.lacuna").classList.add("removed"),console.log("Could not fetch SoundCloud tracks"),Error(e)}),function(){var e="510127accaf075e7a33b";e+="04e4569c7e2f78c83539",fetch("https://api.github.com/graphql",{body:JSON.stringify({query:'\n query {\n user(login:"SpectralKH") {\n pinnedRepositories(first:6) {\n edges {\n node {\n description\n homepageUrl\n url\n name\n }\n }\n }\n }\n }\n '}),headers:{Authorization:"bearer "+e,"Content-Type":"application/x-www-form-urlencoded"},method:"POST"}).then(function(e){if(e.ok)return e;throw Error(e)}).then(function(e){e.json().then(function(e){console.log("==--==--==--\x3e GitHub"),console.log(e.data);for(var t=e.data.user.pinnedRepositories.edges,n=0;n<6;n++){var o=t[n].node,s=o.description,r=o.homepageUrl,i=o.name,c=o.url,l=document.querySelector("section.github .cards .item:nth-child("+(n+1)+")");l.querySelector("p.title").innerHTML=i,l.querySelector("p.description").innerHTML=s,c&&(l.querySelector("a.repo-url").setAttribute("href",c),l.querySelector("a.repo-url").classList.remove("hidden")),r&&(l.querySelector("a.repo-website").setAttribute("href",r),l.querySelector("a.repo-website").classList.remove("hidden"))}document.querySelector("section.github").classList.remove("hidden")})}).catch(function(e){throw document.querySelector("section.github").classList.add("removed"),e})}(),document.addEventListener("click",function(e){function t(){for(var e=document.querySelectorAll("a.has-popup input"),t=0;t<e.length;t++)e[t].classList.add("hidden")}var n=e.target.classList.contains("has-popup"),o=e.target.classList.contains("popup");if(n||o){var s=e.target.querySelector("input");e.target.classList.contains("popup")&&(s=e.target);var r=e.target.classList.contains("popup");s.classList.contains("hidden")?(t(),s.select(),s.classList.remove("hidden")):r||s.classList.add("hidden")}else t()}); 2 + //# sourceMappingURL=global.js.map
+1
docs/js/global.js.map
··· 1 + {"version":3,"sources":["js/global.js"],"names":["xhr","reqContent","url","options","arguments","length","undefined","callback","Promise","resolve","reject","type","contentType","open","XMLHttpRequest","JSON","stringify","send","setRequestHeader","onreadystatechange","this","responseText","String","status","startsWith","err","readyState","res","console","error","window","YTapiKey","Video","commissionsURL","personal","commissions","all","then","results","log","items","concat","sort","a","b","dateA","Date","snippet","publishedAt","splice","i","resourceId","videoId","img","thumbnails","high","item","title","document","querySelector","setAttribute","classList","remove","add","Error","Lacuna","tracks","permalink_url","artwork_url","replace","GitHub","body","headers","Authorization","fetch","method","token","Content-Type","response","result","catch","data","user","pinnedRepositories","edges","repo","repos","node","description","repoWebsite","homepageUrl","name","addEventListener","inputs","querySelectorAll","innerHTML","repoUrl","hasClassHasPopup","target","contains","hasClassPopup","input","clickedInput","hideAllInputs","e","select"],"mappings":"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","file":"global.js","sourcesContent":["function xhr (reqContent, url, options = {}, callback) {\n return new Promise((resolve, reject) => {\n if (typeof options === 'function') callback = options\n if (typeof options === 'function') options = {}\n if (options.type == undefined) options.type = 'POST'\n if (options.contentType == undefined) options.contentType = 'json'\n var xhr = new XMLHttpRequest()\n xhr.open(options.type, url, true)\n if (options.type == 'GET') {\n xhr.send()\n } else if (options.contentType == 'form') {\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')\n xhr.send('data=' + JSON.stringify(reqContent))\n } else if (options.contentType == 'json') {\n xhr.setRequestHeader('Content-type', 'application/json')\n xhr.send(JSON.stringify(reqContent))\n } else if (options.contentType == 'none') {\n xhr.send(reqContent)\n // for file uploads (multipart/form-data)\n } else if (options.contentType) {\n xhr.setRequestHeader('Content-type', options.contentType)\n xhr.send(reqContent)\n }\n xhr.onreadystatechange = function () {\n if (this.readyState == 4) {\n let res = JSON.parse(this.responseText)\n let err = null\n if (!String(this.status).startsWith('2')) {\n console.error('HTTP error ' + this.status)\n err = this.status\n }\n if (err) reject(err)\n else resolve(res)\n if (callback) callback(res, err)\n }\n }\n // resolve(5);\n })\n}\nwindow.xhr = xhr\n\nvar YTapiKey = 'AIzaSyBnQnpboWUfWyR8aW6HuQV5MAlxZ5FQ090';\n\n(function Video () {\n var maxResults = 6\n\n var url = 'https://www.googleapis.com/youtube/v3/playlistItems' +\n '?key=' + YTapiKey +\n '&part=snippet' +\n '&maxResults=' + maxResults +\n '&playlistId='\n var personalURL = url + 'UUy6jcAF6fZGttRvihyQixbA'\n var commissionsURL = url + 'PL84-DNDSU8p5WP6jA7hvOCV9dIKBNjdCS'\n var personal = xhr(null, personalURL, { type: 'GET' })\n var commissions = xhr(null, commissionsURL, { type: 'GET' })\n Promise.all([personal, commissions]).then((results) => {\n console.log('==--==--==--> YouTube Personal + Commissions')\n console.log(results)\n // combine video and commission responses\n var items = results[0].items.concat(results[1].items)\n items.sort(function (a, b) {\n var dateA = new Date(a.snippet.publishedAt)\n var dateB = new Date(b.snippet.publishedAt)\n return dateB - dateA // sort by date ascending\n })\n items = items.splice(0, maxResults)\n for (var i = 0; i < items.length; i++) {\n var url = items[i].snippet.resourceId.videoId\n var img = items[i].snippet.thumbnails.high.url\n var title = items[i].snippet.title\n var item = document.querySelector('section.video .thumbnails a.item:nth-child(' + (i + 1) + ')')\n item.setAttribute('href', 'https://www.youtube.com/watch?v=' + url)\n item.querySelector('img').setAttribute('src', img)\n }\n document.querySelector('section.video').classList.remove('hidden')\n }, (err) => {\n document.querySelector('section.video').classList.add('removed')\n console.log('Could not fetch Video YouTube playlistItems')\n throw Error(err)\n })\n})();\n\n(function Synctan () {\n var maxResults = 6\n\n var url = 'https://www.googleapis.com/youtube/v3/playlistItems' +\n '?key=' + YTapiKey +\n '&part=snippet' +\n '&maxResults=' + maxResults +\n '&playlistId=UUoMimPRPeR28TM3_0cinjVQ'\n xhr(null, url, { type: 'GET' }).then((result) => {\n console.log('==--==--==-->YouTube Synctan')\n console.log(result)\n var items = result.items\n for (var i = 0; i < items.length; i++) {\n var url = items[i].snippet.resourceId.videoId\n var img = items[i].snippet.thumbnails.high.url\n var title = items[i].snippet.title\n var item = document.querySelector('section.synctan .thumbnails .item:nth-child(' + (i + 1) + ')')\n item.setAttribute('href', 'https://www.youtube.com/watch?v=' + url)\n item.querySelector('img').setAttribute('src', img)\n }\n document.querySelector('section.synctan').classList.remove('hidden')\n }, (err) => {\n document.querySelector('section.synctan').classList.add('removed')\n console.log('Could not fetch Synctan YouTube playlistItems')\n throw Error(err)\n })\n})();\n\n(function Lacuna () {\n var maxResults = 8\n\n // Lacuna\n var clientID = '6ibYZTmF5qnpvp88S9V3werVrC18WCdC'\n var url = 'https://api.soundcloud.com/users/247370320/tracks' +\n '?limit=' + maxResults +\n '&client_id=' + clientID\n xhr(null, url, { type: 'GET' }).then((tracks) => {\n console.log('==--==--==--> SoundCloud Lacuna')\n console.log(tracks)\n for (var i = 0; i < 6; i++) {\n var url = tracks[i].permalink_url\n var img = tracks[i].artwork_url.replace('large', 't300x300')\n var item = document.querySelector('section.lacuna .thumbnails .item:nth-child(' + (i + 1) + ')')\n item.setAttribute('href', url)\n item.querySelector('img').setAttribute('src', img)\n }\n document.querySelector('section.lacuna').classList.remove('hidden')\n }, (err) => {\n document.querySelector('section.lacuna').classList.add('removed')\n console.log('Could not fetch SoundCloud tracks')\n throw Error(err)\n })\n})();\n\n(function GitHub () {\n // this is so babel won't combine the two string into one, and\n // make GitHub revoke the token when it detects it in the commit\n let token = '510127accaf075e7a33b'\n if (true) token += '04e4569c7e2f78c83539'\n fetch('https://api.github.com/graphql', {\n body: JSON.stringify({\n query: `\n query {\n user(login:\"SpectralKH\") {\n pinnedRepositories(first:6) {\n edges {\n node {\n description\n homepageUrl\n url\n name\n }\n }\n }\n }\n }\n `\n }),\n headers: {\n Authorization: 'bearer ' + token,\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n method: 'POST'\n })\n .then((response) => {\n if (response.ok) return response\n else throw Error(response)\n })\n .then((response) => {\n response.json().then((result) => {\n console.log('==--==--==--> GitHub')\n console.log(result.data)\n const repos = result.data.user.pinnedRepositories.edges\n for (var i = 0; i < 6; i++) {\n const repo = repos[i].node\n const description = repo.description\n const repoWebsite = repo.homepageUrl\n const name = repo.name\n const repoUrl = repo.url\n // const img = tracks[i].artwork_url.replace('large', 't300x300')\n const item = document.querySelector('section.github .cards .item:nth-child(' + (i + 1) + ')')\n // item.setAttribute('href', url)\n item.querySelector('p.title').innerHTML = name\n item.querySelector('p.description').innerHTML = description\n if (repoUrl) {\n item.querySelector('a.repo-url').setAttribute('href', repoUrl)\n item.querySelector('a.repo-url').classList.remove('hidden')\n }\n if (repoWebsite) {\n item.querySelector('a.repo-website').setAttribute('href', repoWebsite)\n item.querySelector('a.repo-website').classList.remove('hidden')\n }\n }\n document.querySelector('section.github').classList.remove('hidden')\n })\n })\n .catch((err) => {\n document.querySelector('section.github').classList.add('removed')\n throw err\n })\n})()\n\n// discord/email popups\ndocument.addEventListener('click', function (e) {\n function hideAllInputs () {\n var inputs = document.querySelectorAll('a.has-popup input')\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].classList.add('hidden')\n }\n }\n var hasClassHasPopup = e.target.classList.contains('has-popup')\n var hasClassPopup = e.target.classList.contains('popup')\n if (hasClassHasPopup || hasClassPopup) {\n var input = e.target.querySelector('input')\n if (e.target.classList.contains('popup')) input = e.target\n var clickedInput = e.target.classList.contains('popup')\n var inputIsHidden = input.classList.contains('hidden')\n if (inputIsHidden) {\n hideAllInputs()\n input.select()\n input.classList.remove('hidden')\n } else if (!clickedInput) {\n input.classList.add('hidden')\n }\n } else {\n // clicked anywhere\n hideAllInputs()\n }\n})\n"]}