消える飛行機雲 僕たちは見送った 眩しくて逃げた いつだって弱くて あの日から変わらず いつまでも変わらずに いられなかったこと 悔しくて指を離す あの鳥は まだ うまく飛べないけど いつかは 風を切って知る 届かない場所が まだ遠くにある 願いだけ秘めて 見つめてる 子供たちは 夏の線路 歩く 吹く風に素足をさらして 遠くには幼かった日びを 両手には 飛び立つ希望を 消える飛行機雲 追いかけて 追いかけて この丘を越えた あの日から変わらず いつまでも 真っ直ぐに 僕たちはあるように わたつみのような 強さを守れるよ きっと ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!overrideDirs($overrides); $this->env = $env ?: (\PHP_SAPI === 'cli-server' ? new SystemEnv() : new SuperglobalsEnv()); } /** * Provide `configDir`, `dataDir` and `runtimeDir` overrides. * * If a key is set but empty, the override will be removed. If it is not set * at all, any existing override will persist. * * @param string[] $overrides Directory overrides */ public function overrideDirs(array $overrides) { if (\array_key_exists('configDir', $overrides)) { $this->configDir = $overrides['configDir'] ?: null; } if (\array_key_exists('dataDir', $overrides)) { $this->dataDir = $overrides['dataDir'] ?: null; } if (\array_key_exists('runtimeDir', $overrides)) { $this->runtimeDir = $overrides['runtimeDir'] ?: null; } } /** * Get the current home directory. * * @return string|null */ public function homeDir() { if ($homeDir = $this->getEnv('HOME') ?: $this->windowsHomeDir()) { return \strtr($homeDir, '\\', '/'); } return null; } private function windowsHomeDir() { if (\defined('PHP_WINDOWS_VERSION_MAJOR')) { $homeDrive = $this->getEnv('HOMEDRIVE'); $homePath = $this->getEnv('HOMEPATH'); if ($homeDrive && $homePath) { return $homeDrive.'/'.$homePath; } } return null; } private function homeConfigDir() { if ($homeConfigDir = $this->getEnv('XDG_CONFIG_HOME')) { return $homeConfigDir; } $homeDir = $this->homeDir(); return $homeDir === '/' ? $homeDir.'.config' : $homeDir.'/.config'; } /** * Get potential config directory paths. * * Returns `~/.psysh`, `%APPDATA%/PsySH` (when on Windows), and all * XDG Base Directory config directories: * * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html * * @return string[] */ public function configDirs(): array { if ($this->configDir !== null) { return [$this->configDir]; } $configDirs = $this->getEnvArray('XDG_CONFIG_DIRS') ?: ['/etc/xdg']; return $this->allDirNames(\array_merge([$this->homeConfigDir()], $configDirs)); } /** * @deprecated */ public static function getConfigDirs(): array { return (new self())->configDirs(); } /** * Get potential home config directory paths. * * Returns `~/.psysh`, `%APPDATA%/PsySH` (when on Windows), and the * XDG Base Directory home config directory: * * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html * * @deprecated * * @return string[] */ public static function getHomeConfigDirs(): array { // Not quite the same, but this is deprecated anyway /shrug return self::getConfigDirs(); } /** * Get the current home config directory. * * Returns the highest precedence home config directory which actually * exists. If none of them exists, returns the highest precedence home * config directory (`%APPDATA%/PsySH` on Windows, `~/.config/psysh` * everywhere else). * * @see self::homeConfigDir */ public function currentConfigDir(): string { if ($this->configDir !== null) { return $this->configDir; } $configDirs = $this->allDirNames([$this->homeConfigDir()]); foreach ($configDirs as $configDir) { if (@\is_dir($configDir)) { return $configDir; } } return $configDirs[0]; } /** * @deprecated */ public static function getCurrentConfigDir(): string { return (new self())->currentConfigDir(); } /** * Find real config files in config directories. * * @param string[] $names Config file names * * @return string[] */ public function configFiles(array $names): array { return $this->allRealFiles($this->configDirs(), $names); } /** * @deprecated */ public static function getConfigFiles(array $names, $configDir = null): array { return (new self(['configDir' => $configDir]))->configFiles($names); } /** * Get potential data directory paths. * * If a `dataDir` option was explicitly set, returns an array containing * just that directory. * * Otherwise, it returns `~/.psysh` and all XDG Base Directory data directories: * * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html * * @return string[] */ public function dataDirs(): array { if ($this->dataDir !== null) { return [$this->dataDir]; } $homeDataDir = $this->getEnv('XDG_DATA_HOME') ?: $this->homeDir().'/.local/share'; $dataDirs = $this->getEnvArray('XDG_DATA_DIRS') ?: ['/usr/local/share', '/usr/share']; return $this->allDirNames(\array_merge([$homeDataDir], $dataDirs)); } /** * @deprecated */ public static function getDataDirs(): array { return (new self())->dataDirs(); } /** * Find real data files in config directories. * * @param string[] $names Config file names * * @return string[] */ public function dataFiles(array $names): array { return $this->allRealFiles($this->dataDirs(), $names); } /** * @deprecated */ public static function getDataFiles(array $names, $dataDir = null): array { return (new self(['dataDir' => $dataDir]))->dataFiles($names); } /** * Get a runtime directory. * * Defaults to `/psysh` inside the system's temp dir. */ public function runtimeDir(): string { if ($this->runtimeDir !== null) { return $this->runtimeDir; } // Fallback to a boring old folder in the system temp dir. $runtimeDir = $this->getEnv('XDG_RUNTIME_DIR') ?: \sys_get_temp_dir(); return \strtr($runtimeDir, '\\', '/').'/psysh'; } /** * @deprecated */ public static function getRuntimeDir(): string { return (new self())->runtimeDir(); } /** * Get a list of directories in PATH. * * If $PATH is unset/empty it defaults to '/usr/sbin:/usr/bin:/sbin:/bin'. * * @return string[] */ public function pathDirs(): array { return $this->getEnvArray('PATH') ?: ['/usr/sbin', '/usr/bin', '/sbin', '/bin']; } /** * Locate a command (an executable) in $PATH. * * Behaves like 'command -v COMMAND' or 'which COMMAND'. * If $PATH is unset/empty it defaults to '/usr/sbin:/usr/bin:/sbin:/bin'. * * @param string $command the executable to locate * * @return string */ public function which($command) { foreach ($this->pathDirs() as $path) { $fullpath = $path.\DIRECTORY_SEPARATOR.$command; if (@\is_file($fullpath) && @\is_executable($fullpath)) { return $fullpath; } } return null; } /** * Get all PsySH directory name candidates given a list of base directories. * * This expects that XDG-compatible directory paths will be passed in. * `psysh` will be added to each of $baseDirs, and we'll throw in `~/.psysh` * and a couple of Windows-friendly paths as well. * * @param string[] $baseDirs base directory paths * * @return string[] */ private function allDirNames(array $baseDirs): array { $dirs = \array_map(function ($dir) { return \strtr($dir, '\\', '/').'/psysh'; }, $baseDirs); // Add ~/.psysh if ($home = $this->getEnv('HOME')) { $dirs[] = \strtr($home, '\\', '/').'/.psysh'; } // Add some Windows specific ones :) if (\defined('PHP_WINDOWS_VERSION_MAJOR')) { if ($appData = $this->getEnv('APPDATA')) { // AppData gets preference \array_unshift($dirs, \strtr($appData, '\\', '/').'/PsySH'); } if ($windowsHomeDir = $this->windowsHomeDir()) { $dir = \strtr($windowsHomeDir, '\\', '/').'/.psysh'; if (!\in_array($dir, $dirs)) { $dirs[] = $dir; } } } return $dirs; } /** * Given a list of directories, and a list of filenames, find the ones that * are real files. * * @return string[] */ private function allRealFiles(array $dirNames, array $fileNames): array { $files = []; foreach ($dirNames as $dir) { foreach ($fileNames as $name) { $file = $dir.'/'.$name; if (@\is_file($file)) { $files[] = $file; } } } return $files; } /** * Ensure that $dir exists and is writable. * * Generates E_USER_NOTICE error if the directory is not writable or creatable. * * @param string $dir * * @return bool False if directory exists but is not writeable, or cannot be created */ public static function ensureDir(string $dir): bool { if (!\is_dir($dir)) { // Just try making it and see if it works @\mkdir($dir, 0700, true); } if (!\is_dir($dir) || !\is_writable($dir)) { \trigger_error(\sprintf('Writing to directory %s is not allowed.', $dir), \E_USER_NOTICE); return false; } return true; } /** * Ensure that $file exists and is writable, make the parent directory if necessary. * * Generates E_USER_NOTICE error if either $file or its directory is not writable. * * @param string $file * * @return string|false Full path to $file, or false if file is not writable */ public static function touchFileWithMkdir(string $file) { if (\file_exists($file)) { if (\is_writable($file)) { return $file; } \trigger_error(\sprintf('Writing to %s is not allowed.', $file), \E_USER_NOTICE); return false; } if (!self::ensureDir(\dirname($file))) { return false; } \touch($file); return $file; } private function getEnv($key) { return $this->env->get($key); } private function getEnvArray($key) { if ($value = $this->getEnv($key)) { return \explode(\PATH_SEPARATOR, $value); } return null; } }